modem: add termination function to stop pico thread
use new logging log: set max verbosity to warning for release builds
This commit is contained in:
parent
a31f573c69
commit
c60e2d29e8
|
@ -790,6 +790,9 @@ void sb_Init()
|
|||
|
||||
void sb_Reset(bool Manual)
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM)
|
||||
ModemTerm();
|
||||
#endif
|
||||
asic_reg_Reset(Manual);
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
gdrom_reg_Reset(Manual);
|
||||
|
@ -803,6 +806,9 @@ void sb_Reset(bool Manual)
|
|||
|
||||
void sb_Term()
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM)
|
||||
ModemTerm();
|
||||
#endif
|
||||
aica_sb_Term();
|
||||
maple_Term();
|
||||
pvr_sb_Term();
|
||||
|
|
|
@ -1188,7 +1188,7 @@ struct maple_keyboard : maple_base
|
|||
return MDRS_DataTransfer;
|
||||
|
||||
default:
|
||||
DEBUG_LOG(MAPLE, "Keyboard: unknown MAPLE COMMAND %d", cmd);
|
||||
INFO_LOG(MAPLE, "Keyboard: unknown MAPLE COMMAND %d", cmd);
|
||||
return MDRE_UnknownCmd;
|
||||
}
|
||||
}
|
||||
|
@ -1295,7 +1295,7 @@ struct maple_mouse : maple_base
|
|||
return MDRS_DataTransfer;
|
||||
|
||||
default:
|
||||
DEBUG_LOG(MAPLE, "Mouse: unknown MAPLE COMMAND %d", cmd);
|
||||
INFO_LOG(MAPLE, "Mouse: unknown MAPLE COMMAND %d", cmd);
|
||||
return MDRE_UnknownCmd;
|
||||
}
|
||||
}
|
||||
|
@ -1375,7 +1375,7 @@ struct maple_lightgun : maple_base
|
|||
return MDRS_DataTransfer;
|
||||
|
||||
default:
|
||||
DEBUG_LOG(MAPLE, "Light gun: unknown MAPLE COMMAND %d", cmd);
|
||||
INFO_LOG(MAPLE, "Light gun: unknown MAPLE COMMAND %d", cmd);
|
||||
return MDRE_UnknownCmd;
|
||||
}
|
||||
}
|
||||
|
@ -2569,7 +2569,7 @@ u32 jvs_io_board::handle_jvs_message(u8 *buffer_in, u32 length_in, u8 *buffer_ou
|
|||
break;
|
||||
|
||||
default:
|
||||
INFO_LOG(MAPLE, "JVS: Unknown input type %x", buffer_in[cmdi]);
|
||||
DEBUG_LOG(MAPLE, "JVS: Unknown input type %x", buffer_in[cmdi]);
|
||||
JVS_OUT(2); // report byte: command error
|
||||
cmdi = length_in; // Ignore subsequent commands
|
||||
break;
|
||||
|
|
|
@ -99,7 +99,7 @@ static void* vmem32_map_buffer(u32 dst, u32 addrsz, u32 offset, u32 size, bool w
|
|||
rv = mmap(&virt_ram_base[dst], size, prot, MAP_SHARED | MAP_NOSYNC | MAP_FIXED, vmem_fd, offset);
|
||||
if (MAP_FAILED == rv)
|
||||
{
|
||||
printf("MAP1 failed %d\n", errno);
|
||||
ERROR_LOG(VMEM, "MAP1 failed %d", errno);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ static void* vmem32_map_buffer(u32 dst, u32 addrsz, u32 offset, u32 size, bool w
|
|||
ptr = mmap(&virt_ram_base[dst], size, prot , MAP_SHARED | MAP_NOSYNC | MAP_FIXED, vmem_fd, offset);
|
||||
if (MAP_FAILED == ptr)
|
||||
{
|
||||
printf("MAP2 failed %d\n", errno);
|
||||
ERROR_LOG(VMEM, "MAP2 failed %d", errno);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -346,7 +346,7 @@ bool vmem32_handle_signal(void *fault_addr, bool write, u32 exception_pc)
|
|||
//vmem32_page_faults++;
|
||||
u32 guest_addr = (u8*)fault_addr - virt_ram_base;
|
||||
u32 rv = vmem32_map_address(guest_addr, write);
|
||||
//printf("vmem32_handle_signal handled signal %s @ %p -> %08x rv=%d\n", write ? "W" : "R", fault_addr, guest_addr, rv);
|
||||
DEBUG_LOG(VMEM, "vmem32_handle_signal handled signal %s @ %p -> %08x rv=%d", write ? "W" : "R", fault_addr, guest_addr, rv);
|
||||
if (rv == MMU_ERROR_NONE)
|
||||
return true;
|
||||
if (rv == VMEM32_ERROR_NOT_MAPPED)
|
||||
|
|
|
@ -43,11 +43,7 @@
|
|||
|
||||
#define MODEM_DEVICE_TYPE_336K 0
|
||||
|
||||
#ifdef RELEASE
|
||||
#define LOG(...)
|
||||
#else
|
||||
#define LOG(...) do { printf("[%d.%03d] MODEM ", (int)os_GetSeconds(), (int)(os_GetSeconds() * 1000) % 1000); printf(__VA_ARGS__); putchar('\n'); } while (false);
|
||||
#endif
|
||||
#define LOG(...) DEBUG_LOG(MODEM, __VA_ARGS__)
|
||||
|
||||
const static u32 MODEM_ID[2] =
|
||||
{
|
||||
|
@ -142,7 +138,7 @@ static int modem_sched_func(int tag, int c, int j)
|
|||
{
|
||||
if (last_comm_stats != 0)
|
||||
{
|
||||
printf("Stats sent %d (%.2f kB/s) received %d (%.2f kB/s) TDBE %d RDBF %d\n", sent_bytes, sent_bytes / 2000.0,
|
||||
DEBUG_LOG(MODEM, "Stats sent %d (%.2f kB/s) received %d (%.2f kB/s) TDBE %d RDBF %d\n", sent_bytes, sent_bytes / 2000.0,
|
||||
recvd_bytes, recvd_bytes / 2000.0,
|
||||
modem_regs.reg1e.TDBE, modem_regs.reg1e.RDBF);
|
||||
sent_bytes = 0;
|
||||
|
@ -211,7 +207,7 @@ static int modem_sched_func(int tag, int c, int j)
|
|||
break;
|
||||
|
||||
case PRE_CONNECTED:
|
||||
printf("MODEM Connected\n");
|
||||
INFO_LOG(MODEM, "MODEM Connected");
|
||||
if (modem_regs.reg03.RLSDE)
|
||||
SET_STATUS_BIT(0x0f, modem_regs.reg0f.RLSD, 1);
|
||||
if (modem_regs.reg12 == 0xAA)
|
||||
|
@ -319,6 +315,11 @@ void ModemInit()
|
|||
modem_sched = sh4_sched_register(0, &modem_sched_func);
|
||||
}
|
||||
|
||||
void ModemTerm()
|
||||
{
|
||||
stop_pppd();
|
||||
}
|
||||
|
||||
static void schedule_callback(int ms)
|
||||
{
|
||||
sh4_sched_request(modem_sched, SH4_MAIN_CLOCK / 1000 * ms);
|
||||
|
@ -428,7 +429,7 @@ static void modem_reset(u32 v)
|
|||
state=MS_RESETING;
|
||||
modem_regs.ptr[0x20]=1;
|
||||
ControllerTestStart();
|
||||
printf("MODEM Reset\n");
|
||||
INFO_LOG(MODEM, "MODEM Reset");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -495,7 +496,7 @@ static void ModemNormalWrite(u32 reg, u32 data)
|
|||
//LOG("ModemNormalWrite : TBUFFER = %X", data);
|
||||
if (connect_state == DISCONNECTED)
|
||||
{
|
||||
printf("MODEM Dialing\n");
|
||||
INFO_LOG(MODEM, "MODEM Dialing");
|
||||
connect_state = DIALING;
|
||||
}
|
||||
schedule_callback(100);
|
||||
|
|
|
@ -25,5 +25,6 @@
|
|||
#include "types.h"
|
||||
|
||||
void ModemInit();
|
||||
void ModemTerm();
|
||||
u32 ModemReadMem_A0_006(u32 addr,u32 size);
|
||||
void ModemWriteMem_A0_006(u32 addr,u32 data,u32 size);
|
||||
|
|
|
@ -24,13 +24,15 @@ typedef int sock_t;
|
|||
#define L_EAGAIN EAGAIN
|
||||
#define get_last_error() (errno)
|
||||
#define INVALID_SOCKET (-1)
|
||||
#define perror(s) do { INFO_LOG(MODEM, "%s: %s", (s) != NULL ? (s) : "", strerror(get_last_error())); } while (false)
|
||||
#else
|
||||
typedef SOCKET sock_t;
|
||||
#define VALID(s) ((s) != INVALID_SOCKET)
|
||||
#define L_EWOULDBLOCK WSAEWOULDBLOCK
|
||||
#define L_EAGAIN WSAEWOULDBLOCK
|
||||
#define get_last_error() (WSAGetLastError())
|
||||
#define perror(s) do { if (s) printf("%s: ", s); printf("Winsock error: %d\n", WSAGetLastError()); } while (false)
|
||||
#define perror(s) do { INFO_LOG(MODEM, "%s: Winsock error: %d\n", (s) != NULL ? (s) : "", WSAGetLastError()); } while (false)
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -213,7 +213,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s)
|
|||
if (it == tcp_sockets.end())
|
||||
{
|
||||
if (tcp_connecting_sockets.find(s) == tcp_connecting_sockets.end())
|
||||
printf("Unknown socket: remote port %d\n", short_be(s->remote_port));
|
||||
INFO_LOG(MODEM, "Unknown socket: remote port %d", short_be(s->remote_port));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -234,7 +234,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s)
|
|||
{
|
||||
// Also called for child sockets
|
||||
if (tcp_sockets.find(s) == tcp_sockets.end())
|
||||
printf("pico_socket_accept: %s\n", strerror(pico_err));
|
||||
INFO_LOG(MODEM, "pico_socket_accept: %s\n", strerror(pico_err));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -270,8 +270,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s)
|
|||
if (get_last_error() != EINPROGRESS && get_last_error() != L_EWOULDBLOCK)
|
||||
{
|
||||
pico_ipv4_to_string(peer, sock_a->local_addr.ip4.addr);
|
||||
printf("TCP connection to %s:%d failed: ", peer, short_be(sock_a->local_port));
|
||||
perror(NULL);
|
||||
INFO_LOG(MODEM, "TCP connection to %s:%d failed: %s", peer, short_be(sock_a->local_port), strerror(get_last_error()));
|
||||
closesocket(sockfd);
|
||||
}
|
||||
else
|
||||
|
@ -291,7 +290,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s)
|
|||
auto it = tcp_sockets.find(s);
|
||||
if (it == tcp_sockets.end())
|
||||
{
|
||||
printf("PICO_SOCK_EV_FIN: Unknown socket: remote port %d\n", short_be(s->remote_port));
|
||||
INFO_LOG(MODEM, "PICO_SOCK_EV_FIN: Unknown socket: remote port %d", short_be(s->remote_port));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -301,11 +300,11 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s)
|
|||
}
|
||||
|
||||
if (ev & PICO_SOCK_EV_ERR) {
|
||||
printf("Socket error received: %s\n", strerror(pico_err));
|
||||
INFO_LOG(MODEM, "Socket error received: %s", strerror(pico_err));
|
||||
auto it = tcp_sockets.find(s);
|
||||
if (it == tcp_sockets.end())
|
||||
{
|
||||
printf("PICO_SOCK_EV_ERR: Unknown socket: remote port %d\n", short_be(s->remote_port));
|
||||
INFO_LOG(MODEM, "PICO_SOCK_EV_ERR: Unknown socket: remote port %d", short_be(s->remote_port));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -319,7 +318,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s)
|
|||
auto it = tcp_sockets.find(s);
|
||||
if (it == tcp_sockets.end())
|
||||
{
|
||||
printf("PICO_SOCK_EV_CLOSE: Unknown socket: remote port %d\n", short_be(s->remote_port));
|
||||
INFO_LOG(MODEM, "PICO_SOCK_EV_CLOSE: Unknown socket: remote port %d", short_be(s->remote_port));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -374,7 +373,7 @@ static void udp_callback(uint16_t ev, struct pico_socket *s)
|
|||
if (r <= 0)
|
||||
{
|
||||
if (r < 0)
|
||||
printf("%s: error UDP recv: %s\n", __FUNCTION__, strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error UDP recv: %s", strerror(pico_err));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -394,7 +393,7 @@ static void udp_callback(uint16_t ev, struct pico_socket *s)
|
|||
}
|
||||
|
||||
if (ev & PICO_SOCK_EV_ERR) {
|
||||
printf("UDP Callback error received\n");
|
||||
INFO_LOG(MODEM, "UDP Callback error received");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -420,7 +419,7 @@ static void read_native_sockets()
|
|||
struct pico_socket *ps = pico_socket_open(PICO_PROTO_IPV4, PICO_PROTO_TCP, &tcp_callback);
|
||||
if (ps == NULL)
|
||||
{
|
||||
printf("pico_socket_open failed: error %d\n", pico_err);
|
||||
INFO_LOG(MODEM, "pico_socket_open failed: error %d", pico_err);
|
||||
closesocket(sockfd);
|
||||
continue;
|
||||
}
|
||||
|
@ -428,7 +427,7 @@ static void read_native_sockets()
|
|||
ps->local_port = src_addr.sin_port;
|
||||
if (pico_socket_connect(ps, &dcaddr.addr, it->first) != 0)
|
||||
{
|
||||
printf("pico_socket_connect failed: error %d\n", pico_err);
|
||||
INFO_LOG(MODEM, "pico_socket_connect failed: error %d", pico_err);
|
||||
closesocket(sockfd);
|
||||
pico_socket_close(ps);
|
||||
continue;
|
||||
|
@ -469,8 +468,7 @@ static void read_native_sockets()
|
|||
{
|
||||
char peer[30];
|
||||
pico_ipv4_to_string(peer, it->first->local_addr.ip4.addr);
|
||||
printf("TCP connection to %s:%d failed: ", peer, short_be(it->first->local_port));
|
||||
perror(NULL);
|
||||
INFO_LOG(MODEM, "TCP connection to %s:%d failed: %s", peer, short_be(it->first->local_port), strerror(get_last_error()));
|
||||
pico_socket_close(it->first);
|
||||
closesocket(it->second);
|
||||
}
|
||||
|
@ -511,7 +509,7 @@ static void read_native_sockets()
|
|||
//printf("read_native_sockets UDP received %d bytes from %08x:%d\n", r, long_be(msginfo.local_addr.ip4.addr), short_be(msginfo.local_port));
|
||||
int r2 = pico_socket_sendto_extended(pico_udp_socket, buf, r, &dcaddr, it->first, &msginfo);
|
||||
if (r2 < r)
|
||||
printf("%s: error UDP sending to %d: %s\n", __FUNCTION__, short_be(it->first), strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error UDP sending to %d: %s", short_be(it->first), strerror(pico_err));
|
||||
}
|
||||
else if (r < 0 && get_last_error() != L_EAGAIN && get_last_error() != L_EWOULDBLOCK)
|
||||
{
|
||||
|
@ -543,10 +541,10 @@ static void read_native_sockets()
|
|||
|
||||
int r2 = pico_socket_send(it->first, buf, r);
|
||||
if (r2 < 0)
|
||||
printf("%s: error TCP sending: %s\n", __FUNCTION__, strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error TCP sending: %s", strerror(pico_err));
|
||||
else if (r2 < r)
|
||||
// FIXME EAGAIN errors. Need to buffer data or wait for call back.
|
||||
printf("%s: truncated send: %d -> %d\n", __FUNCTION__, r, r2);
|
||||
INFO_LOG(MODEM, "truncated send: %d -> %d", r, r2);
|
||||
}
|
||||
else if (r == 0)
|
||||
{
|
||||
|
@ -629,7 +627,7 @@ static void check_dns_entries()
|
|||
dns_query_start = 0;
|
||||
char myip[16];
|
||||
pico_ipv4_to_string(myip, public_ip.addr);
|
||||
printf("My IP is %s\n", myip);
|
||||
INFO_LOG(MODEM, "My IP is %s", myip);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -662,7 +660,7 @@ static void check_dns_entries()
|
|||
dns_query_start = 0;
|
||||
char afoip[16];
|
||||
pico_ipv4_to_string(afoip, afo_ip.addr);
|
||||
printf("AFO server IP is %s\n", afoip);
|
||||
INFO_LOG(MODEM, "AFO server IP is %s", afoip);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -698,7 +696,7 @@ static void *pico_thread_func(void *)
|
|||
#if _WIN32
|
||||
static WSADATA wsaData;
|
||||
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
|
||||
printf("WSAStartup failed\n");
|
||||
WARN_LOG(MODEM, "WSAStartup failed");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -717,28 +715,28 @@ static void *pico_thread_func(void *)
|
|||
|
||||
pico_udp_socket = pico_socket_open(PICO_PROTO_IPV4, PICO_PROTO_UDP, &udp_callback);
|
||||
if (pico_udp_socket == NULL) {
|
||||
printf("%s: error opening UDP socket: %s\n", __FUNCTION__, strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error opening UDP socket: %s", strerror(pico_err));
|
||||
}
|
||||
int yes = 1;
|
||||
struct pico_ip4 inaddr_any = {0};
|
||||
uint16_t listen_port = 0;
|
||||
int ret = pico_socket_bind(pico_udp_socket, &inaddr_any, &listen_port);
|
||||
if (ret < 0)
|
||||
printf("%s: error binding UDP socket to port %u: %s\n", __FUNCTION__, short_be(listen_port), strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error binding UDP socket to port %u: %s", short_be(listen_port), strerror(pico_err));
|
||||
|
||||
pico_tcp_socket = pico_socket_open(PICO_PROTO_IPV4, PICO_PROTO_TCP, &tcp_callback);
|
||||
if (pico_tcp_socket == NULL) {
|
||||
printf("%s: error opening TCP socket: %s\n", __FUNCTION__, strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error opening TCP socket: %s", strerror(pico_err));
|
||||
}
|
||||
pico_socket_setoption(pico_tcp_socket, PICO_TCP_NODELAY, &yes);
|
||||
ret = pico_socket_bind(pico_tcp_socket, &inaddr_any, &listen_port);
|
||||
if (ret < 0) {
|
||||
printf("%s: error binding TCP socket to port %u: %s\n", __FUNCTION__, short_be(listen_port), strerror(pico_err));
|
||||
INFO_LOG(MODEM, "error binding TCP socket to port %u: %s", short_be(listen_port), strerror(pico_err));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pico_socket_listen(pico_tcp_socket, 10) != 0)
|
||||
printf("%s: error listening on port %u\n", __FUNCTION__, short_be(listen_port));
|
||||
INFO_LOG(MODEM, "error listening on port %u", short_be(listen_port));
|
||||
}
|
||||
ppp->proxied = 1;
|
||||
|
||||
|
|
|
@ -214,8 +214,8 @@ void mem_Term()
|
|||
sh4_mmr_term();
|
||||
sh4_area0_Term();
|
||||
|
||||
//write back Flash/SRAM
|
||||
SaveRomFiles(get_writable_data_path("/data/"));
|
||||
// done by emulator thread
|
||||
//SaveRomFiles(get_writable_data_path("/data/"));
|
||||
|
||||
//mem_b.Term(); // handled by vmem
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ __attribute__((format(printf, 5, 6)))
|
|||
#define MAX_LOGLEVEL LogTypes::LOG_LEVELS::LDEBUG
|
||||
#else
|
||||
#ifndef MAX_LOGLEVEL
|
||||
#define MAX_LOGLEVEL LogTypes::LOG_LEVELS::LINFO
|
||||
#define MAX_LOGLEVEL LogTypes::LOG_LEVELS::LWARNING
|
||||
#endif // loglevel
|
||||
#endif // logging
|
||||
|
||||
|
|
|
@ -499,6 +499,7 @@ void dc_term()
|
|||
naomi_cart_Close();
|
||||
#endif
|
||||
plugins_Term();
|
||||
mem_Term();
|
||||
_vmem_release();
|
||||
|
||||
mcfg_DestroyDevices();
|
||||
|
|
Loading…
Reference in New Issue