mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-02 19:11:36 +08:00
Merge branch 'NuttX/master'
This commit is contained in:
@@ -270,3 +270,7 @@
|
|||||||
are provided, then the current mountpoints are enumerated.
|
are provided, then the current mountpoints are enumerated.
|
||||||
* apps/nshlib/nsh_mntcmds.c: Add an NSH df command to list the
|
* apps/nshlib/nsh_mntcmds.c: Add an NSH df command to list the
|
||||||
properties of mounted file systems.
|
properties of mounted file systems.
|
||||||
|
* apps/nshlib/nsh_parse.c: Extend help command options. 'help' with
|
||||||
|
no arguments outputs a short list of commands. With -v lists all
|
||||||
|
command line details. And command name can be added to just get
|
||||||
|
help on one command.
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ Directory Location
|
|||||||
------------------
|
------------------
|
||||||
The default application directory used by the NuttX build should be named
|
The default application directory used by the NuttX build should be named
|
||||||
apps/ (or apps-x.y/ where x.y is the NuttX version number). This apps/
|
apps/ (or apps-x.y/ where x.y is the NuttX version number). This apps/
|
||||||
directory should appear in the directory tree at the same level as the
|
directoy should appear in the directory tree at the same level as the
|
||||||
NuttX directory. Like:
|
NuttX directory. Like:
|
||||||
|
|
||||||
.
|
.
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ o dd if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]
|
|||||||
|
|
||||||
o df
|
o df
|
||||||
|
|
||||||
Show the state of each mounted volume
|
Show the state of each mounted volume.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|||||||
+243
-74
@@ -88,6 +88,14 @@
|
|||||||
# define MAX_ARGV_ENTRIES (NSH_MAX_ARGUMENTS+4)
|
# define MAX_ARGV_ENTRIES (NSH_MAX_ARGUMENTS+4)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Help layout */
|
||||||
|
|
||||||
|
#define MAX_CMDLEN 12
|
||||||
|
#define CMDS_PER_LINE 5
|
||||||
|
|
||||||
|
#define NUM_CMDS (sizeof(g_cmdmap)/sizeof(struct cmdmap_s))
|
||||||
|
#define NUM_CMD_ROWS ((NUM_CMDS + (CMDS_PER_LINE-1)) / CMDS_PER_LINE)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Types
|
* Private Types
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -116,13 +124,13 @@ struct cmdarg_s
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef CONFIG_NSH_DISABLE_HELP
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_NSH_DISABLE_EXIT
|
#ifndef CONFIG_NSH_DISABLE_EXIT
|
||||||
static int cmd_exit(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
static int cmd_exit(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||||
#endif
|
#endif
|
||||||
static int cmd_unrecognized(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
static int cmd_unrecognized(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
@@ -203,7 +211,7 @@ static const struct cmdmap_s g_cmdmap[] =
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_NSH_DISABLE_HELP
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
{ "help", cmd_help, 1, 1, NULL },
|
{ "help", cmd_help, 1, 3, "[-v] [cmd]" },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NET
|
#ifdef CONFIG_NET
|
||||||
@@ -414,18 +422,40 @@ const char g_fmtsignalrecvd[] = "nsh: %s: Interrupted by signal\n";
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: cmd_help
|
* Name: help_cmdlist
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef CONFIG_NSH_DISABLE_HELP
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
static inline void help_cmdlist(FAR struct nsh_vtbl_s *vtbl)
|
||||||
{
|
{
|
||||||
const struct cmdmap_s *ptr;
|
int i;
|
||||||
#ifdef CONFIG_NSH_BUILTIN_APPS
|
int j;
|
||||||
FAR const char * name;
|
int k;
|
||||||
int i;
|
|
||||||
|
/* Print the command name in NUM_CMD_ROWS rows with CMDS_PER_LINE commands
|
||||||
|
* on each line.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_CMD_ROWS; i++)
|
||||||
|
{
|
||||||
|
nsh_output(vtbl, " ");
|
||||||
|
for (j = 0, k = i; j < CMDS_PER_LINE && k < NUM_CMDS; j++, k += CMDS_PER_LINE)
|
||||||
|
{
|
||||||
|
nsh_output(vtbl, "%-12s", g_cmdmap[k].cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsh_output(vtbl, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: help_usage
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
|
static inline void help_usage(FAR struct nsh_vtbl_s *vtbl)
|
||||||
|
{
|
||||||
nsh_output(vtbl, "NSH command forms:\n");
|
nsh_output(vtbl, "NSH command forms:\n");
|
||||||
#ifndef CONFIG_NSH_DISABLEBG
|
#ifndef CONFIG_NSH_DISABLEBG
|
||||||
nsh_output(vtbl, " [nice [-d <niceness>>]] <cmd> [> <file>|>> <file>] [&]\n");
|
nsh_output(vtbl, " [nice [-d <niceness>>]] <cmd> [> <file>|>> <file>] [&]\n");
|
||||||
@@ -439,30 +469,169 @@ static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|||||||
nsh_output(vtbl, " [sequence of <cmd>]\n");
|
nsh_output(vtbl, " [sequence of <cmd>]\n");
|
||||||
nsh_output(vtbl, " else\n");
|
nsh_output(vtbl, " else\n");
|
||||||
nsh_output(vtbl, " [sequence of <cmd>]\n");
|
nsh_output(vtbl, " [sequence of <cmd>]\n");
|
||||||
nsh_output(vtbl, " fi\n");
|
nsh_output(vtbl, " fi\n\n");
|
||||||
#endif
|
#endif
|
||||||
nsh_output(vtbl, "Where <cmd> is one of:\n");
|
}
|
||||||
for (ptr = g_cmdmap; ptr->cmd; ptr++)
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: help_showcmd
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
|
static void help_showcmd(FAR struct nsh_vtbl_s *vtbl,
|
||||||
|
FAR const struct cmdmap_s *cmdmap)
|
||||||
|
{
|
||||||
|
if (cmdmap->usage)
|
||||||
{
|
{
|
||||||
if (ptr->usage)
|
nsh_output(vtbl, " %s %s\n", cmdmap->cmd, cmdmap->usage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nsh_output(vtbl, " %s\n", cmdmap->cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: help_cmd
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
|
static int help_cmd(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd)
|
||||||
|
{
|
||||||
|
FAR const struct cmdmap_s *cmdmap;
|
||||||
|
|
||||||
|
/* Find the command in the command table */
|
||||||
|
|
||||||
|
for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
|
||||||
|
{
|
||||||
|
/* Is this the one we are looking for? */
|
||||||
|
|
||||||
|
if (strcmp(cmdmap->cmd, cmd) == 0)
|
||||||
{
|
{
|
||||||
nsh_output(vtbl, " %s %s\n", ptr->cmd, ptr->usage);
|
/* Yes... show it */
|
||||||
}
|
|
||||||
else
|
help_showcmd(vtbl, cmdmap);
|
||||||
{
|
return OK;
|
||||||
nsh_output(vtbl, " %s\n", ptr->cmd);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsh_output(vtbl, g_fmtcmdnotfound, cmd);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: help_allcmds
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
|
static inline void help_allcmds(FAR struct nsh_vtbl_s *vtbl)
|
||||||
|
{
|
||||||
|
FAR const struct cmdmap_s *cmdmap;
|
||||||
|
|
||||||
|
/* Show all of the commands in the command table */
|
||||||
|
|
||||||
|
for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
|
||||||
|
{
|
||||||
|
help_showcmd(vtbl, cmdmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: help_builtins
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
|
static inline void help_builtins(FAR struct nsh_vtbl_s *vtbl)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_NSH_BUILTIN_APPS
|
||||||
|
FAR const char *name;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* List the set of available built-in commands */
|
/* List the set of available built-in commands */
|
||||||
|
|
||||||
#ifdef CONFIG_NSH_BUILTIN_APPS
|
nsh_output(vtbl, "\nBuiltin Apps:\n");
|
||||||
nsh_output(vtbl, "\nBuiltin Apps:\n");
|
for (i = 0; (name = namedapp_getname(i)) != NULL; i++)
|
||||||
for (i = 0; (name = namedapp_getname(i)) != NULL; i++)
|
{
|
||||||
{
|
nsh_output(vtbl, " %s\n", name);
|
||||||
nsh_output(vtbl, " %s\n", name);
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: cmd_help
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NSH_DISABLE_HELP
|
||||||
|
static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||||
|
{
|
||||||
|
bool verbose = false;
|
||||||
|
FAR const char *cmd = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* The command may be followed by a verbose option */
|
||||||
|
|
||||||
|
i = 1;
|
||||||
|
if (argc > i)
|
||||||
|
{
|
||||||
|
if (strcmp(argv[i], "-v") == 0)
|
||||||
|
{
|
||||||
|
verbose = true;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The command line may end with a command name */
|
||||||
|
|
||||||
|
if (argc > i)
|
||||||
|
{
|
||||||
|
cmd = argv[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the generic usage if verbose is requested */
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
{
|
||||||
|
help_usage(vtbl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Are we showing help on a single command? */
|
||||||
|
|
||||||
|
if (cmd)
|
||||||
|
{
|
||||||
|
/* Yes.. show the single command */
|
||||||
|
|
||||||
|
nsh_output(vtbl, "%s usage:", cmd);
|
||||||
|
help_cmd(vtbl, cmd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* In verbose mode, show detailed help for all commands */
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
{
|
||||||
|
nsh_output(vtbl, "Where <cmd> is one of:\n");
|
||||||
|
help_allcmds(vtbl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, just show the list of command names */
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nsh_output(vtbl, "help usage:");
|
||||||
|
help_cmd(vtbl, "help");
|
||||||
|
nsh_output(vtbl, "\n");
|
||||||
|
help_cmdlist(vtbl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And show the list of built-in applications */
|
||||||
|
|
||||||
|
help_builtins(vtbl);
|
||||||
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -508,72 +677,72 @@ static int cmd_exit(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|||||||
|
|
||||||
static int nsh_execute(FAR struct nsh_vtbl_s *vtbl, int argc, char *argv[])
|
static int nsh_execute(FAR struct nsh_vtbl_s *vtbl, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
const struct cmdmap_s *cmdmap;
|
const struct cmdmap_s *cmdmap;
|
||||||
const char *cmd;
|
const char *cmd;
|
||||||
cmd_t handler = cmd_unrecognized;
|
cmd_t handler = cmd_unrecognized;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* The form of argv is:
|
/* The form of argv is:
|
||||||
*
|
*
|
||||||
* argv[0]: The command name. This is argv[0] when the arguments
|
* argv[0]: The command name. This is argv[0] when the arguments
|
||||||
* are, finally, received by the command vtblr
|
* are, finally, received by the command vtblr
|
||||||
* argv[1]: The beginning of argument (up to NSH_MAX_ARGUMENTS)
|
* argv[1]: The beginning of argument (up to NSH_MAX_ARGUMENTS)
|
||||||
* argv[argc]: NULL terminating pointer
|
* argv[argc]: NULL terminating pointer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cmd = argv[0];
|
cmd = argv[0];
|
||||||
|
|
||||||
/* Try to find a command in the application library. */
|
/* Try to find a command in the application library. */
|
||||||
|
|
||||||
#ifdef CONFIG_NSH_BUILTIN_APPS
|
#ifdef CONFIG_NSH_BUILTIN_APPS
|
||||||
ret = nsh_execapp(vtbl, cmd, argv);
|
ret = nsh_execapp(vtbl, cmd, argv);
|
||||||
|
|
||||||
/* If the built-in application was successfully started, return OK
|
/* If the built-in application was successfully started, return OK
|
||||||
* or 1 (if the application returned a non-zero exit status).
|
* or 1 (if the application returned a non-zero exit status).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
{
|
{
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* See if the command is one that we understand */
|
/* See if the command is one that we understand */
|
||||||
|
|
||||||
for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
|
for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
|
||||||
{
|
{
|
||||||
if (strcmp(cmdmap->cmd, cmd) == 0)
|
if (strcmp(cmdmap->cmd, cmd) == 0)
|
||||||
{
|
{
|
||||||
/* Check if a valid number of arguments was provided. We
|
/* Check if a valid number of arguments was provided. We
|
||||||
* do this simple, imperfect checking here so that it does
|
* do this simple, imperfect checking here so that it does
|
||||||
* not have to be performed in each command.
|
* not have to be performed in each command.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (argc < cmdmap->minargs)
|
if (argc < cmdmap->minargs)
|
||||||
{
|
{
|
||||||
/* Fewer than the minimum number were provided */
|
/* Fewer than the minimum number were provided */
|
||||||
|
|
||||||
nsh_output(vtbl, g_fmtargrequired, cmd);
|
nsh_output(vtbl, g_fmtargrequired, cmd);
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
else if (argc > cmdmap->maxargs)
|
else if (argc > cmdmap->maxargs)
|
||||||
{
|
{
|
||||||
/* More than the maximum number were provided */
|
/* More than the maximum number were provided */
|
||||||
|
|
||||||
nsh_output(vtbl, g_fmttoomanyargs, cmd);
|
nsh_output(vtbl, g_fmttoomanyargs, cmd);
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* A valid number of arguments were provided (this does
|
/* A valid number of arguments were provided (this does
|
||||||
* not mean they are right).
|
* not mean they are right).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
handler = cmdmap->handler;
|
handler = cmdmap->handler;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = handler(vtbl, argc, argv);
|
ret = handler(vtbl, argc, argv);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
+5
-1
@@ -3120,4 +3120,8 @@
|
|||||||
the PLL after re-awakening from deep sleep modes.
|
the PLL after re-awakening from deep sleep modes.
|
||||||
* fs/fs_foreachinode.c and fs/fs_foreachmountpoint.c: All logic to traverse
|
* fs/fs_foreachinode.c and fs/fs_foreachmountpoint.c: All logic to traverse
|
||||||
inodes and mountpoints in the NuttX psuedo-file system.
|
inodes and mountpoints in the NuttX psuedo-file system.
|
||||||
|
* fs/fat/fs_fat32.c: Max. filename length reported by statfs() was wrong
|
||||||
|
if FAT long file names were enabled.
|
||||||
|
* lib/stdio/lib_libvsprintf.c: Fieldwidth and justification were not
|
||||||
|
supported for the %s format. As a result, %s, %12s, and %-12s all
|
||||||
|
produced the same output.
|
||||||
|
|||||||
+23
-26
@@ -15,7 +15,7 @@ nuttx/
|
|||||||
(5) Binary loaders (binfmt/)
|
(5) Binary loaders (binfmt/)
|
||||||
(17) Network (net/, drivers/net)
|
(17) Network (net/, drivers/net)
|
||||||
(3) USB (drivers/usbdev, drivers/usbhost)
|
(3) USB (drivers/usbdev, drivers/usbhost)
|
||||||
(8) Libraries (lib/)
|
(9) Libraries (lib/)
|
||||||
(10) File system/Generic drivers (fs/, drivers/)
|
(10) File system/Generic drivers (fs/, drivers/)
|
||||||
(5) Graphics subystem (graphics/)
|
(5) Graphics subystem (graphics/)
|
||||||
(1) Pascal add-on (pcode/)
|
(1) Pascal add-on (pcode/)
|
||||||
@@ -29,6 +29,7 @@ nuttx/
|
|||||||
(3) ARM/LPC17xx (arch/arm/src/lpc17xx/)
|
(3) ARM/LPC17xx (arch/arm/src/lpc17xx/)
|
||||||
(7) ARM/LPC214x (arch/arm/src/lpc214x/)
|
(7) ARM/LPC214x (arch/arm/src/lpc214x/)
|
||||||
(2) ARM/LPC313x (arch/arm/src/lpc313x/)
|
(2) ARM/LPC313x (arch/arm/src/lpc313x/)
|
||||||
|
(0) ARM/LPC43x (arch/arm/src/lpc43xx/)
|
||||||
(3) ARM/STR71x (arch/arm/src/str71x/)
|
(3) ARM/STR71x (arch/arm/src/str71x/)
|
||||||
(3) ARM/LM3S6918 (arch/arm/src/lm3s/)
|
(3) ARM/LM3S6918 (arch/arm/src/lm3s/)
|
||||||
(7) ARM/STM32 (arch/arm/src/stm32/)
|
(7) ARM/STM32 (arch/arm/src/stm32/)
|
||||||
@@ -671,6 +672,19 @@ o Libraries (lib/)
|
|||||||
Status: Open
|
Status: Open
|
||||||
Priority: ??
|
Priority: ??
|
||||||
|
|
||||||
|
Title: SYSLOG INTEGRATION
|
||||||
|
Description: There are the beginnings of some system logging capabilities (see
|
||||||
|
drivers/syslog, fs/fs_syslog.c, and lib/stdio/lib_librawprintf.c and
|
||||||
|
lib_liblowprintf.c. For NuttX, SYSLOG is a concept and includes,
|
||||||
|
extends, and replaces the legacy NuttX debug ouput. Some additional
|
||||||
|
integration is required to formalized this. For example:
|
||||||
|
|
||||||
|
o lib_rawprintf() shjould be renamed syslog().
|
||||||
|
o debug.h should be renamed syslog.h
|
||||||
|
o And what about lib_lowprintf()? llsyslog?
|
||||||
|
Status: Open
|
||||||
|
Priority: Low -- more of a roadmap
|
||||||
|
|
||||||
o File system / Generic drivers (fs/, drivers/)
|
o File system / Generic drivers (fs/, drivers/)
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@@ -1197,7 +1211,7 @@ o ARM/LPC214x (arch/arm/src/lpc214x/)
|
|||||||
I am not aware of anyone using LPC2148 now so I think the priority has
|
I am not aware of anyone using LPC2148 now so I think the priority has
|
||||||
to be low.
|
to be low.
|
||||||
|
|
||||||
o ARM/LPC313x (arch/arm/src/lpc313x/)
|
o ARM/LPC31xx (arch/arm/src/lpc31xx/)
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Title: PLATFORM-SPECIFIC LOGIC
|
Title: PLATFORM-SPECIFIC LOGIC
|
||||||
@@ -1221,6 +1235,9 @@ o ARM/LPC313x (arch/arm/src/lpc313x/)
|
|||||||
Status: Open
|
Status: Open
|
||||||
Priority: High if you need to use SPI.
|
Priority: High if you need to use SPI.
|
||||||
|
|
||||||
|
o ARM/LPC43x (arch/arm/src/lpc43xx/)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
o ARM/STR71x (arch/arm/src/str71x/)
|
o ARM/STR71x (arch/arm/src/str71x/)
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@@ -1338,7 +1355,7 @@ o ARM/STM32 (arch/arm/src/stm32/)
|
|||||||
Status: Open
|
Status: Open
|
||||||
Priority: Low (I am not even sure if this is a problem yet).
|
Priority: Low (I am not even sure if this is a problem yet).
|
||||||
|
|
||||||
Status: Unfinished STM32 F4 OTG FS Host Driver
|
Status: UNFINISHED STM32 F4 OTG FS HOST DRIVER
|
||||||
Description: A quick-n-dirty leverage of the the LPC17xx host driver was put into
|
Description: A quick-n-dirty leverage of the the LPC17xx host driver was put into
|
||||||
the STM32 source to support development of the STM32 F4 OTG FS host
|
the STM32 source to support development of the STM32 F4 OTG FS host
|
||||||
driver. It is non-functional and still waiting for STM32 F4 logic
|
driver. It is non-functional and still waiting for STM32 F4 logic
|
||||||
@@ -1843,27 +1860,6 @@ o NuttShell (NSH) (apps/nshlib)
|
|||||||
Status: Open
|
Status: Open
|
||||||
Priority: Low (enhancement)
|
Priority: Low (enhancement)
|
||||||
|
|
||||||
Title: MOUNT w/NO PARAMETERS
|
|
||||||
Description: Feature request: "A 'mount' without arguments should probably list
|
|
||||||
mounted filesystems as in Linux.
|
|
||||||
|
|
||||||
nsh> mount
|
|
||||||
nsh_romfsimg on /etc type romfs (ro)
|
|
||||||
/dev/mtdblock0 on /home type vfat (rw)
|
|
||||||
Status: Open
|
|
||||||
Priority: Low (enhancement)
|
|
||||||
|
|
||||||
Title: DF COMMAND
|
|
||||||
Description: Feature request: "It would be convenient to list the free space
|
|
||||||
on a filesystem with something like 'df'.
|
|
||||||
|
|
||||||
nsh> df
|
|
||||||
Filesystem 1K-blocks Used Available Use% Mounted on
|
|
||||||
nsh_romfsimg 8 8 0 100% /etc
|
|
||||||
/dev/mtdblock0 3584 16 3568 1% /home
|
|
||||||
Status: Open
|
|
||||||
Priority: Low (enhancement)
|
|
||||||
|
|
||||||
o System libraries apps/system (apps/system)
|
o System libraries apps/system (apps/system)
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@@ -1871,7 +1867,8 @@ o System libraries apps/system (apps/system)
|
|||||||
Description: readline implementation does not use C-buffered I/O, but rather
|
Description: readline implementation does not use C-buffered I/O, but rather
|
||||||
talks to serial driver directly via read(). It includes VT-100
|
talks to serial driver directly via read(). It includes VT-100
|
||||||
specific editting commands. A more generic readline() should be
|
specific editting commands. A more generic readline() should be
|
||||||
implemented.
|
implemented using termios' tcsetattr() to put the serial driver
|
||||||
|
into a "raw" mode.
|
||||||
Status: Open
|
Status: Open
|
||||||
Priority: Low (unless you are using mixed C-buffered I/O with readline and
|
Priority: Low (unless you are using mixed C-buffered I/O with readline and
|
||||||
fgetc, for example).
|
fgetc, for example).
|
||||||
@@ -1894,7 +1891,7 @@ o Other Applications & Tests (apps/examples/)
|
|||||||
|
|
||||||
Title: EXAMPLES/SENDMAIL UNTESTED
|
Title: EXAMPLES/SENDMAIL UNTESTED
|
||||||
Description: examples/sendmail is untested on the target (it has been tested
|
Description: examples/sendmail is untested on the target (it has been tested
|
||||||
on the host, but not on the target.
|
on the host, but not on the target).
|
||||||
Status: Open
|
Status: Open
|
||||||
Priority: Med
|
Priority: Med
|
||||||
|
|
||||||
|
|||||||
@@ -1705,7 +1705,11 @@ static int fat_statfs(struct inode *mountpt, struct statfs *buf)
|
|||||||
{
|
{
|
||||||
buf->f_blocks = fs->fs_nclusters; /* Total data blocks in the file system */
|
buf->f_blocks = fs->fs_nclusters; /* Total data blocks in the file system */
|
||||||
buf->f_bavail = buf->f_bfree; /* Free blocks avail to non-superuser */
|
buf->f_bavail = buf->f_bfree; /* Free blocks avail to non-superuser */
|
||||||
|
#ifdef CONFIG_FAT_LFN
|
||||||
|
buf->f_namelen = LDIR_MAXFNAME; /* Maximum length of filenames */
|
||||||
|
#else
|
||||||
buf->f_namelen = (8+1+3); /* Maximum length of filenames */
|
buf->f_namelen = (8+1+3); /* Maximum length of filenames */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
|
|||||||
@@ -197,9 +197,9 @@ static int getllusize(uint8_t fmt, FAR uint8_t flags, FAR unsigned long long ll
|
|||||||
|
|
||||||
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
||||||
static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
||||||
uint8_t flags, int fieldwidth, int numwidth);
|
uint8_t flags, int fieldwidth, int valwidth);
|
||||||
static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
||||||
uint8_t flags, int fieldwidth, int numwidth);
|
uint8_t flags, int fieldwidth, int valwidth);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@@ -1062,7 +1062,7 @@ static int getllusize(uint8_t fmt, uint8_t flags, unsigned long long lln)
|
|||||||
|
|
||||||
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
||||||
static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
||||||
uint8_t flags, int fieldwidth, int numwidth)
|
uint8_t flags, int fieldwidth, int valwidth)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -1072,10 +1072,10 @@ static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
|||||||
case FMT_RJUST:
|
case FMT_RJUST:
|
||||||
if (IS_SIGNED(flags))
|
if (IS_SIGNED(flags))
|
||||||
{
|
{
|
||||||
numwidth++;
|
valwidth++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = fieldwidth - numwidth; i > 0; i--)
|
for (i = fieldwidth - valwidth; i > 0; i--)
|
||||||
{
|
{
|
||||||
obj->put(obj, ' ');
|
obj->put(obj, ' ');
|
||||||
}
|
}
|
||||||
@@ -1094,15 +1094,15 @@ static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
|||||||
if (IS_NEGATE(flags))
|
if (IS_NEGATE(flags))
|
||||||
{
|
{
|
||||||
obj->put(obj, '-');
|
obj->put(obj, '-');
|
||||||
numwidth++;
|
valwidth++;
|
||||||
}
|
}
|
||||||
else if (IS_SHOWPLUS(flags))
|
else if (IS_SHOWPLUS(flags))
|
||||||
{
|
{
|
||||||
obj->put(obj, '+');
|
obj->put(obj, '+');
|
||||||
numwidth++;
|
valwidth++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = fieldwidth - numwidth; i > 0; i--)
|
for (i = fieldwidth - valwidth; i > 0; i--)
|
||||||
{
|
{
|
||||||
obj->put(obj, '0');
|
obj->put(obj, '0');
|
||||||
}
|
}
|
||||||
@@ -1128,7 +1128,7 @@ static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
|||||||
|
|
||||||
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
||||||
static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
||||||
uint8_t flags, int fieldwidth, int numwidth)
|
uint8_t flags, int fieldwidth, int valwidth)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -1144,10 +1144,10 @@ static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt,
|
|||||||
case FMT_LJUST:
|
case FMT_LJUST:
|
||||||
if (IS_SIGNED(flags))
|
if (IS_SIGNED(flags))
|
||||||
{
|
{
|
||||||
numwidth++;
|
valwidth++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = fieldwidth - numwidth; i > 0; i--)
|
for (i = fieldwidth - valwidth; i > 0; i--)
|
||||||
{
|
{
|
||||||
obj->put(obj, ' ');
|
obj->put(obj, ' ');
|
||||||
}
|
}
|
||||||
@@ -1350,7 +1350,10 @@ int lib_vsprintf(FAR struct lib_outstream_s *obj, FAR const char *src, va_list a
|
|||||||
|
|
||||||
if (FMT_CHAR == 's')
|
if (FMT_CHAR == 's')
|
||||||
{
|
{
|
||||||
/* Just concatenate the string into the output */
|
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
||||||
|
int swidth;
|
||||||
|
#endif
|
||||||
|
/* Get the string to output */
|
||||||
|
|
||||||
ptmp = va_arg(ap, char *);
|
ptmp = va_arg(ap, char *);
|
||||||
if (!ptmp)
|
if (!ptmp)
|
||||||
@@ -1358,11 +1361,27 @@ int lib_vsprintf(FAR struct lib_outstream_s *obj, FAR const char *src, va_list a
|
|||||||
ptmp = (char*)g_nullstring;
|
ptmp = (char*)g_nullstring;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(*ptmp)
|
/* Get the widith of the string and perform right-justification
|
||||||
|
* operations.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
||||||
|
swidth = strlen(ptmp);
|
||||||
|
prejustify(obj, fmt, 0, width, swidth);
|
||||||
|
#endif
|
||||||
|
/* Concatenate the string into the output */
|
||||||
|
|
||||||
|
while (*ptmp)
|
||||||
{
|
{
|
||||||
obj->put(obj, *ptmp);
|
obj->put(obj, *ptmp);
|
||||||
ptmp++;
|
ptmp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Perform left-justification operations. */
|
||||||
|
|
||||||
|
#ifndef CONFIG_NOPRINTF_FIELDWIDTH
|
||||||
|
postjustify(obj, fmt, 0, width, swidth);
|
||||||
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* sched/clock_dow.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <nuttx/clock.h>
|
||||||
|
|
||||||
|
#include "clock_internal.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* 23 * (month + 1) / 9, month = 0..11 */
|
||||||
|
|
||||||
|
static const uint8_t g_lookup[12] = {2, 5, 7, 10, 12, 15, 17, 20, 23, 25, 28, 30};
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: clock_dow
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Calculate the day of week (DOW) from they year month and day. Based on
|
||||||
|
* an algorithm pubished in 1990 by Michael Keith and Tom Craver with some
|
||||||
|
* tweaks to handle months in the range 0-11.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* year - year (e.g., 1988)
|
||||||
|
* month - 0 through 11
|
||||||
|
* day - 1 through 31
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* The day of the week as days since Sunday: 0 = Sunday, 1 = Monday, etc.
|
||||||
|
*
|
||||||
|
* Assumptions:
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int clock_dow(int year, int month, int day)
|
||||||
|
{
|
||||||
|
day += month < 2 ? year-- : year - 2;
|
||||||
|
return ((int)g_lookup[month] + day + 4 + year/4 - year/100 + year/400) % 7;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user