From 2f179b7294c445a4410b1fcc471d21c0ab2034bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Sim=C3=B5es?= Date: Sat, 23 Dec 2017 16:00:06 +0000 Subject: [PATCH] Rework System.DateTime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Extract System.DateTime implementation - Add support for new API option for System.DateTime - Implement native implementation of set system time for ChibiOS target - Clean-up code in HeapBlock - Update CMakes accordingly - Update AppVeyor for targets to build with support for System.DateTime Signed-off-by: José Simões --- CMake/Modules/FindNF_CoreCLR.cmake | 4 +- CMake/Modules/FindSystem.DateTime.cmake | 46 ++++++++ CMake/Modules/NF_API_Namespaces.cmake | 12 ++- CMakeLists.txt | 30 +++--- appveyor.yml | 42 ++++---- cmake-variants.TEMPLATE.json | 2 + src/CLR/CorLib/CorLib.vcxproj | 2 - src/CLR/CorLib/CorLib.vcxproj.filters | 6 -- src/CLR/CorLib/corlib_native.cpp | 80 +------------- src/CLR/CorLib/corlib_native.h | 51 --------- src/CLR/Core/CLR_RT_HeapBlock_Timer.cpp | 20 +--- .../Core/Serialization/BinaryFormatter.cpp | 20 +--- src/CLR/Include/nanoCLR_Runtime__HeapBlock.h | 1 - src/CLR/System.DateTime/nf_dt_native.cpp | 100 ++++++++++++++++++ src/CLR/System.DateTime/nf_dt_native.h | 75 +++++++++++++ .../nf_dt_native_System_DateTime.cpp} | 43 ++++---- ...e_System_Globalization_DateTimeFormat.cpp} | 9 +- ...ative_nanoFramework_DateTime_RTC_stubs.cpp | 30 ++++++ ...f_dt_native_nanoFramework_DateTime_RTC.cpp | 58 ++++++++++ 19 files changed, 396 insertions(+), 235 deletions(-) create mode 100644 CMake/Modules/FindSystem.DateTime.cmake create mode 100644 src/CLR/System.DateTime/nf_dt_native.cpp create mode 100644 src/CLR/System.DateTime/nf_dt_native.h rename src/CLR/{CorLib/corlib_native_System_DateTime.cpp => System.DateTime/nf_dt_native_System_DateTime.cpp} (76%) rename src/CLR/{CorLib/corlib_native_System_Globalization_DateTimeFormat.cpp => System.DateTime/nf_dt_native_System_Globalization_DateTimeFormat.cpp} (65%) create mode 100644 src/CLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC_stubs.cpp create mode 100644 targets/CMSIS-OS/ChibiOS/nanoCLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC.cpp diff --git a/CMake/Modules/FindNF_CoreCLR.cmake b/CMake/Modules/FindNF_CoreCLR.cmake index c8bd812494..225aa05638 100644 --- a/CMake/Modules/FindNF_CoreCLR.cmake +++ b/CMake/Modules/FindNF_CoreCLR.cmake @@ -80,7 +80,6 @@ set(NF_CoreCLR_SRCS corlib_native_System_Collections_Stack.cpp corlib_native_System_Console.cpp corlib_native_System_Convert.cpp - corlib_native_System_DateTime.cpp corlib_native_System_Delegate.cpp corlib_native_System_Diagnostics_Debugger.cpp corlib_native_System_Double.cpp @@ -88,7 +87,6 @@ set(NF_CoreCLR_SRCS corlib_native_System_Exception.cpp corlib_native_System_GC.cpp corlib_native_System_Globalization_CultureInfo.cpp - corlib_native_System_Globalization_DateTimeFormat.cpp corlib_native_System_Guid.cpp corlib_native_System_MarshalByRefObject.cpp corlib_native_System_Math.cpp @@ -133,7 +131,7 @@ set(NF_CoreCLR_SRCS nf_rt_native_nanoFramework_Runtime_Hardware_SystemInfo.cpp nf_rt_native_nanoFramework_Runtime_Native_Debug.cpp nf_rt_native_nanoFramework_Runtime_Native_ExecutionConstraint.cpp - + # Core stubs Hardware_stub.cpp Heap_Persistence_stub.cpp diff --git a/CMake/Modules/FindSystem.DateTime.cmake b/CMake/Modules/FindSystem.DateTime.cmake new file mode 100644 index 0000000000..76659cd2e2 --- /dev/null +++ b/CMake/Modules/FindSystem.DateTime.cmake @@ -0,0 +1,46 @@ +# +# Copyright (c) 2017 The nanoFramework project contributors +# See LICENSE file in the project root for full license information. +# + + +# set include directories +# CoreCLR +list(APPEND System.DateTime_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src/CLR/System.DateTime") +# native code directory +list(APPEND System.DateTime_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/targets/CMSIS-OS/ChibiOS/nanoCLR/System.DateTime") + +# source files +set(System.DateTime_SRCS + + # System.DateTime + nf_dt_native.cpp + nf_dt_native_System_DateTime.cpp + nf_dt_native_System_Globalization_DateTimeFormat.cpp + nf_dt_native_nanoFramework_DateTime_RTC_stubs.cpp + + # native part of System.DateTime + nf_dt_native_nanoFramework_DateTime_RTC.cpp +) + +foreach(SRC_FILE ${System.DateTime_SRCS}) + set(System.DateTime_SRC_FILE SRC_FILE-NOTFOUND) + find_file(System.DateTime_SRC_FILE ${SRC_FILE} + PATHS + + # System.DateTime + "${PROJECT_SOURCE_DIR}/src/CLR/System.DateTime" + + # native part of System.DateTime + "${PROJECT_SOURCE_DIR}/targets/CMSIS-OS/ChibiOS/nanoCLR/System.DateTime" + + CMAKE_FIND_ROOT_PATH_BOTH + ) + # message("${SRC_FILE} >> ${System.DateTime_SRC_FILE}") # debug helper + list(APPEND System.DateTime_SOURCES ${System.DateTime_SRC_FILE}) +endforeach() + + +include(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(System.DateTime DEFAULT_MSG System.DateTime_INCLUDE_DIRS System.DateTime_SOURCES) diff --git a/CMake/Modules/NF_API_Namespaces.cmake b/CMake/Modules/NF_API_Namespaces.cmake index 9cb67fbed3..96be97eec7 100644 --- a/CMake/Modules/NF_API_Namespaces.cmake +++ b/CMake/Modules/NF_API_Namespaces.cmake @@ -17,6 +17,9 @@ option(API_Windows.Devices.Pwm "option for Windows.Devices.Pwm API") option(API_Windows.Devices.Adc "option for Windows.Devices.Adc API") option(API_nanoFramework.Runtime.Events "option for nanoFramework.Runtime.Events API") +# options for base class library flavours +option(API_System.DateTime "option for System.DateTime API") + ################################################################# # macro to perform individual settings to add an API to the build @@ -57,14 +60,19 @@ endmacro() ############################################################################################ macro(ParseApiOptions) - + + # System.DateTime + if(API_System.DateTime) + ##### API name here (doted name) + PerformSettingsForApiEntry("System.DateTime") + endif() + # Windows.Devices.Gpio if(API_Windows.Devices.Gpio) ##### API name here (doted name) PerformSettingsForApiEntry("Windows.Devices.Gpio") endif() - # Windows.Devices.Spi if(API_Windows.Devices.Spi) ##### API name here (doted name) diff --git a/CMakeLists.txt b/CMakeLists.txt index 47af5c4972..b0d9f51701 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -301,18 +301,6 @@ if(NF_FEATURE_DEBUGGER) endif() endif() -################################################################# -# RTC (real time clock) (default is OFF so RTC is NOT included) -option(NF_FEATURE_RTC "option to use hardware RTC") - -if(NF_FEATURE_RTC) - set(HAL_USE_RTC_OPTION TRUE CACHE INTERNAL "NF feature RTC") -else() - set(HAL_USE_RTC_OPTION FALSE CACHE INTERNAL "NF feature RTC") -endif() - -################################################################# - ################################################################# # enables Application Domains support in nanoCLR # (default is OFF so Application Domains is NOT supported) @@ -369,6 +357,11 @@ include(NF_API_Namespaces) # and/or manage other APIs that are required +if(API_System.DateTime) + # this API requires RTC + set(NF_FEATURE_RTC ON CACHE INTERNAL "enable NF_FEATURE_RTC from System.DateTime") +endif() + if(API_Windows.Devices.Gpio) set(HAL_USE_GPIO_OPTION TRUE CACHE INTERNAL "HAL GPIO for Windows.Devices.Gpio") @@ -408,6 +401,19 @@ set(HAL_USE_ADC_OPTION FALSE CACHE INTERNAL "HAL ADC for Windows.Devices.Adc") endif() +################################################################# +# RTC (real time clock) (default is OFF so RTC is NOT included) +option(NF_FEATURE_RTC "option to use hardware RTC") + +if(NF_FEATURE_RTC) + set(HAL_USE_RTC_OPTION TRUE CACHE INTERNAL "NF feature RTC") +else() + set(HAL_USE_RTC_OPTION FALSE CACHE INTERNAL "NF feature RTC") +endif() + +################################################################# + + ####################### # ChibiOS if(RTOS_CHIBIOS_CHECK) diff --git a/appveyor.yml b/appveyor.yml index 8d9d4f058f..fef1bfcf4b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -40,20 +40,20 @@ matrix: - BOARD_NAME: 'ST_STM32F4_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_STM32F429I_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_NUCLEO64_F091RC' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F0xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=OFF' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F0xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=OFF -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_NUCLEO144_F746ZG' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'MBN_QUAIL' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' NEEDS_DFU: 'True' - BOARD_NAME: 'ST_STM32F769I_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'NETDUINO3_WIFI' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' NEEDS_DFU: 'True' matrix: @@ -186,20 +186,20 @@ matrix: - BOARD_NAME: 'ST_STM32F4_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_STM32F429I_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_NUCLEO64_F091RC' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F0xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=OFF' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F0xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=OFF -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_NUCLEO144_F746ZG' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'MBN_QUAIL' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' NEEDS_DFU: 'True' - BOARD_NAME: 'ST_STM32F769I_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'NETDUINO3_WIFI' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_Windows.Devices.I2c=ON -DAPI_System.DateTime=ON' NEEDS_DFU: 'True' - BOARD_NAME: 'NANOCLR_WINDOWS' @@ -372,20 +372,20 @@ matrix: - BOARD_NAME: 'ST_STM32F4_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_STM32F429I_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_NUCLEO64_F091RC' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F0xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F0xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'ST_NUCLEO144_F746ZG' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=OFF' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=OFF -DAPI_System.DateTime=ON' - BOARD_NAME: 'MBN_QUAIL' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_Windows.Devices.Spi=ON -DAPI_System.DateTime=ON' NEEDS_DFU: 'True' - BOARD_NAME: 'ST_STM32F769I_DISCOVERY' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F7xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=ON -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_System.DateTime=ON' - BOARD_NAME: 'NETDUINO3_WIFI' - BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON' + BUILD_OPTIONS: '-DTARGET_SERIES=STM32F4xx -DUSE_FPU=TRUE -DNF_FEATURE_DEBUGGER=TRUE -DSWO_OUTPUT=OFF -DNF_FEATURE_RTC=ON -DAPI_Windows.Devices.Gpio=ON -DAPI_System.DateTime=ON' NEEDS_DFU: 'True' matrix: diff --git a/cmake-variants.TEMPLATE.json b/cmake-variants.TEMPLATE.json index b2c2660ed5..eba73925ce 100644 --- a/cmake-variants.TEMPLATE.json +++ b/cmake-variants.TEMPLATE.json @@ -46,6 +46,7 @@ "NF_FEATURE_RTC" : "OFF-default-ON-to-enable-hardware-RTC", "NF_FEATURE_USE_APPDOMAINS" : "OFF-default-ON-to-enable-support-for-Application-Domains", "NF_FEATURE_USE_NETWORKING" : "OFF-default-ON-to-enable-support", + "API_System.DateTime" : "OFF-default-ON-to-add-this-API", "API_Windows.Devices.Gpio" : "OFF-default-ON-to-add-this-API", "API_Windows.Devices.Spi" : "OFF-default-ON-to-add-this-API", "API_Windows.Devices.I2c" : "OFF-default-ON-to-add-this-API", @@ -75,6 +76,7 @@ "NF_FEATURE_RTC" : "OFF-default-ON-to-enable-hardware-RTC", "NF_FEATURE_USE_APPDOMAINS" : "OFF-default-ON-to-enable-support-for-Application-Domains", "NF_FEATURE_USE_NETWORKING" : "OFF-default-ON-to-enable-support", + "API_System.DateTime" : "OFF-default-ON-to-add-this-API", "API_Windows.Devices.Gpio" : "OFF-default-ON-to-add-this-API", "API_Windows.Devices.Spi" : "OFF-default-ON-to-add-this-API", "API_Windows.Devices.I2c" : "OFF-default-ON-to-add-this-API", diff --git a/src/CLR/CorLib/CorLib.vcxproj b/src/CLR/CorLib/CorLib.vcxproj index e119672fff..5ef6101a18 100644 --- a/src/CLR/CorLib/CorLib.vcxproj +++ b/src/CLR/CorLib/CorLib.vcxproj @@ -35,7 +35,6 @@ - @@ -43,7 +42,6 @@ - diff --git a/src/CLR/CorLib/CorLib.vcxproj.filters b/src/CLR/CorLib/CorLib.vcxproj.filters index 632e4c6512..b4f9a5d935 100644 --- a/src/CLR/CorLib/CorLib.vcxproj.filters +++ b/src/CLR/CorLib/CorLib.vcxproj.filters @@ -35,9 +35,6 @@ Source Files - - Source Files - Source Files @@ -86,9 +83,6 @@ Source Files - - Source Files - Source Files diff --git a/src/CLR/CorLib/corlib_native.cpp b/src/CLR/CorLib/corlib_native.cpp index 2f9859f310..8c04438beb 100644 --- a/src/CLR/CorLib/corlib_native.cpp +++ b/src/CLR/CorLib/corlib_native.cpp @@ -294,53 +294,6 @@ static const CLR_RT_MethodHandler method_lookup[] = NULL, NULL, Library_corlib_native_System_Convert::FromBase64CharArray___STATIC__SZARRAY_U1__SZARRAY_CHAR__I4, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - Library_corlib_native_System_DateTime::_ctor___VOID__I4__I4__I4__I4__I4__I4__I4, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - Library_corlib_native_System_DateTime::get_Day___I4, - Library_corlib_native_System_DateTime::get_DayOfWeek___SystemDayOfWeek, - Library_corlib_native_System_DateTime::get_DayOfYear___I4, - Library_corlib_native_System_DateTime::get_Hour___I4, - NULL, - Library_corlib_native_System_DateTime::get_Millisecond___I4, - Library_corlib_native_System_DateTime::get_Minute___I4, - Library_corlib_native_System_DateTime::get_Month___I4, - Library_corlib_native_System_DateTime::get_Second___I4, - NULL, - NULL, - Library_corlib_native_System_DateTime::get_Year___I4, - NULL, - NULL, - NULL, - NULL, - Library_corlib_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4, - NULL, - Library_corlib_native_System_DateTime::get_UtcNow___STATIC__SystemDateTime, - Library_corlib_native_System_DateTime::get_Today___STATIC__SystemDateTime, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, Library_corlib_native_System_Diagnostics_Debugger::get_IsAttached___STATIC__BOOLEAN, Library_corlib_native_System_Diagnostics_Debugger::Break___STATIC__VOID, NULL, @@ -364,38 +317,8 @@ static const CLR_RT_MethodHandler method_lookup[] = NULL, NULL, NULL, - NULL, Library_corlib_native_System_Globalization_CultureInfo::get_CurrentUICultureInternal___STATIC__SystemGlobalizationCultureInfo, Library_corlib_native_System_Globalization_CultureInfo::set_CurrentUICultureInternal___STATIC__VOID__SystemGlobalizationCultureInfo, - Library_corlib_native_System_Globalization_DateTimeFormat::FormatDigits___STATIC__STRING__I4__I4, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, NULL, NULL, NULL, @@ -900,7 +823,6 @@ static const CLR_RT_MethodHandler method_lookup[] = const CLR_RT_NativeAssemblyData g_CLR_AssemblyNative_mscorlib = { "mscorlib", - 0x7D73728E, + 0x3B1E14F1, method_lookup }; - diff --git a/src/CLR/CorLib/corlib_native.h b/src/CLR/CorLib/corlib_native.h index 4df4cd3f7a..929cd1e0a4 100644 --- a/src/CLR/CorLib/corlib_native.h +++ b/src/CLR/CorLib/corlib_native.h @@ -326,37 +326,6 @@ struct Library_corlib_native_System_Convert }; -struct Library_corlib_native_System_DateTime -{ - static const int FIELD_STATIC__MinValue = 3; - static const int FIELD_STATIC__MaxValue = 4; - - static const int FIELD___ticks = 1; - - NANOCLR_NATIVE_DECLARE(_ctor___VOID__I4__I4__I4__I4__I4__I4__I4); - NANOCLR_NATIVE_DECLARE(get_Day___I4); - NANOCLR_NATIVE_DECLARE(get_DayOfWeek___SystemDayOfWeek); - NANOCLR_NATIVE_DECLARE(get_DayOfYear___I4); - NANOCLR_NATIVE_DECLARE(get_Hour___I4); - NANOCLR_NATIVE_DECLARE(get_Millisecond___I4); - NANOCLR_NATIVE_DECLARE(get_Minute___I4); - NANOCLR_NATIVE_DECLARE(get_Month___I4); - NANOCLR_NATIVE_DECLARE(get_Second___I4); - NANOCLR_NATIVE_DECLARE(get_Year___I4); - NANOCLR_NATIVE_DECLARE(DaysInMonth___STATIC__I4__I4__I4); - NANOCLR_NATIVE_DECLARE(get_UtcNow___STATIC__SystemDateTime); - NANOCLR_NATIVE_DECLARE(get_Today___STATIC__SystemDateTime); - - //--// - - static CLR_INT64* NewObject ( CLR_RT_StackFrame& stack ); - static CLR_INT64* GetValuePtr( CLR_RT_StackFrame& stack ); - static CLR_INT64* GetValuePtr( CLR_RT_HeapBlock& ref ); - - static void Expand ( CLR_RT_StackFrame& stack, SYSTEMTIME& st ); - static void Compress( CLR_RT_StackFrame& stack, const SYSTEMTIME& st ); -}; - struct Library_corlib_native_System_Diagnostics_Debugger { NANOCLR_NATIVE_DECLARE(get_IsAttached___STATIC__BOOLEAN); @@ -414,26 +383,6 @@ struct Library_corlib_native_System_Globalization_CultureInfo }; -struct Library_corlib_native_System_Globalization_DateTimeFormat -{ - NANOCLR_NATIVE_DECLARE(FormatDigits___STATIC__STRING__I4__I4); - - //--// - -}; - -struct Library_corlib_native_System_Globalization_DateTimeFormatInfo -{ - static const int FIELD___generalShortTimePattern = 1; - static const int FIELD___generalLongTimePattern = 2; - static const int FIELD___fullDateTimePattern = 3; - static const int FIELD__CultureInfo = 4; - - - //--// - -}; - struct Library_corlib_native_System_Globalization_NumberFormatInfo { static const int FIELD___numberGroupSizes = 1; diff --git a/src/CLR/Core/CLR_RT_HeapBlock_Timer.cpp b/src/CLR/Core/CLR_RT_HeapBlock_Timer.cpp index 0a301f394b..4c654acd0a 100644 --- a/src/CLR/Core/CLR_RT_HeapBlock_Timer.cpp +++ b/src/CLR/Core/CLR_RT_HeapBlock_Timer.cpp @@ -251,11 +251,6 @@ HRESULT CLR_RT_HeapBlock_Timer::ConfigureObject( CLR_RT_StackFrame& stack, CLR_U { flags |= CLR_RT_HeapBlock_Timer::c_ACTION_Change; } - - if(flags & CLR_RT_HeapBlock_Timer::c_INPUT_Absolute) - { - timer->m_flags |= CLR_RT_HeapBlock_Timer::c_AbsoluteTimer; - } } if(flags & CLR_RT_HeapBlock_Timer::c_ACTION_Destroy) @@ -293,25 +288,12 @@ HRESULT CLR_RT_HeapBlock_Timer::ConfigureObject( CLR_RT_StackFrame& stack, CLR_U pVal = Library_corlib_native_System_TimeSpan::GetValuePtr( args[ 1 ] ); FAULT_ON_NULL(pVal); if (*pVal == -c_TickPerMillisecond) timer->m_timeFrequency = TIMEOUT_INFINITE; else timer->m_timeFrequency = *pVal; - } - else if(flags & CLR_RT_HeapBlock_Timer::c_INPUT_Absolute) - { - CLR_INT64* pVal; - - if((timer->m_flags & CLR_RT_HeapBlock_Timer::c_AbsoluteTimer) == 0) NANOCLR_SET_AND_LEAVE(CLR_E_INVALID_PARAMETER); - - pVal = Library_corlib_native_System_DateTime::GetValuePtr( args[ 0 ] ); FAULT_ON_NULL(pVal); timer->m_timeExpire = *pVal; - pVal = Library_corlib_native_System_TimeSpan::GetValuePtr( args[ 1 ] ); FAULT_ON_NULL(pVal); timer->m_timeFrequency = *pVal; - } + } if(timer->m_timeExpire == TIMEOUT_INFINITE) { timer->m_flags &= ~CLR_RT_HeapBlock_Timer::c_EnabledTimer; } - else if((flags & CLR_RT_HeapBlock_Timer::c_INPUT_Absolute) ) - { - timer->m_flags |= CLR_RT_HeapBlock_Timer::c_EnabledTimer; - } else { if(flags & CLR_RT_HeapBlock_Timer::c_INPUT_Int32) timer->m_timeExpire *= TIME_CONVERSION__TO_MILLISECONDS; diff --git a/src/CLR/Core/Serialization/BinaryFormatter.cpp b/src/CLR/Core/Serialization/BinaryFormatter.cpp index 4e52dbed23..8771cd9022 100644 --- a/src/CLR/Core/Serialization/BinaryFormatter.cpp +++ b/src/CLR/Core/Serialization/BinaryFormatter.cpp @@ -828,15 +828,7 @@ HRESULT CLR_RT_BinaryFormatter::TypeHandler::EmitValue( int& res ) res = c_Action_None; NANOCLR_SET_AND_LEAVE(S_OK); } - if(m_type->m_handlerCls.m_data == g_CLR_RT_WellKnownTypes.m_DateTime.m_data) - { - CLR_INT64* pVal = Library_corlib_native_System_DateTime::GetValuePtr( *value ); FAULT_ON_NULL(pVal); - - val = *(CLR_UINT64*)pVal; - bits = 64; - fSigned = false; - } - else if(m_type->m_handlerCls.m_data == g_CLR_RT_WellKnownTypes.m_TimeSpan.m_data) + if(m_type->m_handlerCls.m_data == g_CLR_RT_WellKnownTypes.m_TimeSpan.m_data) { CLR_INT64* pVal = Library_corlib_native_System_TimeSpan::GetValuePtr( *value ); FAULT_ON_NULL(pVal); @@ -968,15 +960,7 @@ HRESULT CLR_RT_BinaryFormatter::TypeHandler::ReadValue( int& res ) CLR_UINT32 bits; bool fSigned; - if(m_type->m_handlerCls.m_data == g_CLR_RT_WellKnownTypes.m_DateTime.m_data) - { - CLR_INT64* pVal = Library_corlib_native_System_DateTime::GetValuePtr( *m_value ); FAULT_ON_NULL(pVal); - - dst = (CLR_UINT64*)pVal; - bits = 64; - fSigned = false; - } - else if(m_type->m_handlerCls.m_data == g_CLR_RT_WellKnownTypes.m_TimeSpan.m_data) + if(m_type->m_handlerCls.m_data == g_CLR_RT_WellKnownTypes.m_TimeSpan.m_data) { CLR_INT64* pVal = Library_corlib_native_System_TimeSpan::GetValuePtr( *m_value ); FAULT_ON_NULL(pVal); diff --git a/src/CLR/Include/nanoCLR_Runtime__HeapBlock.h b/src/CLR/Include/nanoCLR_Runtime__HeapBlock.h index b2f80a7b4c..412f32288a 100644 --- a/src/CLR/Include/nanoCLR_Runtime__HeapBlock.h +++ b/src/CLR/Include/nanoCLR_Runtime__HeapBlock.h @@ -1752,7 +1752,6 @@ struct CLR_RT_HeapBlock_Timer : public CLR_RT_ObjectToEvent_Destination // EVENT static const CLR_UINT32 c_INPUT_Int32 = 0x00100000; static const CLR_UINT32 c_INPUT_TimeSpan = 0x00200000; - static const CLR_UINT32 c_INPUT_Absolute = 0x00400000; static const CLR_UINT32 c_UNUSED_10000000 = 0x10000000; static const CLR_UINT32 c_AbsoluteTimer = 0x20000000; diff --git a/src/CLR/System.DateTime/nf_dt_native.cpp b/src/CLR/System.DateTime/nf_dt_native.cpp new file mode 100644 index 0000000000..c20c686928 --- /dev/null +++ b/src/CLR/System.DateTime/nf_dt_native.cpp @@ -0,0 +1,100 @@ +// +// Copyright (c) 2017 The nanoFramework project contributors +// Portions Copyright (c) Microsoft Corporation. All rights reserved. +// See LICENSE file in the project root for full license information. +// + +#include "nf_dt_native.h" + + +static const CLR_RT_MethodHandler method_lookup[] = +{ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + Library_nf_dt_native_System_DateTime::_ctor___VOID__I4__I4__I4__I4__I4__I4__I4, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + Library_nf_dt_native_System_DateTime::get_Day___I4, + Library_nf_dt_native_System_DateTime::get_DayOfWeek___SystemDayOfWeek, + Library_nf_dt_native_System_DateTime::get_DayOfYear___I4, + Library_nf_dt_native_System_DateTime::get_Hour___I4, + NULL, + Library_nf_dt_native_System_DateTime::get_Millisecond___I4, + Library_nf_dt_native_System_DateTime::get_Minute___I4, + Library_nf_dt_native_System_DateTime::get_Month___I4, + Library_nf_dt_native_System_DateTime::get_Second___I4, + NULL, + NULL, + Library_nf_dt_native_System_DateTime::get_Year___I4, + NULL, + NULL, + NULL, + NULL, + Library_nf_dt_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4, + NULL, + Library_nf_dt_native_System_DateTime::get_UtcNow___STATIC__SystemDateTime, + Library_nf_dt_native_System_DateTime::get_Today___STATIC__SystemDateTime, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + Library_nf_dt_native_System_Globalization_DateTimeFormat::FormatDigits___STATIC__STRING__I4__I4, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + Library_nf_dt_native_nanoFramework_DateTime_RTC::Native_RTC_SetSystemTime___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1, + Library_nf_dt_native_nanoFramework_DateTime_RTC::Native_RTC_SetAlarm___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1, +}; + +const CLR_RT_NativeAssemblyData g_CLR_AssemblyNative_System_DateTime = +{ + "System.DateTime", + 0x09C5C479, + method_lookup +}; diff --git a/src/CLR/System.DateTime/nf_dt_native.h b/src/CLR/System.DateTime/nf_dt_native.h new file mode 100644 index 0000000000..e3b156f6f7 --- /dev/null +++ b/src/CLR/System.DateTime/nf_dt_native.h @@ -0,0 +1,75 @@ +// +// Copyright (c) 2017 The nanoFramework project contributors +// Portions Copyright (c) Microsoft Corporation. All rights reserved. +// See LICENSE file in the project root for full license information. +// + +#ifndef _NF_DT_NATIVE_H_ +#define _NF_DT_NATIVE_H_ + +#include +#include + +struct Library_nf_dt_native_System_DateTime +{ + static const int FIELD_STATIC__MinValue = 3; + static const int FIELD_STATIC__MaxValue = 4; + + static const int FIELD___ticks = 1; + + NANOCLR_NATIVE_DECLARE(_ctor___VOID__I4__I4__I4__I4__I4__I4__I4); + NANOCLR_NATIVE_DECLARE(get_Day___I4); + NANOCLR_NATIVE_DECLARE(get_DayOfWeek___SystemDayOfWeek); + NANOCLR_NATIVE_DECLARE(get_DayOfYear___I4); + NANOCLR_NATIVE_DECLARE(get_Hour___I4); + NANOCLR_NATIVE_DECLARE(get_Millisecond___I4); + NANOCLR_NATIVE_DECLARE(get_Minute___I4); + NANOCLR_NATIVE_DECLARE(get_Month___I4); + NANOCLR_NATIVE_DECLARE(get_Second___I4); + NANOCLR_NATIVE_DECLARE(get_Year___I4); + NANOCLR_NATIVE_DECLARE(DaysInMonth___STATIC__I4__I4__I4); + NANOCLR_NATIVE_DECLARE(get_UtcNow___STATIC__SystemDateTime); + NANOCLR_NATIVE_DECLARE(get_Today___STATIC__SystemDateTime); + + //--// + + static CLR_INT64* NewObject ( CLR_RT_StackFrame& stack ); + static CLR_INT64* GetValuePtr( CLR_RT_StackFrame& stack ); + static CLR_INT64* GetValuePtr( CLR_RT_HeapBlock& ref ); + + static void Expand ( CLR_RT_StackFrame& stack, SYSTEMTIME& st ); + static void Compress( CLR_RT_StackFrame& stack, const SYSTEMTIME& st ); +}; + +struct Library_nf_dt_native_System_Globalization_DateTimeFormat +{ + NANOCLR_NATIVE_DECLARE(FormatDigits___STATIC__STRING__I4__I4); + + //--// + +}; + +struct Library_nf_dt_native_System_Globalization_DateTimeFormatInfo +{ + static const int FIELD___generalShortTimePattern = 1; + static const int FIELD___generalLongTimePattern = 2; + static const int FIELD___fullDateTimePattern = 3; + static const int FIELD__CultureInfo = 4; + + + //--// + +}; + +struct Library_nf_dt_native_nanoFramework_DateTime_RTC +{ + NANOCLR_NATIVE_DECLARE(Native_RTC_SetSystemTime___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1); + NANOCLR_NATIVE_DECLARE(Native_RTC_SetAlarm___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1); + + //--// + +}; + +extern const CLR_RT_NativeAssemblyData g_CLR_AssemblyNative_System_DateTime; + +#endif //_NF_DT_NATIVE_H_ diff --git a/src/CLR/CorLib/corlib_native_System_DateTime.cpp b/src/CLR/System.DateTime/nf_dt_native_System_DateTime.cpp similarity index 76% rename from src/CLR/CorLib/corlib_native_System_DateTime.cpp rename to src/CLR/System.DateTime/nf_dt_native_System_DateTime.cpp index 4aa8aca021..73e0c2ad3e 100644 --- a/src/CLR/CorLib/corlib_native_System_DateTime.cpp +++ b/src/CLR/System.DateTime/nf_dt_native_System_DateTime.cpp @@ -3,13 +3,18 @@ // Portions Copyright (c) Microsoft Corporation. All rights reserved. // See LICENSE file in the project root for full license information. // -#include "CorLib.h" +#include "nf_dt_native.h" + +///////////////////////////////////////////////////////////////////////////// +// the stubs for this class are generated by nanoFramework.System.DateTime // +///////////////////////////////////////////////////////////////////////////// + CLR_INT64 s_UTCMask = ULONGLONGCONSTANT(0x8000000000000000); CLR_INT64 s_TickMask = ULONGLONGCONSTANT(0x7FFFFFFFFFFFFFFF); -HRESULT Library_corlib_native_System_DateTime::_ctor___VOID__I4__I4__I4__I4__I4__I4__I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::_ctor___VOID__I4__I4__I4__I4__I4__I4__I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -42,7 +47,7 @@ HRESULT Library_corlib_native_System_DateTime::_ctor___VOID__I4__I4__I4__I4__I4_ NANOCLR_NOCLEANUP(); } -HRESULT Library_corlib_native_System_DateTime::get_Day___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Day___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -54,7 +59,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Day___I4( CLR_RT_StackFrame& NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_DayOfWeek___SystemDayOfWeek( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_DayOfWeek___SystemDayOfWeek( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -66,7 +71,7 @@ HRESULT Library_corlib_native_System_DateTime::get_DayOfWeek___SystemDayOfWeek( NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_DayOfYear___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_DayOfYear___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -83,7 +88,7 @@ HRESULT Library_corlib_native_System_DateTime::get_DayOfYear___I4( CLR_RT_StackF NANOCLR_NOCLEANUP(); } -HRESULT Library_corlib_native_System_DateTime::get_Hour___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Hour___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -95,7 +100,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Hour___I4( CLR_RT_StackFrame& NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_Millisecond___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Millisecond___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -107,7 +112,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Millisecond___I4( CLR_RT_Stac NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_Minute___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Minute___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -119,7 +124,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Minute___I4( CLR_RT_StackFram NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_Month___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Month___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -131,7 +136,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Month___I4( CLR_RT_StackFrame NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_Second___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Second___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -143,7 +148,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Second___I4( CLR_RT_StackFram NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_Year___I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Year___I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -155,7 +160,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Year___I4( CLR_RT_StackFrame& NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -171,7 +176,7 @@ HRESULT Library_corlib_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4( NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_UtcNow___STATIC__SystemDateTime( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_UtcNow___STATIC__SystemDateTime( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -184,7 +189,7 @@ HRESULT Library_corlib_native_System_DateTime::get_UtcNow___STATIC__SystemDateTi NANOCLR_NOCLEANUP_NOLABEL(); } -HRESULT Library_corlib_native_System_DateTime::get_Today___STATIC__SystemDateTime( CLR_RT_StackFrame& stack ) +HRESULT Library_nf_dt_native_System_DateTime::get_Today___STATIC__SystemDateTime( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); @@ -199,7 +204,7 @@ HRESULT Library_corlib_native_System_DateTime::get_Today___STATIC__SystemDateTim //--// -CLR_INT64* Library_corlib_native_System_DateTime::NewObject( CLR_RT_StackFrame& stack ) +CLR_INT64* Library_nf_dt_native_System_DateTime::NewObject( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); CLR_RT_HeapBlock& ref = stack.PushValue(); @@ -212,13 +217,13 @@ CLR_INT64* Library_corlib_native_System_DateTime::NewObject( CLR_RT_StackFrame& return reinterpret_cast(&ref.NumericByRef().s8); } -CLR_INT64* Library_corlib_native_System_DateTime::GetValuePtr( CLR_RT_StackFrame& stack ) +CLR_INT64* Library_nf_dt_native_System_DateTime::GetValuePtr( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); return GetValuePtr( stack.Arg0() ); } -CLR_INT64* Library_corlib_native_System_DateTime::GetValuePtr( CLR_RT_HeapBlock& ref ) +CLR_INT64* Library_nf_dt_native_System_DateTime::GetValuePtr( CLR_RT_HeapBlock& ref ) { NATIVE_PROFILE_CLR_CORE(); CLR_RT_HeapBlock* obj = &ref; @@ -248,7 +253,7 @@ CLR_INT64* Library_corlib_native_System_DateTime::GetValuePtr( CLR_RT_HeapBlock& return NULL; } -void Library_corlib_native_System_DateTime::Expand( CLR_RT_StackFrame& stack, SYSTEMTIME& st ) +void Library_nf_dt_native_System_DateTime::Expand( CLR_RT_StackFrame& stack, SYSTEMTIME& st ) { NATIVE_PROFILE_CLR_CORE(); CLR_INT64* val = GetValuePtr( stack ); @@ -264,7 +269,7 @@ void Library_corlib_native_System_DateTime::Expand( CLR_RT_StackFrame& stack, SY } // Compress function always creates local time. -void Library_corlib_native_System_DateTime::Compress( CLR_RT_StackFrame& stack, const SYSTEMTIME& st ) +void Library_nf_dt_native_System_DateTime::Compress( CLR_RT_StackFrame& stack, const SYSTEMTIME& st ) { NATIVE_PROFILE_CLR_CORE(); CLR_INT64* val = GetValuePtr( stack ); diff --git a/src/CLR/CorLib/corlib_native_System_Globalization_DateTimeFormat.cpp b/src/CLR/System.DateTime/nf_dt_native_System_Globalization_DateTimeFormat.cpp similarity index 65% rename from src/CLR/CorLib/corlib_native_System_Globalization_DateTimeFormat.cpp rename to src/CLR/System.DateTime/nf_dt_native_System_Globalization_DateTimeFormat.cpp index 4a739b8d57..b976e290a0 100644 --- a/src/CLR/CorLib/corlib_native_System_Globalization_DateTimeFormat.cpp +++ b/src/CLR/System.DateTime/nf_dt_native_System_Globalization_DateTimeFormat.cpp @@ -3,10 +3,15 @@ // Portions Copyright (c) Microsoft Corporation. All rights reserved. // See LICENSE file in the project root for full license information. // -#include "CorLib.h" +#include "nf_dt_native.h" -HRESULT Library_corlib_native_System_Globalization_DateTimeFormat::FormatDigits___STATIC__STRING__I4__I4( CLR_RT_StackFrame& stack ) +////////////////////////////////////////////////////////////////////////////////////// +// the stubs for this class are generated by nanoFramework.System.DateTime solution // +////////////////////////////////////////////////////////////////////////////////////// + + +HRESULT Library_nf_dt_native_System_Globalization_DateTimeFormat::FormatDigits___STATIC__STRING__I4__I4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); NANOCLR_HEADER(); diff --git a/src/CLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC_stubs.cpp b/src/CLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC_stubs.cpp new file mode 100644 index 0000000000..d30a88d31c --- /dev/null +++ b/src/CLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC_stubs.cpp @@ -0,0 +1,30 @@ +// +// Copyright (c) 2017 The nanoFramework project contributors +// Portions Copyright (c) Microsoft Corporation. All rights reserved. +// See LICENSE file in the project root for full license information. +// +#include +#include "nf_dt_native.h" + +///////////////////////////////////////////////////////////////////////////// +// the stubs for this class are generated by nanoFramework.System.DateTime // +///////////////////////////////////////////////////////////////////////////// + + +__nfweak HRESULT Library_nf_dt_native_nanoFramework_DateTime_RTC::Native_RTC_SetSystemTime___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1( CLR_RT_StackFrame& stack ) +{ + NANOCLR_HEADER(); + + NANOCLR_SET_AND_LEAVE(stack.NotImplementedStub()); + + NANOCLR_NOCLEANUP(); +} + +__nfweak HRESULT Library_nf_dt_native_nanoFramework_DateTime_RTC::Native_RTC_SetAlarm___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1( CLR_RT_StackFrame& stack ) +{ + NANOCLR_HEADER(); + + NANOCLR_SET_AND_LEAVE(stack.NotImplementedStub()); + + NANOCLR_NOCLEANUP(); +} diff --git a/targets/CMSIS-OS/ChibiOS/nanoCLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC.cpp b/targets/CMSIS-OS/ChibiOS/nanoCLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC.cpp new file mode 100644 index 0000000000..7621e3699d --- /dev/null +++ b/targets/CMSIS-OS/ChibiOS/nanoCLR/System.DateTime/nf_dt_native_nanoFramework_DateTime_RTC.cpp @@ -0,0 +1,58 @@ +// +// Copyright (c) 2017 The nanoFramework project contributors +// Portions Copyright (c) Microsoft Corporation. All rights reserved. +// See LICENSE file in the project root for full license information. +// +#include +#include +#include +#include "nf_dt_native.h" + + +///////////////////////////////////////////////////////////////////////////// +// the stubs for this class are generated by nanoFramework.System.DateTime // +///////////////////////////////////////////////////////////////////////////// + + +HRESULT Library_nf_dt_native_nanoFramework_DateTime_RTC::Native_RTC_SetSystemTime___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1( CLR_RT_StackFrame& stack ) +{ + NANOCLR_HEADER(); + { + RTCDateTime newTime; + + newTime.year = stack.Arg0().NumericByRef().s4 - 1980; // ChibiOS time base is 1980-01-01 + newTime.month = (uint8_t)stack.Arg1().NumericByRef().u1; + newTime.day = stack.Arg2().NumericByRef().u1; + newTime.dayofweek = stack.Arg3().NumericByRef().u1; + newTime.millisecond = ((((uint32_t)stack.Arg4().NumericByRef().u1 * 3600) + + ((uint32_t)stack.Arg5().NumericByRef().u1 * 60) + + (uint32_t)stack.Arg6().NumericByRef().u1) * 1000); + + // set RTC time + rtcSetTime(&RTCD1, &newTime); + + // Return value to the managed application + stack.SetResult_Boolean(true); + } + NANOCLR_NOCLEANUP(); +} + +HRESULT Library_nf_dt_native_nanoFramework_DateTime_RTC::Native_RTC_SetAlarm___STATIC__BOOLEAN__I4__U1__U1__U1__U1__U1__U1( CLR_RT_StackFrame& stack ) +{ + NANOCLR_HEADER(); + { + NANOCLR_SET_AND_LEAVE(stack.NotImplementedStub()); + + // FIXME replace with proper code to set alarm time + // // perform conversion to RTCDateTime + // RTCAlarm alarmspec; + + // /* first disable all alrams if any */ + // rtcSetAlarm(&RTCD1, 0, NULL); + // rtcSetAlarm(&RTCD1, 1, NULL); + + // // Return value to the managed application + // stack.SetResult_Boolean(true); + } + NANOCLR_NOCLEANUP(); +}