From e9f0244983d9b5ddbd5cd6e8007d99be41a8864d Mon Sep 17 00:00:00 2001 From: Maksymilian Wojczuk Date: Fri, 2 Nov 2018 21:24:21 +0100 Subject: [PATCH 1/2] Target Object Added object target and implemented basic functionalities of allowed methods --- .../wakaama_client/objects/object_target.h | 9 + .../wakaama_client/objects/objects.h | 4 +- Makefile | 738 +++++++++--------- README.md | 12 + .../wakaama_client/objects/object_target.c | 394 ++++++++++ Src/communication/wakaama_client/wakaama.c | 11 + 6 files changed, 803 insertions(+), 365 deletions(-) create mode 100644 Inc/communication/wakaama_client/objects/object_target.h create mode 100644 Src/communication/wakaama_client/objects/object_target.c diff --git a/Inc/communication/wakaama_client/objects/object_target.h b/Inc/communication/wakaama_client/objects/object_target.h new file mode 100644 index 0000000..4d10681 --- /dev/null +++ b/Inc/communication/wakaama_client/objects/object_target.h @@ -0,0 +1,9 @@ +#ifndef _TARGET_H +#define _TARGET_H + +// Downlaod States +#define NO_DOWNLOAD_DATA 0 +#define DOWNLOAD_IN_PROGRESS 1 +#define DOWNLOAD_ERROR 2 +#define DOWNLOAD_COMPLETED 3 +#endif \ No newline at end of file diff --git a/Inc/communication/wakaama_client/objects/objects.h b/Inc/communication/wakaama_client/objects/objects.h index c8ed171..2ff3eec 100644 --- a/Inc/communication/wakaama_client/objects/objects.h +++ b/Inc/communication/wakaama_client/objects/objects.h @@ -8,12 +8,14 @@ lwm2m_object_t * get_server_object(int serverId, bool storing); lwm2m_object_t * get_object_device(); lwm2m_object_t * get_test_object(); +lwm2m_object_t * get_target_object(); void free_security_object(); void clean_server_object(); void free_object_device(); void free_test_object(); +void free_target_object(); -#define OBJ_COUNT 4 +#define OBJ_COUNT 5 #endif \ No newline at end of file diff --git a/Makefile b/Makefile index 01e1cf2..7698eae 100644 --- a/Makefile +++ b/Makefile @@ -1,364 +1,374 @@ -########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [2.30.0] date: [Mon Oct 15 23:30:01 CEST 2018] -########################################################################################################################## - -# ------------------------------------------------ -# Generic Makefile (based on gcc) -# -# ChangeLog : -# 2017-02-10 - Several enhancements + project update mode -# 2015-07-22 - first version -# ------------------------------------------------ - -###################################### -# target -###################################### -TARGET = RemoteProgrammer - - -###################################### -# building variables -###################################### -# debug build? -DEBUG = 1 -# optimization -OPT = -Og - - -####################################### -# paths -####################################### -# Build path -BUILD_DIR = build - -###################################### -# source -###################################### -# C sources -C_SOURCES = \ -Src/usbh_diskio.c \ -Src/fatfs.c \ -Src/freertos.c \ -Src/usb_host.c \ -Src/usbh_conf.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_hcd.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ -Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ -Src/system_stm32f4xx.c \ -Middlewares/Third_Party/FatFs/src/option/syscall.c \ -Middlewares/Third_Party/FatFs/src/diskio.c \ -Middlewares/Third_Party/FatFs/src/ff.c \ -Middlewares/Third_Party/FatFs/src/ff_gen_drv.c \ -Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ -Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \ -Middlewares/Third_Party/FreeRTOS/Source/list.c \ -Middlewares/Third_Party/FreeRTOS/Source/timers.c \ -Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ -Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ -Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ -Middlewares/Third_Party/FreeRTOS/Source/queue.c \ -Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c \ -Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_core.c \ -Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ctlreq.c \ -Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ioreq.c \ -Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_pipes.c \ -Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc.c \ -Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_bot.c \ -Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c \ -Src/syscalls.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c \ -Middlewares/Third_Party/LwIP/src/netif/ethernet.c \ -Middlewares/Third_Party/LwIP/src/netif/slipif.c \ -Middlewares/Third_Party/LwIP/src/netif/lowpan6.c \ -Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c \ -Middlewares/Third_Party/LwIP/src/api/netifapi.c \ -Middlewares/Third_Party/LwIP/src/api/tcpip.c \ -Middlewares/Third_Party/LwIP/src/api/netbuf.c \ -Middlewares/Third_Party/LwIP/src/api/api_msg.c \ -Middlewares/Third_Party/LwIP/src/api/api_lib.c \ -Middlewares/Third_Party/LwIP/src/api/netdb.c \ -Middlewares/Third_Party/LwIP/src/api/sockets.c \ -Middlewares/Third_Party/LwIP/src/api/err.c \ -Middlewares/Third_Party/LwIP/src/core/def.c \ -Middlewares/Third_Party/LwIP/src/core/timeouts.c \ -Middlewares/Third_Party/LwIP/src/core/netif.c \ -Middlewares/Third_Party/LwIP/src/core/sys.c \ -Middlewares/Third_Party/LwIP/src/core/raw.c \ -Middlewares/Third_Party/LwIP/src/core/pbuf.c \ -Middlewares/Third_Party/LwIP/src/core/memp.c \ -Middlewares/Third_Party/LwIP/src/core/tcp.c \ -Middlewares/Third_Party/LwIP/src/core/tcp_in.c \ -Middlewares/Third_Party/LwIP/src/core/init.c \ -Middlewares/Third_Party/LwIP/src/core/mem.c \ -Middlewares/Third_Party/LwIP/src/core/stats.c \ -Middlewares/Third_Party/LwIP/src/core/inet_chksum.c \ -Middlewares/Third_Party/LwIP/src/core/tcp_out.c \ -Middlewares/Third_Party/LwIP/src/core/udp.c \ -Middlewares/Third_Party/LwIP/src/core/dns.c \ -Middlewares/Third_Party/LwIP/src/core/ip.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c \ -Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c \ -Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c \ -Middlewares/Third_Party/LwIP/system/OS/sys_arch.c \ -Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c \ -Src/stm32f4xx_hal_timebase_TIM.c \ -Src/main.c \ -Src/lwip.c \ -Src/ethernetif.c \ -Src/stm32f4xx_it.c \ -Src/stm32f4xx_hal_msp.c \ -Src/communication/dbgu.c \ -Src/communication/term_io.c \ -Src/communication/wakaama_client/wakaama.c - -# ASM sources -ASM_SOURCES = \ -startup_stm32f429xx.s - -####################################### -# Wakaama -###################################### - -WAKAAMA_SOURCES = \ -Middlewares/Third_Party/wakaama/liblwm2m.c \ -Middlewares/Third_Party/wakaama/wakaama_utils.c \ -Middlewares/Third_Party/wakaama/uri.c \ -Middlewares/Third_Party/wakaama/objects.c \ -Middlewares/Third_Party/wakaama/tlv.c \ -Middlewares/Third_Party/wakaama/data.c \ -Middlewares/Third_Party/wakaama/wakaama_list.c \ -Middlewares/Third_Party/wakaama/packet.c \ -Middlewares/Third_Party/wakaama/transaction.c \ -Middlewares/Third_Party/wakaama/registration.c \ -Middlewares/Third_Party/wakaama/bootstrap.c \ -Middlewares/Third_Party/wakaama/management.c \ -Middlewares/Third_Party/wakaama/observe.c \ -Middlewares/Third_Party/wakaama/json.c \ -Middlewares/Third_Party/wakaama/discover.c \ -Middlewares/Third_Party/wakaama/block1.c \ -Middlewares/Third_Party/wakaama/er-coap-13/er-coap-13.c - -WAKAAMA_CUSTOM = \ -Src/communication/wakaama_client/platform/platform.c \ -Src/communication/wakaama_client/connection.c \ -Src/communication/wakaama_client/objects/object_device.c \ -Src/communication/wakaama_client/objects/object_security.c \ -Src/communication/wakaama_client/objects/object_server.c \ -Src/communication/wakaama_client/objects/test_object.c - - -WAKAAMA_INC = \ --IMiddlewares/Third_Party/wakaama \ --IMiddlewares/Third_Party/wakaama/er-coap-13 \ - - -WAKAAMA_SYMBOL = -DLWM2M_LITTLE_ENDIAN -WAKAAMA_SYMBOL += -DLWM2M_CLIENT_MODE -#WAKAAMA_SYMBOL += -DLWM2M_MEMORY_TRACE -#WAKAAMA_SYMBOL += -DCOAPLOG # download logs -#WAKAAMA_SYMBOL += -DLWM2M_WITH_LOGS # LOGS - -####################################### -# binaries -####################################### -PREFIX = arm-none-eabi- -# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) -# either it can be added to the PATH environment variable. -ifdef GCC_PATH -CC = $(GCC_PATH)/$(PREFIX)gcc -AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp -CP = $(GCC_PATH)/$(PREFIX)objcopy -SZ = $(GCC_PATH)/$(PREFIX)size -else -CC = $(PREFIX)gcc -AS = $(PREFIX)gcc -x assembler-with-cpp -CP = $(PREFIX)objcopy -SZ = $(PREFIX)size -endif -HEX = $(CP) -O ihex -BIN = $(CP) -O binary -S - -####################################### -# CFLAGS -####################################### -# cpu -CPU = -mcpu=cortex-m4 - -# fpu -FPU = -mfpu=fpv4-sp-d16 - -# float-abi -FLOAT-ABI = -mfloat-abi=hard - -# mcu -MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) - -# macros for gcc -# AS defines -AS_DEFS = - -# C defines -C_DEFS = \ --DUSE_HAL_DRIVER \ --DSTM32F429xx - - -# AS includes -AS_INCLUDES = \ --I/Inc - -# C includes -C_INCLUDES = \ --IInc \ --IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \ --IMiddlewares/ST/STM32_USB_Host_Library/Core/Inc \ --IMiddlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc \ --IMiddlewares/Third_Party/FatFs/src \ --IMiddlewares/Third_Party/FreeRTOS/Source/include \ --IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS \ --IMiddlewares/Third_Party/LwIP/src/include \ --IMiddlewares/Third_Party/LwIP/system \ --IDrivers/STM32F4xx_HAL_Driver/Inc \ --IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \ --IMiddlewares/Third_Party/LwIP/src/include/netif/ppp \ --IDrivers/CMSIS/Device/ST/STM32F4xx/Include \ --IMiddlewares/Third_Party/LwIP/src/include/lwip \ --IMiddlewares/Third_Party/LwIP/src/include/lwip/apps \ --IMiddlewares/Third_Party/LwIP/src/include/lwip/priv \ --IMiddlewares/Third_Party/LwIP/src/include/lwip/prot \ --IMiddlewares/Third_Party/LwIP/src/include/netif \ --IMiddlewares/Third_Party/LwIP/src/include/posix \ --IMiddlewares/Third_Party/LwIP/src/include/posix/sys \ --IMiddlewares/Third_Party/LwIP/system/arch \ --IDrivers/CMSIS/Include \ --IInc/communication \ --IInc/communication/wakaama_client \ --IInc/communication/wakaama_client/objects \ --Iconfig - -C_INCLUDES += $(WAKAAMA_INC) - -C_SOURCES += $(WAKAAMA_SOURCES) $(WAKAAMA_CUSTOM) - -# compile gcc flags -ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections - -CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) $(WAKAAMA_SYMBOL) -Wall -fdata-sections -ffunction-sections - -ifeq ($(DEBUG), 1) -CFLAGS += -g -gdwarf-2 -endif - - -# Generate dependency information -CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" - - -####################################### -# LDFLAGS -####################################### -# link script -LDSCRIPT = STM32F429ZITx_FLASH.ld - -# libraries -LIBS = -lc -lm -lnosys -LIBDIR = -LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections - -# default action: build all -all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin - - -####################################### -# build the application -####################################### -# list of objects -OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) -vpath %.c $(sort $(dir $(C_SOURCES))) -# list of ASM program objects -OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) -vpath %.s $(sort $(dir $(ASM_SOURCES))) - -$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) - $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ - -$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) - $(AS) -c $(CFLAGS) $< -o $@ - -$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile - $(CC) $(OBJECTS) $(LDFLAGS) -o $@ - $(SZ) $@ - -$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) - $(HEX) $< $@ - -$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) - $(BIN) $< $@ - -$(BUILD_DIR): - mkdir $@ - -####################################### -# clean up -####################################### -clean: - -rm -fR $(BUILD_DIR) - -####################################### -# dependencies -####################################### --include $(wildcard $(BUILD_DIR)/*.d) - -# *** EOF *** +########################################################################################################################## +# File automatically-generated by tool: [projectgenerator] version: [2.30.0] date: [Mon Oct 15 23:30:01 CEST 2018] +########################################################################################################################## + +# ------------------------------------------------ +# Generic Makefile (based on gcc) +# +# ChangeLog : +# 2017-02-10 - Several enhancements + project update mode +# 2015-07-22 - first version +# ------------------------------------------------ + +###################################### +# target +###################################### +TARGET = RemoteProgrammer + + +###################################### +# building variables +###################################### +# debug build? +DEBUG = 1 +# optimization +OPT = -Og + + +####################################### +# paths +####################################### +# Build path +BUILD_DIR = build + +###################################### +# source +###################################### +# C sources +C_SOURCES = \ +Src/usbh_diskio.c \ +Src/fatfs.c \ +Src/freertos.c \ +Src/usb_host.c \ +Src/usbh_conf.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_hcd.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ +Src/system_stm32f4xx.c \ +Middlewares/Third_Party/FatFs/src/option/syscall.c \ +Middlewares/Third_Party/FatFs/src/diskio.c \ +Middlewares/Third_Party/FatFs/src/ff.c \ +Middlewares/Third_Party/FatFs/src/ff_gen_drv.c \ +Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ +Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \ +Middlewares/Third_Party/FreeRTOS/Source/list.c \ +Middlewares/Third_Party/FreeRTOS/Source/timers.c \ +Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ +Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ +Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ +Middlewares/Third_Party/FreeRTOS/Source/queue.c \ +Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c \ +Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_core.c \ +Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ctlreq.c \ +Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ioreq.c \ +Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_pipes.c \ +Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc.c \ +Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_bot.c \ +Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c \ +Src/syscalls.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c \ +Middlewares/Third_Party/LwIP/src/netif/ethernet.c \ +Middlewares/Third_Party/LwIP/src/netif/slipif.c \ +Middlewares/Third_Party/LwIP/src/netif/lowpan6.c \ +Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c \ +Middlewares/Third_Party/LwIP/src/api/netifapi.c \ +Middlewares/Third_Party/LwIP/src/api/tcpip.c \ +Middlewares/Third_Party/LwIP/src/api/netbuf.c \ +Middlewares/Third_Party/LwIP/src/api/api_msg.c \ +Middlewares/Third_Party/LwIP/src/api/api_lib.c \ +Middlewares/Third_Party/LwIP/src/api/netdb.c \ +Middlewares/Third_Party/LwIP/src/api/sockets.c \ +Middlewares/Third_Party/LwIP/src/api/err.c \ +Middlewares/Third_Party/LwIP/src/core/def.c \ +Middlewares/Third_Party/LwIP/src/core/timeouts.c \ +Middlewares/Third_Party/LwIP/src/core/netif.c \ +Middlewares/Third_Party/LwIP/src/core/sys.c \ +Middlewares/Third_Party/LwIP/src/core/raw.c \ +Middlewares/Third_Party/LwIP/src/core/pbuf.c \ +Middlewares/Third_Party/LwIP/src/core/memp.c \ +Middlewares/Third_Party/LwIP/src/core/tcp.c \ +Middlewares/Third_Party/LwIP/src/core/tcp_in.c \ +Middlewares/Third_Party/LwIP/src/core/init.c \ +Middlewares/Third_Party/LwIP/src/core/mem.c \ +Middlewares/Third_Party/LwIP/src/core/stats.c \ +Middlewares/Third_Party/LwIP/src/core/inet_chksum.c \ +Middlewares/Third_Party/LwIP/src/core/tcp_out.c \ +Middlewares/Third_Party/LwIP/src/core/udp.c \ +Middlewares/Third_Party/LwIP/src/core/dns.c \ +Middlewares/Third_Party/LwIP/src/core/ip.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c \ +Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c \ +Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c \ +Middlewares/Third_Party/LwIP/system/OS/sys_arch.c \ +Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c \ +Src/stm32f4xx_hal_timebase_TIM.c \ +Src/main.c \ +Src/lwip.c \ +Src/ethernetif.c \ +Src/stm32f4xx_it.c \ +Src/stm32f4xx_hal_msp.c \ +Src/communication/dbgu.c \ +Src/communication/term_io.c \ +Src/communication/wakaama_client/wakaama.c + +# ASM sources +ASM_SOURCES = \ +startup_stm32f429xx.s + +####################################### +# Wakaama +###################################### + +WAKAAMA_SOURCES = \ +Middlewares/Third_Party/wakaama/liblwm2m.c \ +Middlewares/Third_Party/wakaama/wakaama_utils.c \ +Middlewares/Third_Party/wakaama/uri.c \ +Middlewares/Third_Party/wakaama/objects.c \ +Middlewares/Third_Party/wakaama/tlv.c \ +Middlewares/Third_Party/wakaama/data.c \ +Middlewares/Third_Party/wakaama/wakaama_list.c \ +Middlewares/Third_Party/wakaama/packet.c \ +Middlewares/Third_Party/wakaama/transaction.c \ +Middlewares/Third_Party/wakaama/registration.c \ +Middlewares/Third_Party/wakaama/bootstrap.c \ +Middlewares/Third_Party/wakaama/management.c \ +Middlewares/Third_Party/wakaama/observe.c \ +Middlewares/Third_Party/wakaama/json.c \ +Middlewares/Third_Party/wakaama/discover.c \ +Middlewares/Third_Party/wakaama/block1.c \ +Middlewares/Third_Party/wakaama/er-coap-13/er-coap-13.c + +WAKAAMA_CUSTOM = \ +Src/communication/wakaama_client/platform/platform.c \ +Src/communication/wakaama_client/connection.c \ +Src/communication/wakaama_client/objects/object_device.c \ +Src/communication/wakaama_client/objects/object_security.c \ +Src/communication/wakaama_client/objects/object_server.c \ +Src/communication/wakaama_client/objects/test_object.c \ +Src/communication/wakaama_client/objects/object_target.c + + +WAKAAMA_INC = \ +-IMiddlewares/Third_Party/wakaama \ +-IMiddlewares/Third_Party/wakaama/er-coap-13 \ + + +WAKAAMA_SYMBOL = -DLWM2M_LITTLE_ENDIAN +WAKAAMA_SYMBOL += -DLWM2M_CLIENT_MODE +#WAKAAMA_SYMBOL += -DLWM2M_MEMORY_TRACE +#WAKAAMA_SYMBOL += -DCOAPLOG # download logs +#WAKAAMA_SYMBOL += -DLWM2M_WITH_LOGS # LOGS + +####################################### +# binaries +####################################### +PREFIX = arm-none-eabi- +# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) +# either it can be added to the PATH environment variable. +ifdef GCC_PATH +CC = $(GCC_PATH)/$(PREFIX)gcc +AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp +CP = $(GCC_PATH)/$(PREFIX)objcopy +SZ = $(GCC_PATH)/$(PREFIX)size +else +CC = $(PREFIX)gcc +AS = $(PREFIX)gcc -x assembler-with-cpp +CP = $(PREFIX)objcopy +SZ = $(PREFIX)size +endif +HEX = $(CP) -O ihex +BIN = $(CP) -O binary -S + +####################################### +# CFLAGS +####################################### +# cpu +CPU = -mcpu=cortex-m4 + +# fpu +FPU = -mfpu=fpv4-sp-d16 + +# float-abi +FLOAT-ABI = -mfloat-abi=hard + +# mcu +MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) + +# macros for gcc +# AS defines +AS_DEFS = + +# C defines +C_DEFS = \ +-DUSE_HAL_DRIVER \ +-DSTM32F429xx + + +# AS includes +AS_INCLUDES = \ +-I/Inc + +# C includes +C_INCLUDES = \ +-IInc \ +-IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \ +-IMiddlewares/ST/STM32_USB_Host_Library/Core/Inc \ +-IMiddlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc \ +-IMiddlewares/Third_Party/FatFs/src \ +-IMiddlewares/Third_Party/FreeRTOS/Source/include \ +-IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS \ +-IMiddlewares/Third_Party/LwIP/src/include \ +-IMiddlewares/Third_Party/LwIP/system \ +-IDrivers/STM32F4xx_HAL_Driver/Inc \ +-IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \ +-IMiddlewares/Third_Party/LwIP/src/include/netif/ppp \ +-IDrivers/CMSIS/Device/ST/STM32F4xx/Include \ +-IMiddlewares/Third_Party/LwIP/src/include/lwip \ +-IMiddlewares/Third_Party/LwIP/src/include/lwip/apps \ +-IMiddlewares/Third_Party/LwIP/src/include/lwip/priv \ +-IMiddlewares/Third_Party/LwIP/src/include/lwip/prot \ +-IMiddlewares/Third_Party/LwIP/src/include/netif \ +-IMiddlewares/Third_Party/LwIP/src/include/posix \ +-IMiddlewares/Third_Party/LwIP/src/include/posix/sys \ +-IMiddlewares/Third_Party/LwIP/system/arch \ +-IDrivers/CMSIS/Include \ +-IInc/communication \ +-IInc/communication/wakaama_client \ +-IInc/communication/wakaama_client/objects \ +-Iconfig + +C_INCLUDES += $(WAKAAMA_INC) + +C_SOURCES += $(WAKAAMA_SOURCES) $(WAKAAMA_CUSTOM) + +# compile gcc flags +ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) $(WAKAAMA_SYMBOL) -Wall -fdata-sections -ffunction-sections + +ifeq ($(DEBUG), 1) +CFLAGS += -g -gdwarf-2 +endif + + +# Generate dependency information +CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" + + +####################################### +# LDFLAGS +####################################### +# link script +LDSCRIPT = STM32F429ZITx_FLASH.ld + +# libraries +LIBS = -lc -lm -lnosys +LIBDIR = +LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections + +# default action: build all +all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + + +####################################### +# build the application +####################################### +# list of objects +OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +vpath %.c $(sort $(dir $(C_SOURCES))) +# list of ASM program objects +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) +vpath %.s $(sort $(dir $(ASM_SOURCES))) + +$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) + $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ + +$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) + $(AS) -c $(CFLAGS) $< -o $@ + +$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + $(SZ) $@ + +$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(HEX) $< $@ + +$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(BIN) $< $@ + +$(BUILD_DIR): + mkdir $@ + +program: all + openocd -f board/st_nucleo_f4.cfg -c "program build/RemoteProgrammer.elf verify reset exit" + +st-flash: all + st-flash write build/RemoteProgrammer.bin 0x8000000 + +debug: + arm-none-eabi-gdb ./build/RemoteProgrammer.elf + +####################################### +# clean up +####################################### +clean: + -rm -fR $(BUILD_DIR) + +####################################### +# dependencies +####################################### +-include $(wildcard $(BUILD_DIR)/*.d) + +# *** EOF *** diff --git a/README.md b/README.md index f0aa7d5..75e6c9e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ # RemoteProgrammer Remote programming and reconfiguration system with LWM2M for embedded devices + +## Installation + +## Usage +### LwM2M server +To be able to use Remote Programmer you need a lwm2m server, we recommend using leshan with our custom object. To run this type: +``` bash +$ wget https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-server-demo.jar +$ wget https://gist.githubusercontent.com/maxiwoj/a60b566fd7fa6aec3a6e28f50640e631/raw/a469815cf9a6c54ae28a070bd017b51d5e696223/31025.xml +$ java -jar ./leshan-server-demo.jar -m . +``` +This will download a demo leshan server and our custom model definition. The flag -m specifies custom models directory location. \ No newline at end of file diff --git a/Src/communication/wakaama_client/objects/object_target.c b/Src/communication/wakaama_client/objects/object_target.c new file mode 100644 index 0000000..c961a63 --- /dev/null +++ b/Src/communication/wakaama_client/objects/object_target.c @@ -0,0 +1,394 @@ +/* + * Implements an object for targeting purpose + * + * Multiple + * Object | ID | Instances | Mandatory | + * target | 31025 | Yes | No | + * + * Resources: + * Supported Multiple + * Name | ID | Operations | Instances | Mandatory | Type | Range | Units | Description | + * target_type | 1 | R/W | No | Yes | | | | | + * firmware_url | 2 | R/W | No | Yes | string | | | | + * download_state | 3 | R | No | Yes | integer | 0-255 | | | + * firmware_version| 4 | R | No | Yes | integer | | | | + * flash_target | 5 | E | No | Yes | | | | | + * reset_target | 6 | E | No | Yes | | | | | + * + */ + +#include "liblwm2m.h" + +#include +#include +#include +#include +#include +#include "object_target.h" + +static void prv_output_buffer(uint8_t * buffer, + int length) +{ + int i; + uint8_t array[16]; + + i = 0; + while (i < length) + { + int j; + fprintf(stderr, " "); + + memcpy(array, buffer+i, 16); + + for (j = 0 ; j < 16 && i+j < length; j++) + { + fprintf(stderr, "%02X ", array[j]); + } + while (j < 16) + { + fprintf(stderr, " "); + j++; + } + fprintf(stderr, " "); + for (j = 0 ; j < 16 && i+j < length; j++) + { + if (isprint(array[j])) + fprintf(stderr, "%c ", array[j]); + else + fprintf(stderr, ". "); + } + fprintf(stderr, "\n"); + + i += 16; + } +} + +/* + * Multiple instance objects can use userdata to store data that will be shared between the different instances. + * The lwm2m_object_t object structure - which represent every object of the liblwm2m as seen in the single instance + * object - contain a chained list called instanceList with the object specific structure target_instance_t: + */ +typedef struct _target_instance_ +{ + /* + * The first two are mandatories and represent the pointer to the next instance and the ID of this one. The rest + * is the instance scope user data (uint8_t target in this case) + */ + struct _target_instance_ * next; // matches lwm2m_list_t::next + uint16_t shortID; // matches lwm2m_list_t::id + + uint8_t flash_state; + uint32_t * target_type; + char * firmware_url; + uint8_t download_state; + uint32_t firmware_version; +} target_instance_t; + +static uint8_t target_read(uint16_t instanceId, + int * numDataP, + lwm2m_data_t ** dataArrayP, + lwm2m_object_t * objectP) +{ + target_instance_t * targetP; + int i; + + targetP = (target_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); + if (NULL == targetP) return COAP_404_NOT_FOUND; + + if (*numDataP == 0) + { + *dataArrayP = lwm2m_data_new(4); + if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; + *numDataP = 4; + (*dataArrayP)[0].id = 1; + (*dataArrayP)[1].id = 2; + (*dataArrayP)[2].id = 3; + (*dataArrayP)[3].id = 4; + (*dataArrayP)[4].id = 6; + } + + for (i = 0 ; i < *numDataP ; i++) + { + switch ((*dataArrayP)[i].id) + { + case 1: + lwm2m_data_encode_int(targetP->target_type, *dataArrayP + i); + break; + case 2: + lwm2m_data_encode_string(targetP->firmware_url, *dataArrayP + i); + break; + case 3: + lwm2m_data_encode_int(targetP->download_state, *dataArrayP + i); + break; + case 4: + lwm2m_data_encode_int(targetP->firmware_version, *dataArrayP + i); + break; + case 5: + return COAP_405_METHOD_NOT_ALLOWED; + case 6: + lwm2m_data_encode_int(targetP->flash_state, *dataArrayP + i); + break; + case 7: + return COAP_405_METHOD_NOT_ALLOWED; + default: + return COAP_404_NOT_FOUND; + } + } + + return COAP_205_CONTENT; +} + +static uint8_t target_discover(uint16_t instanceId, + int * numDataP, + lwm2m_data_t ** dataArrayP, + lwm2m_object_t * objectP) +{ + int i; + + // is the server asking for the full object ? + if (*numDataP == 0) + { + *dataArrayP = lwm2m_data_new(6); + if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; + *numDataP = 4; + (*dataArrayP)[0].id = 1; + (*dataArrayP)[1].id = 2; + (*dataArrayP)[2].id = 3; + (*dataArrayP)[3].id = 4; + (*dataArrayP)[4].id = 5; + (*dataArrayP)[5].id = 6; + (*dataArrayP)[6].id = 7; + } + else + { + for (i = 0; i < *numDataP; i++) + { + switch ((*dataArrayP)[i].id) + { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + break; + default: + return COAP_404_NOT_FOUND; + } + } + } + return COAP_205_CONTENT; +} + +static uint8_t target_write(uint16_t instanceId, + int numData, + lwm2m_data_t * dataArray, + lwm2m_object_t * objectP) +{ + target_instance_t * targetP; + int i; + + targetP = (target_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); + if (NULL == targetP) return COAP_404_NOT_FOUND; + + for (i = 0 ; i < numData ; i++) + { + switch (dataArray[i].id) + { + case 1: + return COAP_405_METHOD_NOT_ALLOWED; + /* we do not support writing the target_type yet + { + int64_t value; + + if (1 != lwm2m_data_decode_int(dataArray + i, &value)) + { + return COAP_400_BAD_REQUEST; + } + targetP->target_type = (uint32_t) value; + } + break;*/ + case 2: + { + if (!dataArray[i].type == LWM2M_TYPE_STRING && !dataArray[i].type == LWM2M_TYPE_OPAQUE) { + return COAP_400_BAD_REQUEST; + } + if (targetP->firmware_url != NULL) { + lwm2m_free(targetP->firmware_url); + } + targetP->firmware_url = lwm2m_strdup((char*)dataArray[i].value.asBuffer.buffer); + targetP->firmware_version = lwm2m_gettime(); + targetP->download_state = DOWNLOAD_IN_PROGRESS; + // TODO: Start Downloading and add callback to set downloadCOMPLETED + } + break; + case 3: + return COAP_405_METHOD_NOT_ALLOWED; + case 4: + return COAP_405_METHOD_NOT_ALLOWED; + case 5: + return COAP_405_METHOD_NOT_ALLOWED; + case 6: + return COAP_405_METHOD_NOT_ALLOWED; + case 7: + return COAP_405_METHOD_NOT_ALLOWED; + default: + return COAP_404_NOT_FOUND; + } + } + + return COAP_204_CHANGED; +} + +static uint8_t target_delete(uint16_t id, + lwm2m_object_t * objectP) +{ + target_instance_t * targetP; + + objectP->instanceList = lwm2m_list_remove(objectP->instanceList, id, (lwm2m_list_t **)&targetP); + if (NULL == targetP) return COAP_404_NOT_FOUND; + + lwm2m_free(targetP); + + return COAP_202_DELETED; +} + +static uint8_t target_create(uint16_t instanceId, + int numData, + lwm2m_data_t * dataArray, + lwm2m_object_t * objectP) +{ + target_instance_t * targetP; + uint8_t result; + + + targetP = (target_instance_t *)lwm2m_malloc(sizeof(target_instance_t)); + if (NULL == targetP) return COAP_500_INTERNAL_SERVER_ERROR; + memset(targetP, 0, sizeof(target_instance_t)); + + targetP->shortID = instanceId; + objectP->instanceList = LWM2M_LIST_ADD(objectP->instanceList, targetP); + + result = target_write(instanceId, numData, dataArray, objectP); + + if (result != COAP_204_CHANGED) + { + (void)target_delete(instanceId, objectP); + } + else + { + result = COAP_201_CREATED; + } + + return result; +} + +static uint8_t target_exec(uint16_t instanceId, + uint16_t resourceId, + uint8_t * buffer, + int length, + lwm2m_object_t * objectP) +{ + target_instance_t * targetP; + + targetP = (target_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); + if (NULL == targetP) return COAP_404_NOT_FOUND; + + + switch (resourceId) + { + case 1: + return COAP_405_METHOD_NOT_ALLOWED; + case 2: + return COAP_405_METHOD_NOT_ALLOWED; + case 3: + return COAP_405_METHOD_NOT_ALLOWED; + case 4: + return COAP_405_METHOD_NOT_ALLOWED; + case 5: + if (targetP->download_state != DOWNLOAD_COMPLETED) { + return COAP_412_PRECONDITION_FAILED; + } + fprintf(stdout, "\r\n-----------------\r\n" + "Execute flash_target on %hu/%d/%d\r\n" + " Parameter (%d bytes):\r\n", + objectP->objID, instanceId, resourceId, length); + prv_output_buffer((uint8_t*)buffer, length); + fprintf(stdout, "-----------------\r\n\r\n"); + +// TODO: FLASH TARGET AND Update flash progress + return COAP_204_CHANGED; + case 6: + return COAP_405_METHOD_NOT_ALLOWED; + case 7: + if (targetP->flash_state != 100 && targetP->flash_state != 0) { + return COAP_503_SERVICE_UNAVAILABLE; + } + fprintf(stdout, "\r\n-----------------\r\n" + "Execute reset_target on %hu/%d/%d\r\n" + " Parameter (%d bytes):\r\n", + objectP->objID, instanceId, resourceId, length); + prv_output_buffer((uint8_t*)buffer, length); + fprintf(stdout, "-----------------\r\n\r\n"); +// TODO: RESET TARGET + return COAP_204_CHANGED; + default: + return COAP_404_NOT_FOUND; + } +} + +lwm2m_object_t * get_target_object(void) +{ + lwm2m_object_t * targetObj; + + targetObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t)); + + if (NULL != targetObj) + { + int i; + target_instance_t * targetP; + + memset(targetObj, 0, sizeof(lwm2m_object_t)); + + targetObj->objID = 31025; + + targetP = (target_instance_t *)lwm2m_malloc(sizeof(target_instance_t)); + if (NULL == targetP) return NULL; + memset(targetP, 0, sizeof(target_instance_t)); + targetP->shortID = 1; + targetP->target_type = 3124; + targetP->firmware_url = NULL; + targetP->download_state = NO_DOWNLOAD_DATA; + targetP->firmware_version = 0; + targetP->flash_state = 0; + + targetObj->instanceList = LWM2M_LIST_ADD(targetObj->instanceList, targetP); + /* + * From a single instance object, two more functions are available. + * - The first one (createFunc) create a new instance and filled it with the provided informations. If an ID is + * provided a check is done for verifying his disponibility, or a new one is generated. + * - The other one (deleteFunc) delete an instance by removing it from the instance list (and freeing the memory + * allocated to it) + */ + targetObj->readFunc = target_read; + targetObj->writeFunc = target_write; + targetObj->executeFunc = target_exec; + targetObj->createFunc = target_create; + targetObj->deleteFunc = target_delete; + targetObj->discoverFunc = target_discover; + } + + return targetObj; +} + +void free_target_object(lwm2m_object_t * object) +{ + LWM2M_LIST_FREE(object->instanceList); + if (object->userData != NULL) + { + lwm2m_free(object->userData); + object->userData = NULL; + } + lwm2m_free(object); +} diff --git a/Src/communication/wakaama_client/wakaama.c b/Src/communication/wakaama_client/wakaama.c index 5759d14..2d52593 100644 --- a/Src/communication/wakaama_client/wakaama.c +++ b/Src/communication/wakaama_client/wakaama.c @@ -89,6 +89,16 @@ void taskWakaama(void *socket) { } printf("TestObject Created\n"); + if (objArray[4] == NULL) { + objArray[4] = get_target_object(); + } + if (NULL == objArray[4]) { + printf("Failed to create Target object\r\n"); + result = -5; + continue; + } + printf("TargetObject Created\n"); + // init context lwm2mContext = lwm2m_init(&data); if (NULL == lwm2mContext) { @@ -197,6 +207,7 @@ void taskWakaama(void *socket) { clean_server_object(objArray[1]); free_object_device(objArray[2]); free_test_object(objArray[3]); + free_target_object(objArray[4]); fprintf(stdout, "\n\t RESET\r\n"); q_reset = 0; NVIC_SystemReset(); // we assume we never end wakaama unless we want to restart From 28cef3da99e6d6992c4b7dae064d22916311eaa3 Mon Sep 17 00:00:00 2001 From: Maksymilian Wojczuk Date: Sun, 4 Nov 2018 09:45:09 +0100 Subject: [PATCH 2/2] Target Object Updated object description --- .../wakaama_client/objects/object_target.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Src/communication/wakaama_client/objects/object_target.c b/Src/communication/wakaama_client/objects/object_target.c index c961a63..9f33907 100644 --- a/Src/communication/wakaama_client/objects/object_target.c +++ b/Src/communication/wakaama_client/objects/object_target.c @@ -2,18 +2,20 @@ * Implements an object for targeting purpose * * Multiple - * Object | ID | Instances | Mandatory | + * Object | ID | Instances | Mandatory | * target | 31025 | Yes | No | * * Resources: * Supported Multiple - * Name | ID | Operations | Instances | Mandatory | Type | Range | Units | Description | - * target_type | 1 | R/W | No | Yes | | | | | - * firmware_url | 2 | R/W | No | Yes | string | | | | - * download_state | 3 | R | No | Yes | integer | 0-255 | | | - * firmware_version| 4 | R | No | Yes | integer | | | | - * flash_target | 5 | E | No | Yes | | | | | - * reset_target | 6 | E | No | Yes | | | | | + * Name | ID | Operations | Instances | Mandatory | Type | Range | Units | Description | + * -----------------|----|------------|-----------|-----------|---------|-------|-------|-------------------------------| + * target_type | 1 | R/W | No | Yes | | | | type of the programmable board| + * firmware_url | 2 | R/W | No | Yes | string | | | url to the binary | + * download_state | 3 | R | No | Yes | integer | 0-255 | | state of the download | + * firmware_version| 4 | R | No | Yes | integer | | | timestamp of the latest binary| + * flash_target | 5 | E | No | Yes | | | | programms the target | + * flash_state | 6 | R | No | Yes | integer | 0-100 | % | progress of flashing the board| + * reset_target | 7 | E | No | Yes | | | | resets the target | * */