.
Diff: EEPROM4UID.cpp
- Revision:
- 0:c8ec63cf1007
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EEPROM4UID.cpp Sun Jan 23 05:06:09 2022 +0000 @@ -0,0 +1,112 @@ +#include "EEPROM4UID.h" + +EEPROM4UID::EEPROM4UID(PinName SDA,PinName SCL,uint16_t epraddr):eeprom(SDA,SCL){ + eeprom.frequency(400000); + EPR_ADDR = epraddr; +} + +// Funciòn para escrbir en la EEPROM +int8_t EEPROM4UID::writeStr_EEPROM(uint16_t mem_addr, uint8_t* str){ + eeprom.start(); + int ack=eeprom.write(EPR_ADDR<<1); + //printf("%d\n",ack); + if(ack==1){ + eeprom.write(mem_addr>>8);//MSB de la posicion inicial a escribir + eeprom.write(mem_addr);//LSB de la posicion inicial a escribir + int i=0; + while(str[i]!='\n'){ + eeprom.write(str[i]); + i++; + } + eeprom.stop(); + printf("escritura completa\n"); + return 1; + } + + else if(ack==0){ + printf("NACK"); + return -1; + } + else if(ack==2){ + printf("TIMEOUT"); + return -2; + } + return 0; +} + +// Funcciòn para leer en la EPPROM +int8_t EEPROM4UID::readByte_EEPROM(uint16_t mem_addr, uint8_t* byte){ + //secuencia de lectura de 1 byte desde una direccion especifica de la eeprom + eeprom.start(); + int ack=eeprom.write(EPR_ADDR<<1); + if(ack==1){ + eeprom.write(mem_addr>>8);//MSB de la posicion a leer + eeprom.write(mem_addr); //LSB de la posicion a leer + eeprom.start(); + eeprom.write(EPR_ADDR<<1|0x01); + *byte=eeprom.read(0); + eeprom.stop(); + return 1; + } + else if(ack==0){ + printf("NACK"); + return -1; + } + else if(ack==2){ + printf("TIMEOUT"); + return -2; + } + return 0; +} + +// esta función actualiza el UID +void EEPROM4UID::updt_uidn(NUID &num){ // se declara dentro de la calse EEPROM4UID + uint8_t initUIDnum[]={num.uidn_hl[1],num.uidn_hl[0],'\n'}; + writeStr_EEPROM(0x0000,initUIDnum); // se escribe desde la posición cero +} +uint16_t EEPROM4UID::wrt_newUID(UID &newUID){ + uint8_t newUID_f[]={newUID.bytes[3],newUID.bytes[2],newUID.bytes[1],newUID.bytes[0],'\n'}; + writeStr_EEPROM(4*n.uidn+2,newUID_f); + n.uidn++; + this->updt_uidn(n); // actualizar el # de UIDS que hay en la memoria + return n.uidn; // # de UIDS + + +} + + +uint16_t EEPROM4UID::read_uidn(){ + uint8_t NUIDH, NUIDL; + readByte_EEPROM(0x0000,&NUIDH);//leer cantidad de uid parte alta + readByte_EEPROM(0x0001,&NUIDL);// " " parte baja + n.uidn= NUIDH<<8 | NUIDL; + return n.uidn; +} + +// Función que vuelca la bse de datos de la eeprom a al ram de la mbed +void EEPROM4UID::read_database(UID* dtbse){ + for(int i=0; i<n.uidn; i++){ + for(int j=0; j<4; j++){ // este for es porque se lee byte a byte + readByte_EEPROM(i*4+j+2,&(dtbse[i].bytes[j])); + // Las primeras dos posiciones de la memoria están ocupadas por el # de UIDs + } + } +} + + +/* +//comparar desde el key +// ESTE ES EL ALGORITMO DE BUSQUEDA +void EEPROM4UID::busqueda(UID* dtse,uint16_t N,UID &IDbus){ + + // if(updt_uidn(n)> 0){ // updt es quien actualiza numero de UIDs + for(int i=0; i<N; i++){ + if (dtse[i].key == IDbus.key){ + printf("El UID a buscar se encuentra en la base de datos \n") ; + } + printf("El UID a buscar NO se encuentra en la base de datos \n") ; + } +} +*/ + +