system/cfgdata: implement "format" option
Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com>
This commit is contained in:
parent
f1a74533f2
commit
c88dd4bbaf
@ -31,6 +31,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private data
|
* Private data
|
||||||
@ -87,7 +88,9 @@ static void cfgdatacmd_help(void)
|
|||||||
static int cfgdatacmd_idtok(int startpos, char *token)
|
static int cfgdatacmd_idtok(int startpos, char *token)
|
||||||
{
|
{
|
||||||
while (token[startpos] != ',' && token[startpos] != '\0')
|
while (token[startpos] != ',' && token[startpos] != '\0')
|
||||||
startpos++;
|
{
|
||||||
|
startpos++;
|
||||||
|
}
|
||||||
|
|
||||||
if (token[startpos] != ',')
|
if (token[startpos] != ',')
|
||||||
{
|
{
|
||||||
@ -112,7 +115,7 @@ static int cfgdatacmd_idtok(int startpos, char *token)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static void cfgdatacmd_parse_byte_array(struct config_data_s *cfg,
|
static void cfgdatacmd_parse_byte_array(struct config_data_s *cfg,
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
int c;
|
int c;
|
||||||
@ -162,7 +165,7 @@ static void cfgdatacmd_parse_byte_array(struct config_data_s *cfg,
|
|||||||
{
|
{
|
||||||
/* Perform dynamic memory allocation */
|
/* Perform dynamic memory allocation */
|
||||||
|
|
||||||
cfg->configdata = (FAR uint8_t *) malloc(count);
|
cfg->configdata = (FAR uint8_t *)malloc(count);
|
||||||
cfg->len = count;
|
cfg->len = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,13 +186,13 @@ static void cfgdatacmd_parse_byte_array(struct config_data_s *cfg,
|
|||||||
/* Hex byte */
|
/* Hex byte */
|
||||||
|
|
||||||
sscanf(&argv[x][c + 2], "%x", &val);
|
sscanf(&argv[x][c + 2], "%x", &val);
|
||||||
cfg->configdata[count] = (uint8_t) val;
|
cfg->configdata[count] = (uint8_t)val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Decimal value */
|
/* Decimal value */
|
||||||
|
|
||||||
cfg->configdata[count] = (uint8_t) atoi(&argv[x][c]);
|
cfg->configdata[count] = (uint8_t)atoi(&argv[x][c]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Increment the count */
|
/* Increment the count */
|
||||||
@ -295,7 +298,7 @@ static void cfgdatacmd_set(int argc, char *argv[])
|
|||||||
|
|
||||||
if (isnumber)
|
if (isnumber)
|
||||||
{
|
{
|
||||||
sscanf(&argv[3][2], "%x", (int32_t *) &cfg.configdata);
|
sscanf(&argv[3][2], "%" SCNx32, (int32_t *)&cfg.configdata);
|
||||||
cfg.len = 4;
|
cfg.len = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -315,7 +318,7 @@ static void cfgdatacmd_set(int argc, char *argv[])
|
|||||||
if (isnumber)
|
if (isnumber)
|
||||||
{
|
{
|
||||||
int32_t temp = atoi(argv[3]);
|
int32_t temp = atoi(argv[3]);
|
||||||
*((int32_t *) cfg.configdata) = temp;
|
*((int32_t *)cfg.configdata) = temp;
|
||||||
cfg.len = 4;
|
cfg.len = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -324,14 +327,14 @@ static void cfgdatacmd_set(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
/* Point to the string and calculate the length */
|
/* Point to the string and calculate the length */
|
||||||
|
|
||||||
cfg.configdata = (FAR uint8_t *) argv[3];
|
cfg.configdata = (FAR uint8_t *)argv[3];
|
||||||
cfg.len = strlen(argv[3]) + 1;
|
cfg.len = strlen(argv[3]) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now open the /dev/config file and set the config item */
|
/* Now open the /dev/config file and set the config item */
|
||||||
|
|
||||||
if ((fd = open(g_config_dev, O_RDONLY)) < 2)
|
if ((fd = open(g_config_dev, O_WRONLY)) < 2)
|
||||||
{
|
{
|
||||||
/* Display error */
|
/* Display error */
|
||||||
|
|
||||||
@ -339,7 +342,7 @@ static void cfgdatacmd_set(int argc, char *argv[])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ioctl(fd, CFGDIOC_SETCONFIG, (unsigned long) &cfg);
|
ret = ioctl(fd, CFGDIOC_SETCONFIG, (unsigned long)(uintptr_t)&cfg);
|
||||||
|
|
||||||
/* Close the file and report error if any */
|
/* Close the file and report error if any */
|
||||||
|
|
||||||
@ -351,7 +354,7 @@ static void cfgdatacmd_set(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Free the cfg.configdata if needed */
|
/* Free the cfg.configdata if needed */
|
||||||
|
|
||||||
if (cfg.configdata != (FAR uint8_t *) argv[3] &&
|
if (cfg.configdata != (FAR uint8_t *)argv[3] &&
|
||||||
cfg.configdata != data)
|
cfg.configdata != data)
|
||||||
{
|
{
|
||||||
free(cfg.configdata);
|
free(cfg.configdata);
|
||||||
@ -398,7 +401,7 @@ static void cfgdatacmd_unset(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Try to open the /dev/config file */
|
/* Try to open the /dev/config file */
|
||||||
|
|
||||||
if ((fd = open(g_config_dev, O_RDONLY)) < 2)
|
if ((fd = open(g_config_dev, O_WRONLY)) < 2)
|
||||||
{
|
{
|
||||||
/* Display error */
|
/* Display error */
|
||||||
|
|
||||||
@ -408,7 +411,7 @@ static void cfgdatacmd_unset(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Delete the config item */
|
/* Delete the config item */
|
||||||
|
|
||||||
ret = ioctl(fd, CFGDIOC_DELCONFIG, (unsigned long) &cfg);
|
ret = ioctl(fd, CFGDIOC_DELCONFIG, (unsigned long)(uintptr_t)&cfg);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
@ -468,7 +471,7 @@ static void cfgdatacmd_print(int argc, char *argv[])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg.configdata = (FAR uint8_t *) malloc(256);
|
cfg.configdata = (FAR uint8_t *)malloc(256);
|
||||||
cfg.len = 256;
|
cfg.len = 256;
|
||||||
if (cfg.configdata == NULL)
|
if (cfg.configdata == NULL)
|
||||||
{
|
{
|
||||||
@ -478,7 +481,7 @@ static void cfgdatacmd_print(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Get the config item */
|
/* Get the config item */
|
||||||
|
|
||||||
ret = ioctl(fd, CFGDIOC_GETCONFIG, (unsigned long) &cfg);
|
ret = ioctl(fd, CFGDIOC_GETCONFIG, (unsigned long)(uintptr_t)&cfg);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
@ -567,7 +570,7 @@ static void cfgdatacmd_show_all_config_items(void)
|
|||||||
|
|
||||||
/* Get the first config item */
|
/* Get the first config item */
|
||||||
|
|
||||||
cfg.configdata = (FAR uint8_t *) malloc(256);
|
cfg.configdata = (FAR uint8_t *)malloc(256);
|
||||||
cfg.len = 256;
|
cfg.len = 256;
|
||||||
if (cfg.configdata == NULL)
|
if (cfg.configdata == NULL)
|
||||||
{
|
{
|
||||||
@ -575,7 +578,7 @@ static void cfgdatacmd_show_all_config_items(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ioctl(fd, CFGDIOC_FIRSTCONFIG, (unsigned long) &cfg);
|
ret = ioctl(fd, CFGDIOC_FIRSTCONFIG, (unsigned long)(uintptr_t)&cfg);
|
||||||
|
|
||||||
while (ret != -1)
|
while (ret != -1)
|
||||||
{
|
{
|
||||||
@ -636,13 +639,41 @@ static void cfgdatacmd_show_all_config_items(void)
|
|||||||
/* Get the next config item */
|
/* Get the next config item */
|
||||||
|
|
||||||
cfg.len = 256;
|
cfg.len = 256;
|
||||||
ret = ioctl(fd, CFGDIOC_NEXTCONFIG, (unsigned long) &cfg);
|
ret = ioctl(fd, CFGDIOC_NEXTCONFIG, (unsigned long)(uintptr_t)&cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
free(cfg.configdata);
|
free(cfg.configdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Erase all config items
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static void cfgdatacmd_format(void)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Try to open the /dev/config file */
|
||||||
|
|
||||||
|
if ((fd = open(g_config_dev, O_WRONLY)) < 2)
|
||||||
|
{
|
||||||
|
/* Display error */
|
||||||
|
|
||||||
|
printf("error: unable to open %s\n", g_config_dev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ioctl(fd, MTDIOC_BULKERASE, 0);
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
printf("Error %d config format\n", errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -721,6 +752,16 @@ int main(int argc, FAR char *argv[])
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test for "format" cmd */
|
||||||
|
|
||||||
|
if (strcmp(argv[1], "format") == 0)
|
||||||
|
{
|
||||||
|
/* Call the routine to erase all config items */
|
||||||
|
|
||||||
|
cfgdatacmd_format();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Unknown cmd */
|
/* Unknown cmd */
|
||||||
|
|
||||||
printf("Unknown config command: %s\n", argv[1]);
|
printf("Unknown config command: %s\n", argv[1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user