-int handle_rm_command(struct command_context_s *cmd_ctx, char *cmd,
- char **args, int argc)
-{
- if (argc != 1)
- {
- command_print(cmd_ctx, "rm <filename>");
- return ERROR_INVALID_ARGUMENTS;
- }
-
- if (unlink(args[0]) != 0)
- {
- command_print(cmd_ctx, "failed: %d", errno);
- }
-
- return ERROR_OK;
-}
-
-int loadFile(const char *fileName, void **data, int *len);
-
-int handle_cat_command(struct command_context_s *cmd_ctx, char *cmd,
- char **args, int argc)
-{
- if (argc != 1)
- {
- command_print(cmd_ctx, "cat <filename>");
- return ERROR_INVALID_ARGUMENTS;
- }
-
- // NOTE!!! we only have line printing capability so we print the entire file as a single line.
- void *data;
- int len;
-
- int retval = loadFile(args[0], &data, &len);
- if (retval == ERROR_OK)
- {
- command_print(cmd_ctx, "%s", data);
- free(data);
- }
- else
- {
- command_print(cmd_ctx, "%s not found %d", args[0], retval);
- }
-
- return ERROR_OK;
-}
-int handle_trunc_command(struct command_context_s *cmd_ctx, char *cmd,
- char **args, int argc)
-{
- if (argc != 1)
- {
- command_print(cmd_ctx, "trunc <filename>");
- return ERROR_INVALID_ARGUMENTS;
- }
-
- FILE *config_file = NULL;
- config_file = fopen(args[0], "w");
- if (config_file != NULL)
- fclose(config_file);
-
- return ERROR_OK;
-}
-
-
-int handle_meminfo_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
- static int prev = 0;
- struct mallinfo info;
-
- if (argc != 0)
- {
- command_print(cmd_ctx, "meminfo");
- return ERROR_INVALID_ARGUMENTS;
- }
-
- info = mallinfo();
-
- if (prev > 0)
- {
- command_print(cmd_ctx, "Diff: %d", prev - info.fordblks);
- }
- prev = info.fordblks;
-
- command_print(cmd_ctx, "Available ram: %d", info.fordblks );
-
- return ERROR_OK;
-}
-
-static bool savePower;
-
-static void setPower(bool power)
-{
- savePower = power;
- if (power)
- {
- HAL_WRITE_UINT32(0x08000014, 0x8);
- } else
- {
- HAL_WRITE_UINT32(0x08000010, 0x8);
- }
-}
-
-int handle_power_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
- if (argc > 1)
- {
- return ERROR_INVALID_ARGUMENTS;
- }
-
- if (argc == 1)
- {
- if (strcmp(args[0], "on") == 0)
- {
- setPower(1);
- }
- else if (strcmp(args[0], "off") == 0)
- {
- setPower(0);
- } else
- {
- command_print(cmd_ctx, "arg is \"on\" or \"off\"");
- return ERROR_INVALID_ARGUMENTS;
- }
- }
-
- command_print(cmd_ctx, "Target power %s", savePower ? "on" : "off");
-
- return ERROR_OK;
-}
-
-int handle_append_command(struct command_context_s *cmd_ctx, char *cmd,
- char **args, int argc)
-{
- if (argc < 1)
- {
- command_print(cmd_ctx,
- "append <filename> [<string1>, [<string2>, ...]]");
- return ERROR_INVALID_ARGUMENTS;
- }
-
- FILE *config_file = NULL;
- config_file = fopen(args[0], "a");
- if (config_file != NULL)
- {
- int i;
- fseek(config_file, 0, SEEK_END);
-
- for (i = 1; i < argc; i++)
- {
- fwrite(args[i], strlen(args[i]), 1, config_file);
- if (i != argc - 1)
- {
- fwrite(" ", 1, 1, config_file);
- }
- }
- fwrite("\n", 1, 1, config_file);
- fclose(config_file);
- }
-
- return ERROR_OK;
-}
-
-extern int telnet_socket;
-
-int readMore(int fd, void *data, int length)
-{
- /* used in select() */
- fd_set read_fds;
-
- /* monitor sockets for acitvity */
- int fd_max = 1;
- FD_ZERO(&read_fds);
- /* listen for new connections */
- FD_SET(fd, &read_fds);
-
- // Maximum 5 seconds.
- struct timeval tv;
- tv.tv_sec = 5;
- tv.tv_usec = 0;
-
- int retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv);
- if (retval == 0)
- {
- diag_printf("Timed out waiting for binary payload\n");
- return -1;
- }
- if (retval != 1)
- return -1;
-
- return read_socket(fd, data, length);
-}
-
-int readAll(int fd, void *data, int length)
-{
- int pos = 0;
- for (;;)
- {
- int actual = readMore(fd, ((char *) data) + pos, length - pos);
- // diag_printf("Read %d bytes(pos=%d, length=%d)\n", actual, pos, length);
- if (actual <= 0)
- return -1;
- pos += actual;
- if (pos == length)
- break;
- }
- return length;
-}
-
-int handle_peek_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
- cyg_uint32 value;
- if (argc != 1)
- {
- return ERROR_INVALID_ARGUMENTS;
- }
- HAL_READ_UINT32(strtoul(args[0], NULL, 0), value);
- command_print(cmd_ctx, "0x%x : 0x%x", strtoul(args[0], NULL, 0), value);
- return ERROR_OK;
-}
-
-int handle_poke_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
- if (argc != 2)
- {
- return ERROR_INVALID_ARGUMENTS;
- }
- HAL_WRITE_UINT32(strtoul(args[0], NULL, 0), strtoul(args[1], NULL, 0));
- return ERROR_OK;
-}
-
-int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
- if (argc != 2)
- {
- return ERROR_INVALID_ARGUMENTS;
- }
-
- // NOTE!!! we only have line printing capability so we print the entire file as a single line.
- void *data;
- int len;
-
- int retval = loadFile(args[0], &data, &len);
- if (retval != ERROR_OK)
- return retval;
-
- FILE *f = fopen(args[1], "wb");
- if (f == NULL)
- retval = ERROR_INVALID_ARGUMENTS;
-
- int pos = 0;
- for (;;)
- {
- int chunk = len - pos;
- static const int maxChunk = 512 * 1024; // ~1/sec
- if (chunk > maxChunk)
- {
- chunk = maxChunk;
- }
-
- if ((retval==ERROR_OK)&&(fwrite(((char *)data)+pos, 1, chunk, f)!=chunk))
- retval = ERROR_INVALID_ARGUMENTS;
-
- if (retval != ERROR_OK)
- {
- break;
- }
-
- command_print(cmd_ctx, "%d", len - pos);
-
- pos += chunk;
-
- if (pos == len)
- break;
- }
-
- if (retval == ERROR_OK)
- {
- command_print(cmd_ctx, "Copied %s to %s", args[0], args[1]);
- } else
- {
- command_print(cmd_ctx, "Failed: %d", retval);
- }
-
- if (data != NULL)
- free(data);
- if (f != NULL)
- fclose(f);
-
- if (retval != ERROR_OK)
- unlink(args[1]);
-
- return retval;
-}
-