diff --git a/CMake/Modules/FindWireProtocol.cmake b/CMake/Modules/FindWireProtocol.cmake index 5e66703f20..a60d9f7632 100644 --- a/CMake/Modules/FindWireProtocol.cmake +++ b/CMake/Modules/FindWireProtocol.cmake @@ -1,5 +1,10 @@ +# +# Copyright (c) 2017 The nanoFramework project contributors +# See LICENSE file in the project root for full license information. +# + # set include directories for Wire Protocol -list(APPEND WireProtocol_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/CLR/WireProtocol) +list(APPEND WireProtocol_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/CLR/Include) # source files for Wire Protocol set(WireProtocol_SRCS diff --git a/docs/architecture/memory-map-sructure.md b/docs/architecture/memory-map-sructure.md new file mode 100644 index 0000000000..2422c5a42f --- /dev/null +++ b/docs/architecture/memory-map-sructure.md @@ -0,0 +1,9 @@ + +``` +{ + "base":"0x08000000", + "blocks":[16,16,16,16,64,128,128,128,128,128,128,128] +} +``` + +[JSON validator](https://jsonformatter.curiousconcept.com/) \ No newline at end of file diff --git a/src/CLR/WireProtocol/WireProtocol_App_Interface.h b/src/CLR/Include/WireProtocol_App_Interface.h similarity index 100% rename from src/CLR/WireProtocol/WireProtocol_App_Interface.h rename to src/CLR/Include/WireProtocol_App_Interface.h diff --git a/src/CLR/WireProtocol/WireProtocol_HAL_Interface.h b/src/CLR/Include/WireProtocol_HAL_Interface.h similarity index 100% rename from src/CLR/WireProtocol/WireProtocol_HAL_Interface.h rename to src/CLR/Include/WireProtocol_HAL_Interface.h diff --git a/src/CLR/WireProtocol/WireProtocol_Message.h b/src/CLR/Include/WireProtocol_Message.h similarity index 100% rename from src/CLR/WireProtocol/WireProtocol_Message.h rename to src/CLR/Include/WireProtocol_Message.h diff --git a/src/CLR/Include/WireProtocol_MonitorCommands.h b/src/CLR/Include/WireProtocol_MonitorCommands.h new file mode 100644 index 0000000000..96bdf9e4b7 --- /dev/null +++ b/src/CLR/Include/WireProtocol_MonitorCommands.h @@ -0,0 +1,128 @@ +// +// 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 _WIREPROTOCOL_COMMANDS_H_ +#define _WIREPROTOCOL_COMMANDS_H_ + +#include "WireProtocol_v2.h" +#include "WireProtocol_Message.h" + +////////////////////////////////////////// +// enums + +// structure for Monitor Reboot options +// backwards compatible with .NETMF +typedef enum Monitor_Reboot_Options +{ + Monitor_Reboot_c_NormalReboot = 0, + Monitor_Reboot_c_EnterBootloader = 1, + Monitor_Reboot_c_ClrRebootOnly = 2, + Monitor_Reboot_c_ClrStopDebugger = 4 +}Monitor_Reboot_Options; + +// structure for Access Memory operations +typedef enum AccessMemory_Operations +{ + // check if memory space is erased + AccessMemory_Check = 0x00, + + // read block of data starting at a given address + AccessMemory_Read = 0x01, + + // write block of data starting at a given address + AccessMemory_Write = 0x02, + + // erase sector/block/page at a given address + AccessMemory_Erase = 0x03, + + + AccessMemory_Mask = 0x0F + +}AccessMemory_Operations; + +typedef enum MemoryMap_Options +{ + Monitor_MemoryMap_c_RAM = 0x00000001, + Monitor_MemoryMap_c_FLASH = 0x00000002, + +}MemoryMap_Options; + +////////////////////////////////////////// +// typedefs + +// structure for Monitor Ping Reply +// backwards compatible with .NETMF +typedef struct Monitor_Ping_Reply +{ + uint32_t m_source; + uint32_t m_dbg_flags; + +}Monitor_Ping_Reply; + +// structure with reply for OEM information command +typedef struct Monitor_OemInfo_Reply +{ + ReleaseInfo m_releaseInfo; + +}Monitor_OemInfo_Reply; + +typedef struct CLR_DBG_Commands_Monitor_WriteMemory +{ + uint32_t address; + uint32_t length; + uint8_t data[1]; + +}CLR_DBG_Commands_Monitor_WriteMemory; + +typedef struct Monitor_Reboot_Command +{ + uint32_t m_flags; + +}Monitor_Reboot_Command; + +typedef struct CLR_DBG_Commands_Monitor_EraseMemory +{ + uint32_t address; + uint32_t length; + +}CLR_DBG_Commands_Monitor_EraseMemory; + +typedef struct MemoryMap_Range +{ + uint32_t m_address; + uint32_t m_length; + uint32_t m_flags; + +}MemoryMap_Range; + + +typedef struct CLR_DBG_Commands_Monitor_MemoryMap +{ + MemoryMap_Range m_map[1]; + +}CLR_DBG_Commands_Monitor_MemoryMap; + + +////////////////////////////////////////// +// function declarations (commands) + +#ifdef __cplusplus +extern "C" { +#endif + +bool Monitor_Ping(WP_Message* message); +bool Monitor_OemInfo(WP_Message* message); +bool Monitor_WriteMemory(WP_Message* message); +bool Monitor_Reboot(WP_Message* message); +bool Monitor_EraseMemory(WP_Message* message); +bool Monitor_MemoryMap(WP_Message* message); + +#ifdef __cplusplus +} +#endif + +#endif //_WIREPROTOCOL_COMMANDS_H_ + diff --git a/src/CLR/WireProtocol/WireProtocol_v2.h b/src/CLR/Include/WireProtocol_v2.h similarity index 91% rename from src/CLR/WireProtocol/WireProtocol_v2.h rename to src/CLR/Include/WireProtocol_v2.h index d92e6bf831..de92af2012 100644 --- a/src/CLR/WireProtocol/WireProtocol_v2.h +++ b/src/CLR/Include/WireProtocol_v2.h @@ -94,6 +94,19 @@ typedef struct WP_Packet uint32_t m_size; }WP_Packet; +typedef struct WP_Controller +{ + uint8_t* m_szMarker; + + uint16_t m_lastOutboundMessage; + + bool (*AdvanceState)(void); + void (*Initialize)(void* szMarker, void* phy, void* app, void* state ); + //bool (*SendProtocolMessage)( const void* msg ); + bool (*SendProtocolMessage)( uint32_t cmd, uint32_t flags, uint32_t payloadSize, uint8_t* payload); + +}WP_Controller; + // structure for Wire Protocol message // backwards compatible with .NETMF equivalent in names and types to help code reuse typedef struct WP_Message @@ -104,21 +117,21 @@ typedef struct WP_Message uint8_t* m_pos; uint16_t m_size; int m_rxState; -}WP_Message; -typedef struct WP_Controller -{ - uint8_t* m_szMarker; + void (*Initialize)(WP_Controller* parent); + void (*PrepareReception)(void); + void (*PrepareRequest)(unsigned int cmd, unsigned int flags, unsigned int payloadSize, unsigned char* payload); + void (*PrepareReply)(const void** req, unsigned int flags, unsigned int payloadSize, unsigned char* payload); + void (*SetPayload)(unsigned char* payload); + void (*Release)(void); + bool (*Process)(void); - uint16_t m_lastOutboundMessage; + bool (*VerifyHeader)(void); + bool (*VerifyPayload)(void); + void (*ReplyBadPacket)(unsigned int flags); - bool (*AdvanceState)(void); - //void (*Initialize)(LPCSTR szMarker, const WP_PhysicalLayer* phy, const WP_ApplicationLayer* app, void* state ); - void (*Initialize)(void* szMarker, void* phy, void* app, void* state ); - //bool (*SendProtocolMessage)( const void* msg ); - bool (*SendProtocolMessage)( uint32_t cmd, uint32_t flags, uint32_t payloadSize, uint8_t* payload); +}WP_Message; -}WP_Controller; // enum with flags for Monitor ping source and debugger flags // backwards compatible with .NETMF in debugger flags only