ft. button press reset

Dependencies:   mbed

Fork of BeaconDemo_RobotCode by Science Memeseum

Revision:
0:8a5497a2e366
Child:
1:f6356cf1cefc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PsiSwarm/eprom.cpp	Sat Oct 03 22:48:50 2015 +0000
@@ -0,0 +1,80 @@
+/** 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;
+}
\ No newline at end of file