.
EEPROM4UID.cpp
- Committer:
- anyela
- Date:
- 2022-01-23
- Revision:
- 0:c8ec63cf1007
File content as of revision 0:c8ec63cf1007:
#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") ; } } */