#include "mbed.h"
#include "ble/BLE.h"
#include "pstorage.h"
#include "pstorage.c"
DigitalOut myled(P0_16);
DigitalOut myled1(P0_14);
DigitalOut buzzer(P0_19);
Serial pc(USBTX, USBRX);
pstorage_handle_t ps_handle;
/*pstorage_handle_t ls_handle;
pstorage_handle_t l_time_handle;
pstorage_handle_t btime_handle;*/
pstorage_module_param_t param;
static void cbP(pstorage_handle_t * handle,uint8_t op_code,uint32_t result,uint8_t * p_data,uint32_t data_len) {
pc.printf("opcode:%d data:%s len:%d EOL\r\n",op_code,p_data, data_len);
}
#define PBSIZE 16
//uint8_t source_ls[16] = "4";
int persist_size;
int persist_index;
char to_persist_char[PBSIZE];
uint8_t to_persist[PBSIZE];
uint8_t from_persist[PBSIZE];
uint8_t serial_ba[PBSIZE] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F};
uint8_t l_time_ba[PBSIZE];
uint32_t* p_count;
void initP(void) {
pstorage_init();
param.block_size = PBSIZE;
param.block_count = 10;
param.cb = cbP;
pstorage_register(¶m, &ps_handle);
//pstorage_block_identifier_get(&ps_handle, 0, &ls_handle);
//pstorage_block_identifier_get(&ps_handle, 1, &l_time_handle);
//pstorage_block_identifier_get(&ps_handle, 2, &btime_handle);
}
void storeSerial(void) {
uint32_t err_code;
wait(1);
pstorage_load(from_persist,&ps_handle, PBSIZE, 0);
wait(1);
if(from_persist[1]==0xFF) {
pc.printf("store serial %s, %d\r\n",serial_ba,sizeof(serial_ba));
err_code = pstorage_store(&ps_handle, serial_ba, PBSIZE, 0);
} else {
serial_ba[0] = 0x31;
pc.printf("update serial %s, %d\r\n",serial_ba,sizeof(serial_ba));
err_code = pstorage_update(&ps_handle, serial_ba, PBSIZE, 0);
}
pc.printf("code: %#x\r\n",err_code);
}
void readSerial(void) {
pstorage_load(from_persist,&ps_handle, PBSIZE, 0);
pc.printf("s: %s\r\n",from_persist);
}
int main()
{
buzzer = 0;
pc.baud(9600);
initP();
readSerial();
wait(1);
while(1) {
myled1 = 0;
myled = 1;
wait(1);
myled1 = 1;
myled = 0;
wait(3);
pc.printf("Tick \r\n");
wait(1);
storeSerial();
}
}
The first data "01234567890:;<=>?" is stored, but I can't update it to "11234567890:;<=>?".
On second try to update value, I recieve 0x04 code - NRF_ERROR_NO_MEM
Also callback invokes only on pstorage_load.
I have tried many many different variants, with pstorage_block_identifier_get and without - no results, I can write persistance storage only one time.
Hi, there is my test programm for persistance storage in nrf51822
The first data "01234567890:;<=>?" is stored, but I can't update it to "11234567890:;<=>?". On second try to update value, I recieve 0x04 code - NRF_ERROR_NO_MEM
Also callback invokes only on pstorage_load.
I have tried many many different variants, with pstorage_block_identifier_get and without - no results, I can write persistance storage only one time.
This is terminal output:
Also, if I clear memory before store, nothing stored