diff --git a/core/deps/picotcp/include/arch/pico_msvc.h b/core/deps/picotcp/include/arch/pico_msvc.h new file mode 100644 index 000000000..226cd7c4d --- /dev/null +++ b/core/deps/picotcp/include/arch/pico_msvc.h @@ -0,0 +1,53 @@ +#ifndef PICO_SUPPORT_MSVC +#define PICO_SUPPORT_MSVC + +#include +#include +#include + +#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) + #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 +#else + #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL +#endif + +#define dbg printf + +#define stack_fill_pattern(...) do {} while(0) +#define stack_count_free_words(...) do {} while(0) +#define stack_get_free_words() (0) + +#define pico_zalloc(x) calloc(x, 1) +#define pico_free(x) free(x) + +static inline uint32_t PICO_TIME_MS(void) +{ + FILETIME ft; + unsigned __int64 tmpres = 0; + + GetSystemTimeAsFileTime(&ft); + + tmpres |= ft.dwHighDateTime; + tmpres <<= 32; + tmpres |= ft.dwLowDateTime; + + tmpres /= 10; /*convert into microseconds*/ + /*converting file time to unix epoch*/ + tmpres -= DELTA_EPOCH_IN_MICROSECS; + + return (uint32_t)(tmpres / 1000); // milliseconds +} + +static inline uint32_t PICO_TIME(void) +{ + return PICO_TIME_MS() / 1000; +} + +static inline void PICO_IDLE(void) +{ + // Not used anyway usleep(5000); +} + +#endif /* PICO_SUPPORT_MSVC */ + + diff --git a/core/deps/picotcp/include/arch/pico_posix.h b/core/deps/picotcp/include/arch/pico_posix.h index bb1da6c25..427fed8f0 100644 --- a/core/deps/picotcp/include/arch/pico_posix.h +++ b/core/deps/picotcp/include/arch/pico_posix.h @@ -8,9 +8,7 @@ #include #include -#ifndef _MSC_VER #include -#endif #include /* @@ -132,7 +130,7 @@ extern void *pico_thread_create(void *(*routine)(void *), void *arg); static inline void PICO_IDLE(void) { - // Not used anyway usleep(5000); + usleep(5000); } #endif /* PICO_SUPPORT_POSIX */ diff --git a/core/deps/picotcp/include/pico_config.h b/core/deps/picotcp/include/pico_config.h index 581118e70..a311f32a1 100644 --- a/core/deps/picotcp/include/pico_config.h +++ b/core/deps/picotcp/include/pico_config.h @@ -240,7 +240,8 @@ static inline uint64_t long_long_be(uint64_t le) # include "arch/pico_generic_gcc.h" #elif defined __KERNEL__ # include "arch/pico_linux.h" -/* #elif defined ... */ +#elif defined _MSC_VER +# include "arch/pico_msvc.h" #else # include "arch/pico_posix.h" #endif diff --git a/core/hw/modem/picoppp.cpp b/core/hw/modem/picoppp.cpp index 586e05167..841d5b3b8 100644 --- a/core/hw/modem/picoppp.cpp +++ b/core/hw/modem/picoppp.cpp @@ -114,6 +114,12 @@ bool start_pico() 0 }; +#ifdef _WIN32 + // No de-init on Windows yet + if (pico_stack_inited) + return; +#endif + if (!pico_stack_inited) { pico_stack_init(); @@ -310,6 +316,7 @@ bool start_pico() void stop_pico() { +#ifndef _WIN32 if (ppp) { pico_ppp_destroy(ppp); @@ -325,4 +332,5 @@ void stop_pico() pico_device_destroy(tun); tun = NULL; } +#endif }