Bluetooth communication for flocking.
Fork of BeautifulMemeProject by
Diff: PsiSwarm/eprom.cpp
- Revision:
- 1:f6356cf1cefc
- Parent:
- 0:8a5497a2e366
- Child:
- 2:a6214fd156ff
--- a/PsiSwarm/eprom.cpp Sat Oct 03 22:48:50 2015 +0000 +++ b/PsiSwarm/eprom.cpp Sat Oct 03 23:09:10 2015 +0000 @@ -1,9 +1,9 @@ /** 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 @@ -11,7 +11,7 @@ * Example: * @code * #include "psiswarm.h" - * + * * int main() { * init(); * write_eeprom_byte(0,0xDD); //Writes byte 0xDD in EPROM address 0 @@ -20,34 +20,36 @@ * } * @endcode */ - -#include "psiswarm.h" + +#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 ){ +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); + 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 read_eeprom_byte ( int address ) +{ char address_array [2]; address_array[0] = address / 256; address_array[1] = address % 256; @@ -61,7 +63,8 @@ * * @return The character stored at address after the previous one read from */ -char read_next_eeprom_byte (){ +char read_next_eeprom_byte () +{ char data [1]; primary_i2c.read(EEPROM_ADDRESS, data, 1, false); return data [0]; @@ -71,10 +74,18 @@ * * @return 1 if a valid firmware is read, 0 otherwise */ -char read_firmware (){ +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; + primary_i2c.read(EEPROM_ADDRESS, firmware_bytes, 20, false); + + if(firmware_bytes[0] == PSI_BYTE) { + // Parse firmware + char firmware_string [8]; + sprintf(firmware_string,"%d.%d",firmware_bytes[9],firmware_bytes[10]); + firmware_version = atof(firmware_string); + return 1; + } return 0; } \ No newline at end of file