orbital/tools/dumper/source/debug.c
2018-03-28 06:06:46 +02:00

91 lines
2 KiB
C

/**
* (c) 2017-2018 Alexandro Sanchez Bach.
* Released under MIT license. Read LICENSE for more details.
*/
#include "debug.h"
/* debugging */
#define DEBUG 1
#define DEBUG_ADDR IP(192,168,2,1);
#define DEBUG_PORT 9022
#define ku_dprintf(...) do { \
if (kernel) kdprintf(__VA_ARGS__); else dprintf(__VA_ARGS__); \
} while(0)
int debug_sockfd;
char debug_tmp[512];
void debug_init()
{
if (!DEBUG) return;
struct sockaddr_in server;
memset(&server, 0, sizeof(server));
server.sin_len = sizeof(server);
server.sin_family = AF_INET;
server.sin_addr.s_addr = DEBUG_ADDR;
server.sin_port = sceNetHtons(DEBUG_PORT);
debug_sockfd = sceNetSocket("debug", AF_INET, SOCK_STREAM, 0);
sceNetConnect(debug_sockfd, (struct sockaddr *)&server, sizeof(server));
}
void debug_close()
{
if (!DEBUG) return;
sceNetSocketClose(debug_sockfd);
}
void _dputs(const char *msg)
{
sceNetSend(debug_sockfd, msg, strlen(msg), 0);
}
void _kdputs(const char *msg)
{
uint64_t len = strlen(msg);
memcpy(debug_tmp, msg, len);
write_args uap;
uap.fd = debug_sockfd;
uap.buf = debug_tmp;
uap.nbyte = len;
sys_write(curthread(), &uap);
}
void _hexdump(char *desc, void *addr, int len, int kernel) {
int i;
unsigned char buff[17];
unsigned char *pc = (unsigned char*)addr;
if (desc != NULL)
ku_dprintf ("%s:\n", desc);
if (len == 0) {
ku_dprintf(" ZERO LENGTH\n");
return;
}
if (len < 0) {
ku_dprintf(" NEGATIVE LENGTH: %i\n",len);
return;
}
for (i = 0; i < len; i++) {
if ((i % 16) == 0) {
if (i != 0)
ku_dprintf (" %s\n", buff);
ku_dprintf (" %04x ", i);
}
ku_dprintf (" %02x", pc[i]);
if ((pc[i] < 0x20) || (pc[i] > 0x7e))
buff[i % 16] = '.';
else
buff[i % 16] = pc[i];
buff[(i % 16) + 1] = '\0';
}
while ((i % 16) != 0) {
ku_dprintf (" ");
i++;
}
ku_dprintf (" %s\n", buff);
}