Add safety memory dump to file functionality
This commit is contained in:
		@@ -567,8 +567,6 @@ static char *get_safety_mem_dump(size_t *used_bytes)
 | 
				
			|||||||
static shellmatta_retCode_t shell_cmd_dump_safety_mem(const shellmatta_handle_t handle, const char *arguments,
 | 
					static shellmatta_retCode_t shell_cmd_dump_safety_mem(const shellmatta_handle_t handle, const char *arguments,
 | 
				
			||||||
						      uint32_t length)
 | 
											      uint32_t length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	(void)arguments;
 | 
					 | 
				
			||||||
	(void)length;
 | 
					 | 
				
			||||||
	static char *buffer;
 | 
						static char *buffer;
 | 
				
			||||||
	static const char *ptr;
 | 
						static const char *ptr;
 | 
				
			||||||
	size_t used_bytes;
 | 
						size_t used_bytes;
 | 
				
			||||||
@@ -576,6 +574,45 @@ static shellmatta_retCode_t shell_cmd_dump_safety_mem(const shellmatta_handle_t
 | 
				
			|||||||
	static size_t current_line;
 | 
						static size_t current_line;
 | 
				
			||||||
	size_t remainder;
 | 
						size_t remainder;
 | 
				
			||||||
	static const char *hline = "----------------------------------------------------------------";
 | 
						static const char *hline = "----------------------------------------------------------------";
 | 
				
			||||||
 | 
						char string[200];
 | 
				
			||||||
 | 
						const char *token;
 | 
				
			||||||
 | 
						const char * const token_delim = "\t ";
 | 
				
			||||||
 | 
						FRESULT fres;
 | 
				
			||||||
 | 
						FIL file;
 | 
				
			||||||
 | 
						UINT bw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Check if the dump shall be stored to disk */
 | 
				
			||||||
 | 
						strncpy(string, arguments, MIN(sizeof(string), length+1));
 | 
				
			||||||
 | 
						string[sizeof(string) - 1] = '\0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						token = strtok(string, token_delim);
 | 
				
			||||||
 | 
						token = strtok(NULL, token_delim);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (token) {
 | 
				
			||||||
 | 
							buffer = get_safety_mem_dump(&used_bytes);
 | 
				
			||||||
 | 
							if (!buffer) {
 | 
				
			||||||
 | 
								shellmatta_printf(handle, "Error generating dump");
 | 
				
			||||||
 | 
								return SHELLMATTA_OK;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fres = f_open(&file, token, FA_CREATE_NEW | FA_WRITE);
 | 
				
			||||||
 | 
							if (fres == FR_EXIST) {
 | 
				
			||||||
 | 
								free(buffer);
 | 
				
			||||||
 | 
								shellmatta_printf(handle, "File already esists!\r\n");
 | 
				
			||||||
 | 
								return SHELLMATTA_OK;
 | 
				
			||||||
 | 
							} else if (fres != FR_OK) {
 | 
				
			||||||
 | 
								free(buffer);
 | 
				
			||||||
 | 
								shellmatta_printf(handle, "Error opening file %s\r\n", token);
 | 
				
			||||||
 | 
								return SHELLMATTA_OK;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							fres = f_write(&file, buffer, used_bytes - 1, &bw);
 | 
				
			||||||
 | 
							if (fres != FR_OK) {
 | 
				
			||||||
 | 
								shellmatta_printf(handle, "Error writing to file %s\r\n", token);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							free(buffer);
 | 
				
			||||||
 | 
							f_close(&file);
 | 
				
			||||||
 | 
							return SHELLMATTA_OK;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (full_lines == 0) {
 | 
						if (full_lines == 0) {
 | 
				
			||||||
		shellmatta_printf(handle, "Safety memory content\r\n%s\r\n", hline);
 | 
							shellmatta_printf(handle, "Safety memory content\r\n%s\r\n", hline);
 | 
				
			||||||
@@ -761,7 +798,7 @@ static shellmatta_cmd_t cmd[18] = {
 | 
				
			|||||||
		.cmd = "safety-mem-dump",
 | 
							.cmd = "safety-mem-dump",
 | 
				
			||||||
		.cmdAlias = NULL,
 | 
							.cmdAlias = NULL,
 | 
				
			||||||
		.helpText = "",
 | 
							.helpText = "",
 | 
				
			||||||
		.usageText = "",
 | 
							.usageText = "safety-mem-dump [output-file]",
 | 
				
			||||||
		.cmdFct = shell_cmd_dump_safety_mem,
 | 
							.cmdFct = shell_cmd_dump_safety_mem,
 | 
				
			||||||
		.next = NULL,
 | 
							.next = NULL,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user