Bluetooth communication for flocking.

Dependencies:   mbed

Fork of BeautifulMemeProject by James Hilder

PsiSwarm/eprom.cpp

Committer:
jah128
Date:
2015-10-03
Revision:
0:8a5497a2e366
Child:
1:f6356cf1cefc

File content as of revision 0:8a5497a2e366:

/** University of York Robotics Laboratory PsiSwarm Library: Eprom Functions Source File
 * 
 * File: eprom.cpp
 *
 * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York
 * 
 * PsiSwarm Library Version: 0.2, October 2015
 *
 * Functions for accessing the 64Kb EPROM chip and reading the reserved firmware block
 *
 * Example:
 * @code
 * #include "psiswarm.h"
 * 
 * int main() {
 *     init();
 *     write_eeprom_byte(0,0xDD);    //Writes byte 0xDD in EPROM address 0
 *     char c = read_eeprom_byte(0); //c will hold 0xDD
 *     //Valid address range is from 0 to 65279
 * }
 * @endcode
 */
 
#include "psiswarm.h" 

/** Write a single byte to the EPROM
 *
 * @param address The address to store the data, range 0-65279
 * @param data The character to store
 */
void write_eeprom_byte ( int address, char data ){
    char write_array[3];
    if(address > 65279){
        debug("WARNING: Attempt to write to invalid EPROM address: %X",address);   
    }else{
    write_array[0] = address / 256;
    write_array[1] = address % 256;
    write_array[2] = data;
    primary_i2c.write(EEPROM_ADDRESS, write_array, 3, false);
    //Takes 5ms to write a page: ideally this could be done with a timer or RTOS
    wait(0.005);
    }
}
   
/** Read a single byte from the EPROM
 *
 * @param address The address to read from, range 0-65279
 * @return The character stored at address
 */    
char read_eeprom_byte ( int address ){
    char address_array [2];
    address_array[0] = address / 256;
    address_array[1] = address % 256;
    char data [1];
    primary_i2c.write(EEPROM_ADDRESS, address_array, 2, false);
    primary_i2c.read(EEPROM_ADDRESS, data, 1, false);
    return data [0];
}

/** Read the next byte from the EPROM, to be called after read_eeprom_byte
 *
 * @return The character stored at address after the previous one read from
 */
char read_next_eeprom_byte (){
    char data [1];
    primary_i2c.read(EEPROM_ADDRESS, data, 1, false);
    return data [0];
}

/** Read the data stored in the reserved firmware area of the EPROM
 *
 * @return 1 if a valid firmware is read, 0 otherwise
 */
char read_firmware (){
    char address_array [2] = {255,0};
    primary_i2c.write(EEPROM_ADDRESS, address_array, 2, false);
    primary_i2c.read(EEPROM_ADDRESS, firmware_bytes, 20, false);   
    if(firmware_bytes[0] == PSI_BYTE) return 1;
    return 0;
}