From 187d82b34aaf505101b908bc91e70bc5b070041a Mon Sep 17 00:00:00 2001 From: DC Date: Sun, 5 Feb 2023 11:14:07 -0800 Subject: [PATCH 01/20] Preliminary version of current measurement in ADCS v1.2 working --- boards/ORESAT_ADCS_V1_2/board.c | 267 + boards/ORESAT_ADCS_V1_2/board.h | 973 ++++ boards/ORESAT_ADCS_V1_2/board.mk | 9 + boards/ORESAT_ADCS_V1_2/oocd.cfg | 9 + common/bmi088.c | 30 + common/include/bmi088.h | 1 + common/include/ltc4305.h | 10 + common/include/mmc5883ma.h | 28 +- common/ltc4305.c | 27 + common/ltc4305.mk | 9 + common/mmc5883ma.c | 298 +- src/f0/app_adcs/Makefile | 217 + src/f0/app_adcs/README.md | 12 + src/f0/app_adcs/cfg/CO_driver_custom.h | 13 + src/f0/app_adcs/cfg/chconf.h | 763 +++ src/f0/app_adcs/cfg/halconf.h | 531 ++ src/f0/app_adcs/cfg/mcuconf.h | 251 + src/f0/app_adcs/main.c | 75 + src/f0/app_adcs/source/ObjDict/OD.c | 4372 +++++++++++++++ src/f0/app_adcs/source/ObjDict/OD.h | 1058 ++++ src/f0/app_adcs/source/ObjDict/app.eds | 5846 ++++++++++++++++++++ src/f0/app_adcs/source/ObjDict/app.xdd | 7005 ++++++++++++++++++++++++ src/f0/app_adcs/source/README.md | 5 + src/f0/app_adcs/source/adcs.c | 701 +++ src/f0/app_adcs/source/adcs.h | 10 + src/f0/app_adcs/source/blink.c | 18 + src/f0/app_adcs/source/blink.h | 11 + 27 files changed, 22333 insertions(+), 216 deletions(-) create mode 100644 boards/ORESAT_ADCS_V1_2/board.c create mode 100644 boards/ORESAT_ADCS_V1_2/board.h create mode 100644 boards/ORESAT_ADCS_V1_2/board.mk create mode 100644 boards/ORESAT_ADCS_V1_2/oocd.cfg create mode 100644 common/include/ltc4305.h create mode 100644 common/ltc4305.c create mode 100644 common/ltc4305.mk create mode 100644 src/f0/app_adcs/Makefile create mode 100644 src/f0/app_adcs/README.md create mode 100644 src/f0/app_adcs/cfg/CO_driver_custom.h create mode 100644 src/f0/app_adcs/cfg/chconf.h create mode 100644 src/f0/app_adcs/cfg/halconf.h create mode 100644 src/f0/app_adcs/cfg/mcuconf.h create mode 100644 src/f0/app_adcs/main.c create mode 100644 src/f0/app_adcs/source/ObjDict/OD.c create mode 100644 src/f0/app_adcs/source/ObjDict/OD.h create mode 100644 src/f0/app_adcs/source/ObjDict/app.eds create mode 100644 src/f0/app_adcs/source/ObjDict/app.xdd create mode 100644 src/f0/app_adcs/source/README.md create mode 100644 src/f0/app_adcs/source/adcs.c create mode 100644 src/f0/app_adcs/source/adcs.h create mode 100644 src/f0/app_adcs/source/blink.c create mode 100644 src/f0/app_adcs/source/blink.h diff --git a/boards/ORESAT_ADCS_V1_2/board.c b/boards/ORESAT_ADCS_V1_2/board.c new file mode 100644 index 00000000..e9075159 --- /dev/null +++ b/boards/ORESAT_ADCS_V1_2/board.c @@ -0,0 +1,267 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#include "hal.h" +#include "stm32_gpio.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/** + * @brief Type of STM32 GPIO port setup. + */ +typedef struct { + uint32_t moder; + uint32_t otyper; + uint32_t ospeedr; + uint32_t pupdr; + uint32_t odr; + uint32_t afrl; + uint32_t afrh; +} gpio_setup_t; + +/** + * @brief Type of STM32 GPIO initialization data. + */ +typedef struct { +#if STM32_HAS_GPIOA || defined(__DOXYGEN__) + gpio_setup_t PAData; +#endif +#if STM32_HAS_GPIOB || defined(__DOXYGEN__) + gpio_setup_t PBData; +#endif +#if STM32_HAS_GPIOC || defined(__DOXYGEN__) + gpio_setup_t PCData; +#endif +#if STM32_HAS_GPIOD || defined(__DOXYGEN__) + gpio_setup_t PDData; +#endif +#if STM32_HAS_GPIOE || defined(__DOXYGEN__) + gpio_setup_t PEData; +#endif +#if STM32_HAS_GPIOF || defined(__DOXYGEN__) + gpio_setup_t PFData; +#endif +#if STM32_HAS_GPIOG || defined(__DOXYGEN__) + gpio_setup_t PGData; +#endif +#if STM32_HAS_GPIOH || defined(__DOXYGEN__) + gpio_setup_t PHData; +#endif +#if STM32_HAS_GPIOI || defined(__DOXYGEN__) + gpio_setup_t PIData; +#endif +#if STM32_HAS_GPIOJ || defined(__DOXYGEN__) + gpio_setup_t PJData; +#endif +#if STM32_HAS_GPIOK || defined(__DOXYGEN__) + gpio_setup_t PKData; +#endif +} gpio_config_t; + +/** + * @brief STM32 GPIO static initialization data. + */ +static const gpio_config_t gpio_default_config = { +#if STM32_HAS_GPIOA + {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, + VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, +#endif +#if STM32_HAS_GPIOB + {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, + VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, +#endif +#if STM32_HAS_GPIOC + {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, + VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, +#endif +#if STM32_HAS_GPIOD + {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, + VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, +#endif +#if STM32_HAS_GPIOE + {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, + VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH}, +#endif +#if STM32_HAS_GPIOF + {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, + VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH}, +#endif +#if STM32_HAS_GPIOG + {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, + VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH}, +#endif +#if STM32_HAS_GPIOH + {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, + VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH}, +#endif +#if STM32_HAS_GPIOI + {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, + VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}, +#endif +#if STM32_HAS_GPIOJ + {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, + VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH}, +#endif +#if STM32_HAS_GPIOK + {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, + VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH} +#endif +}; + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) { + + gpiop->OTYPER = config->otyper; + gpiop->OSPEEDR = config->ospeedr; + gpiop->PUPDR = config->pupdr; + gpiop->ODR = config->odr; + gpiop->AFRL = config->afrl; + gpiop->AFRH = config->afrh; + gpiop->MODER = config->moder; +} + +static void stm32_gpio_init(void) { + + /* Enabling GPIO-related clocks, the mask comes from the + registry header file.*/ + rccResetAHB(STM32_GPIO_EN_MASK); + rccEnableAHB(STM32_GPIO_EN_MASK, true); + + /* Initializing all the defined GPIO ports.*/ +#if STM32_HAS_GPIOA + gpio_init(GPIOA, &gpio_default_config.PAData); +#endif +#if STM32_HAS_GPIOB + gpio_init(GPIOB, &gpio_default_config.PBData); +#endif +#if STM32_HAS_GPIOC + gpio_init(GPIOC, &gpio_default_config.PCData); +#endif +#if STM32_HAS_GPIOD + gpio_init(GPIOD, &gpio_default_config.PDData); +#endif +#if STM32_HAS_GPIOE + gpio_init(GPIOE, &gpio_default_config.PEData); +#endif +#if STM32_HAS_GPIOF + gpio_init(GPIOF, &gpio_default_config.PFData); +#endif +#if STM32_HAS_GPIOG + gpio_init(GPIOG, &gpio_default_config.PGData); +#endif +#if STM32_HAS_GPIOH + gpio_init(GPIOH, &gpio_default_config.PHData); +#endif +#if STM32_HAS_GPIOI + gpio_init(GPIOI, &gpio_default_config.PIData); +#endif +#if STM32_HAS_GPIOJ + gpio_init(GPIOJ, &gpio_default_config.PJData); +#endif +#if STM32_HAS_GPIOK + gpio_init(GPIOK, &gpio_default_config.PKData); +#endif +} + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Early initialization code. + * @details GPIO ports and system clocks are initialized before everything + * else. + */ +void __early_init(void) { + + stm32_gpio_init(); + stm32_clock_init(); + rccEnableCRC(true); +} + +#if HAL_USE_SDC || defined(__DOXYGEN__) +/** + * @brief SDC card detection. + */ +bool sdc_lld_is_card_inserted(SDCDriver *sdcp) { + + (void)sdcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief SDC card write protection detection. + */ +bool sdc_lld_is_write_protected(SDCDriver *sdcp) { + + (void)sdcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif /* HAL_USE_SDC */ + +#if HAL_USE_MMC_SPI || defined(__DOXYGEN__) +/** + * @brief MMC_SPI card detection. + */ +bool mmc_lld_is_card_inserted(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief MMC_SPI card write protection detection. + */ +bool mmc_lld_is_write_protected(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif + +/** + * @brief Board-specific initialization code. + * @todo Add your board-specific code, if any. + */ +void boardInit(void) { + +} diff --git a/boards/ORESAT_ADCS_V1_2/board.h b/boards/ORESAT_ADCS_V1_2/board.h new file mode 100644 index 00000000..c793bd88 --- /dev/null +++ b/boards/ORESAT_ADCS_V1_2/board.h @@ -0,0 +1,973 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#ifndef BOARD_H +#define BOARD_H + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/* + * OreSat ACS V4 Board Configuration + * PART: STM32F091CC + * PACKAGE: LQFP32 + */ + +/* + * Board identifier. + */ +#define BOARD_ORESAT_ACS_V4 +#define BOARD_NAME "OreSat ACS v4.x" + +/* + * Board oscillators-related settings. + * NOTE: LSE not fitted. + */ +#if !defined(STM32_LSECLK) +#define STM32_LSECLK 0U +#endif + +#define STM32_LSEDRV (3U << 3U) + +#if !defined(STM32_HSECLK) +#define STM32_HSECLK 16000000U +#endif + +/* + * MCU type as defined in the ST header. + */ +#define STM32F091xC + +/* + * IO pins assignments. + */ +#define GPIOA_LED 0U +#define GPIOA_MT_STBY_RST 1U +#define GPIOA_USART2_TX 2U +#define GPIOA_USART2_RX 3U +#define GPIOA_MT_ILIM 4U +#define GPIOA_MT_X_ISENSE 5U +#define GPIOA_MT_Y_ISENSE 6U +#define GPIOA_MT_Z_ISENSE 7U +#define GPIOA_POUTPROT 8U +#define GPIOA_CAN_SILENT 9U +#define GPIOA_CAN_SHDN 10U +#define GPIOA_CAN_RX 11U +#define GPIOA_CAN_TX 12U +#define GPIOA_SWDIO 13U +#define GPIOA_SWCLK 14U +#define GPIOA_PIN15 15U + +#define GPIOB_MT_Z_PHASE 0U +#define GPIOB_IMU_INT2 1U +#define GPIOB_MT_Y_PHASE 2U +#define GPIOB_MAG_N_FAULT 3U +#define GPIOB_MAG_N_EN 4U +#define GPIOB_MAG_READY 5U +#define GPIOB_I2C1_SCL 6U +#define GPIOB_I2C1_SDA 7U +#define GPIOB_MT_EN 8U +#define GPIOB_IMU_INT4 9U +#define GPIOB_IMU_INT3 10U +#define GPIOB_MT_X_PHASE 11U +#define GPIOB_IMU_INT1 12U +#define GPIOB_MT_X_PWM 13U +#define GPIOB_MT_Y_PWM 14U +#define GPIOB_MT_Z_PWM 15U + +//#define GPIOB_IMU_INT2 13U +//#define GPIOB_IMU_INT4 14U +//#define GPIOB_IMU_INT3 15U + +#define GPIOC_PIN0 0U +#define GPIOC_PIN1 1U +#define GPIOC_PIN2 2U +#define GPIOC_PIN3 3U +#define GPIOC_PIN4 4U +#define GPIOC_PIN5 5U +#define GPIOC_PIN6 6U +#define GPIOC_PIN7 7U +#define GPIOC_PIN8 8U +#define GPIOC_PIN9 9U +#define GPIOC_PIN10 10U +#define GPIOC_PIN11 11U +#define GPIOC_PIN12 12U +#define GPIOC_PIN13 13U +#define GPIOC_PIN14 14U +#define GPIOC_PIN15 15U + +#define GPIOD_PIN0 0U +#define GPIOD_PIN1 1U +#define GPIOD_PIN2 2U +#define GPIOD_PIN3 3U +#define GPIOD_PIN4 4U +#define GPIOD_PIN5 5U +#define GPIOD_PIN6 6U +#define GPIOD_PIN7 7U +#define GPIOD_PIN8 8U +#define GPIOD_PIN9 9U +#define GPIOD_PIN10 10U +#define GPIOD_PIN11 11U +#define GPIOD_PIN12 12U +#define GPIOD_PIN13 13U +#define GPIOD_PIN14 14U +#define GPIOD_PIN15 15U + +#define GPIOE_PIN0 0U +#define GPIOE_PIN1 1U +#define GPIOE_PIN2 2U +#define GPIOE_PIN3 3U +#define GPIOE_PIN4 4U +#define GPIOE_PIN5 5U +#define GPIOE_PIN6 6U +#define GPIOE_PIN7 7U +#define GPIOE_PIN8 8U +#define GPIOE_PIN9 9U +#define GPIOE_PIN10 10U +#define GPIOE_PIN11 11U +#define GPIOE_PIN12 12U +#define GPIOE_PIN13 13U +#define GPIOE_PIN14 14U +#define GPIOE_PIN15 15U + +#define GPIOF_OSC_IN 0U +#define GPIOF_OSC_OUT 1U +#define GPIOF_PIN2 2U +#define GPIOF_PIN3 3U +#define GPIOF_PIN4 4U +#define GPIOF_PIN5 5U +#define GPIOF_PIN6 6U +#define GPIOF_PIN7 7U +#define GPIOF_PIN8 8U +#define GPIOF_PIN9 9U +#define GPIOF_PIN10 10U +#define GPIOF_BOOT0 11U +#define GPIOF_PIN12 12U +#define GPIOF_PIN13 13U +#define GPIOF_PIN14 14U +#define GPIOF_PIN15 15U + +#define GPIOG_PIN0 0U +#define GPIOG_PIN1 1U +#define GPIOG_PIN2 2U +#define GPIOG_PIN3 3U +#define GPIOG_PIN4 4U +#define GPIOG_PIN5 5U +#define GPIOG_PIN6 6U +#define GPIOG_PIN7 7U +#define GPIOG_PIN8 8U +#define GPIOG_PIN9 9U +#define GPIOG_PIN10 10U +#define GPIOG_PIN11 11U +#define GPIOG_PIN12 12U +#define GPIOG_PIN13 13U +#define GPIOG_PIN14 14U +#define GPIOG_PIN15 15U + +#define GPIOH_PIN0 0U +#define GPIOH_PIN1 1U +#define GPIOH_PIN2 2U +#define GPIOH_PIN3 3U +#define GPIOH_PIN4 4U +#define GPIOH_PIN5 5U +#define GPIOH_PIN6 6U +#define GPIOH_PIN7 7U +#define GPIOH_PIN8 8U +#define GPIOH_PIN9 9U +#define GPIOH_PIN10 10U +#define GPIOH_PIN11 11U +#define GPIOH_PIN12 12U +#define GPIOH_PIN13 13U +#define GPIOH_PIN14 14U +#define GPIOH_PIN15 15U + +/* + * IO lines assignments. + */ +#define LINE_LED PAL_LINE(GPIOA, 0U) +#define LINE_CAN_SILENT PAL_LINE(GPIOA, 9U) +#define LINE_CAN_SHDN PAL_LINE(GPIOA, 10U) +#define LINE_MAG_FAULT PAL_LINE(GPIOB, 3U) +#define LINE_MAG_EN PAL_LINE(GPIOB, 4U) +#define LINE_MAG_READY PAL_LINE(GPIOB, 5U) +#define LINE_IMU_INT1 PAL_LINE(GPIOB, 12U) +#define LINE_IMU_INT2 PAL_LINE(GPIOB, 13U) +#define LINE_IMU_INT4 PAL_LINE(GPIOB, 14U) +#define LINE_IMU_INT3 PAL_LINE(GPIOB, 15U) + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * Please refer to the STM32 Reference Manual for details. + */ +#define PIN_MODE_INPUT(n) (0U << ((n) * 2U)) +#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U)) +#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U)) +#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U)) +#define PIN_ODR_LOW(n) (0U << (n)) +#define PIN_ODR_HIGH(n) (1U << (n)) +#define PIN_OTYPE_PUSHPULL(n) (0U << (n)) +#define PIN_OTYPE_OPENDRAIN(n) (1U << (n)) +#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U)) +#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U)) +#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U)) +#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U)) +#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U)) +#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U)) +#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U)) +#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U)) + +/* + * GPIOA setup: + * + * PA0 - LED (output pushpull). + * PA1 - PIN1 (analog). + * PA2 - USART2_TX (alternate 1). + * PA3 - USART2_RX (alternate 1). + * PA4 - PIN4 (analog). + * PA5 - PIN5 (analog). + * PA6 - PIN6 (analog). + * PA7 - PIN7 (analog). + * PA8 - POUTPROT (analog). + * PA9 - CAN_SILENT (output pulldown). + * PA10 - CAN_SHDN (output pulldown). + * PA11 - CAN_RX (alternate 4). + * PA12 - CAN_TX (alternate 4). + * PA13 - SWDIO (alternate 0). + * PA14 - SWCLK (alternate 0). + * PA15 - PIN15 (analog). + */ +#define VAL_GPIOA_MODER (PIN_MODE_OUTPUT(GPIOA_LED) | \ + PIN_MODE_OUTPUT(GPIOA_MT_STBY_RST) | \ + PIN_MODE_ALTERNATE(GPIOA_USART2_TX) | \ + PIN_MODE_ALTERNATE(GPIOA_USART2_RX) | \ + PIN_MODE_ANALOG(GPIOA_MT_ILIM) | \ + PIN_MODE_ANALOG(GPIOA_MT_X_ISENSE) | \ + PIN_MODE_ANALOG(GPIOA_MT_Y_ISENSE) | \ + PIN_MODE_ANALOG(GPIOA_MT_Z_ISENSE) | \ + PIN_MODE_ANALOG(GPIOA_POUTPROT) | \ + PIN_MODE_OUTPUT(GPIOA_CAN_SILENT) | \ + PIN_MODE_OUTPUT(GPIOA_CAN_SHDN) | \ + PIN_MODE_ALTERNATE(GPIOA_CAN_RX) | \ + PIN_MODE_ALTERNATE(GPIOA_CAN_TX) | \ + PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \ + PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \ + PIN_MODE_ANALOG(GPIOA_PIN15)) +#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_LED) | \ + PIN_OTYPE_PUSHPULL(GPIOA_MT_STBY_RST) | \ + PIN_OTYPE_PUSHPULL(GPIOA_USART2_TX) | \ + PIN_OTYPE_PUSHPULL(GPIOA_USART2_RX) | \ + PIN_OTYPE_PUSHPULL(GPIOA_MT_ILIM) | \ + PIN_OTYPE_PUSHPULL(GPIOA_MT_X_ISENSE) | \ + PIN_OTYPE_PUSHPULL(GPIOA_MT_Y_ISENSE) | \ + PIN_OTYPE_PUSHPULL(GPIOA_MT_Z_ISENSE) | \ + PIN_OTYPE_PUSHPULL(GPIOA_POUTPROT) | \ + PIN_OTYPE_PUSHPULL(GPIOA_CAN_SILENT) | \ + PIN_OTYPE_PUSHPULL(GPIOA_CAN_SHDN) | \ + PIN_OTYPE_PUSHPULL(GPIOA_CAN_RX) | \ + PIN_OTYPE_PUSHPULL(GPIOA_CAN_TX) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \ + PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \ + PIN_OTYPE_PUSHPULL(GPIOA_PIN15)) +#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_HIGH(GPIOA_LED) | \ + PIN_OSPEED_HIGH(GPIOA_MT_STBY_RST) | \ + PIN_OSPEED_HIGH(GPIOA_USART2_TX) | \ + PIN_OSPEED_HIGH(GPIOA_USART2_RX) | \ + PIN_OSPEED_HIGH(GPIOA_MT_ILIM) | \ + PIN_OSPEED_HIGH(GPIOA_MT_X_ISENSE) | \ + PIN_OSPEED_HIGH(GPIOA_MT_Y_ISENSE) | \ + PIN_OSPEED_HIGH(GPIOA_MT_Z_ISENSE) | \ + PIN_OSPEED_HIGH(GPIOA_POUTPROT) | \ + PIN_OSPEED_HIGH(GPIOA_CAN_SILENT) | \ + PIN_OSPEED_HIGH(GPIOA_CAN_SHDN) | \ + PIN_OSPEED_HIGH(GPIOA_CAN_RX) | \ + PIN_OSPEED_HIGH(GPIOA_CAN_TX) | \ + PIN_OSPEED_HIGH(GPIOA_SWDIO) | \ + PIN_OSPEED_HIGH(GPIOA_SWCLK) | \ + PIN_OSPEED_HIGH(GPIOA_PIN15)) +#define VAL_GPIOA_PUPDR (PIN_PUPDR_PULLDOWN(GPIOA_LED) | \ + PIN_PUPDR_FLOATING(GPIOA_MT_STBY_RST) | \ + PIN_PUPDR_PULLUP(GPIOA_USART2_TX) | \ + PIN_PUPDR_PULLUP(GPIOA_USART2_RX) | \ + PIN_PUPDR_FLOATING(GPIOA_MT_ILIM) | \ + PIN_PUPDR_FLOATING(GPIOA_MT_X_ISENSE) | \ + PIN_PUPDR_FLOATING(GPIOA_MT_Y_ISENSE) | \ + PIN_PUPDR_FLOATING(GPIOA_MT_Z_ISENSE) | \ + PIN_PUPDR_FLOATING(GPIOA_POUTPROT) | \ + PIN_PUPDR_PULLDOWN(GPIOA_CAN_SILENT) | \ + PIN_PUPDR_PULLDOWN(GPIOA_CAN_SHDN) | \ + PIN_PUPDR_PULLUP(GPIOA_CAN_RX) | \ + PIN_PUPDR_PULLUP(GPIOA_CAN_TX) | \ + PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \ + PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \ + PIN_PUPDR_FLOATING(GPIOA_PIN15)) +#define VAL_GPIOA_ODR (PIN_ODR_LOW(GPIOA_LED) | \ + PIN_ODR_HIGH(GPIOA_MT_STBY_RST) | \ + PIN_ODR_HIGH(GPIOA_USART2_TX) | \ + PIN_ODR_HIGH(GPIOA_USART2_RX) | \ + PIN_ODR_HIGH(GPIOA_MT_ILIM) | \ + PIN_ODR_HIGH(GPIOA_MT_X_ISENSE) | \ + PIN_ODR_HIGH(GPIOA_MT_Y_ISENSE) | \ + PIN_ODR_HIGH(GPIOA_MT_Z_ISENSE) | \ + PIN_ODR_HIGH(GPIOA_POUTPROT) | \ + PIN_ODR_LOW(GPIOA_CAN_SILENT) | \ + PIN_ODR_LOW(GPIOA_CAN_SHDN) | \ + PIN_ODR_HIGH(GPIOA_CAN_RX) | \ + PIN_ODR_HIGH(GPIOA_CAN_TX) | \ + PIN_ODR_HIGH(GPIOA_SWDIO) | \ + PIN_ODR_HIGH(GPIOA_SWCLK) | \ + PIN_ODR_HIGH(GPIOA_PIN15)) +#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_LED, 0U) | \ + PIN_AFIO_AF(GPIOA_MT_STBY_RST, 0U) | \ + PIN_AFIO_AF(GPIOA_USART2_TX, 1U) | \ + PIN_AFIO_AF(GPIOA_USART2_RX, 1U) | \ + PIN_AFIO_AF(GPIOA_MT_ILIM, 0U) | \ + PIN_AFIO_AF(GPIOA_MT_X_ISENSE, 0U) | \ + PIN_AFIO_AF(GPIOA_MT_Y_ISENSE, 0U) | \ + PIN_AFIO_AF(GPIOA_MT_Z_ISENSE, 0U)) +#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_POUTPROT, 0U) | \ + PIN_AFIO_AF(GPIOA_CAN_SILENT, 0U) | \ + PIN_AFIO_AF(GPIOA_CAN_SHDN, 0U) | \ + PIN_AFIO_AF(GPIOA_CAN_RX, 4U) | \ + PIN_AFIO_AF(GPIOA_CAN_TX, 4U) | \ + PIN_AFIO_AF(GPIOA_SWDIO, 0U) | \ + PIN_AFIO_AF(GPIOA_SWCLK, 0U) | \ + PIN_AFIO_AF(GPIOA_PIN15, 0U)) + +/* + * GPIOB setup: + * + * PB0 - PIN0 (analog). + * PB1 - PIN1 (analog). + * PB2 - PIN2 (analog). + * PB3 - MAG_FAULT (input). + * PB4 - MAG_EN (output). + * PB5 - MAG_READY (input). + * PB6 - I2C1_SCL (alternate 1). + * PB7 - I2C1_SDA (alternate 1). + * PB8 - PIN8 (analog). + * PB9 - PIN9 (analog). + * PB10 - PIN10 (analog). + * PB11 - PIN11 (analog). + * PB12 - IMU_INT1 (input). + * PB13 - IMU_INT2 (input). + * PB14 - IMU_INT4 (input). + * PB15 - IMU_INT3 (input). + */ +#define VAL_GPIOB_MODER (PIN_MODE_OUTPUT(GPIOB_MT_Z_PHASE) | \ + PIN_MODE_INPUT(GPIOB_IMU_INT2) | \ + PIN_MODE_OUTPUT(GPIOB_MT_Y_PHASE) | \ + PIN_MODE_INPUT(GPIOB_MAG_N_FAULT) | \ + PIN_MODE_OUTPUT(GPIOB_MAG_N_EN) | \ + PIN_MODE_INPUT(GPIOB_MAG_READY) | \ + PIN_MODE_ALTERNATE(GPIOB_I2C1_SCL) | \ + PIN_MODE_ALTERNATE(GPIOB_I2C1_SDA) | \ + PIN_MODE_OUTPUT(GPIOB_MT_EN) | \ + PIN_MODE_INPUT(GPIOB_IMU_INT4) | \ + PIN_MODE_INPUT(GPIOB_IMU_INT3) | \ + PIN_MODE_OUTPUT(GPIOB_MT_X_PHASE) | \ + PIN_MODE_INPUT(GPIOB_IMU_INT1) | \ + PIN_MODE_ALTERNATE(GPIOB_MT_X_PWM) | \ + PIN_MODE_ALTERNATE(GPIOB_MT_Y_PWM) | \ + PIN_MODE_ALTERNATE(GPIOB_MT_Z_PWM)) + +#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_MT_Z_PHASE) | \ + PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT2) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MT_Y_PHASE) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MAG_N_FAULT) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MAG_N_EN) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MAG_READY) | \ + PIN_OTYPE_OPENDRAIN(GPIOB_I2C1_SCL) | \ + PIN_OTYPE_OPENDRAIN(GPIOB_I2C1_SDA) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MT_EN) | \ + PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT4) | \ + PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT3) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MT_X_PHASE) | \ + PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT1) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MT_X_PWM) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MT_Y_PWM) | \ + PIN_OTYPE_PUSHPULL(GPIOB_MT_Z_PWM)) + +#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_HIGH(GPIOB_MT_Z_PHASE) | \ + PIN_OSPEED_HIGH(GPIOB_IMU_INT2) | \ + PIN_OSPEED_HIGH(GPIOB_MT_Y_PHASE) | \ + PIN_OSPEED_HIGH(GPIOB_MAG_N_FAULT) | \ + PIN_OSPEED_HIGH(GPIOB_MAG_N_EN) | \ + PIN_OSPEED_HIGH(GPIOB_MAG_READY) | \ + PIN_OSPEED_HIGH(GPIOB_I2C1_SCL) | \ + PIN_OSPEED_HIGH(GPIOB_I2C1_SDA) | \ + PIN_OSPEED_HIGH(GPIOB_MT_EN) | \ + PIN_OSPEED_HIGH(GPIOB_IMU_INT4) | \ + PIN_OSPEED_HIGH(GPIOB_IMU_INT3) | \ + PIN_OSPEED_HIGH(GPIOB_MT_X_PHASE) | \ + PIN_OSPEED_HIGH(GPIOB_IMU_INT1) | \ + PIN_OSPEED_HIGH(GPIOB_MT_X_PWM) | \ + PIN_OSPEED_HIGH(GPIOB_MT_Y_PWM) | \ + PIN_OSPEED_HIGH(GPIOB_MT_Z_PWM)) +#define VAL_GPIOB_PUPDR (PIN_PUPDR_FLOATING(GPIOB_MT_Z_PHASE) | \ + PIN_PUPDR_FLOATING(GPIOB_IMU_INT2) | \ + PIN_PUPDR_FLOATING(GPIOB_MT_Y_PHASE) | \ + PIN_PUPDR_FLOATING(GPIOB_MAG_N_FAULT) | \ + PIN_PUPDR_FLOATING(GPIOB_MAG_N_EN) | \ + PIN_PUPDR_FLOATING(GPIOB_MAG_READY) | \ + PIN_PUPDR_FLOATING(GPIOB_I2C1_SCL) | \ + PIN_PUPDR_FLOATING(GPIOB_I2C1_SDA) | \ + PIN_PUPDR_FLOATING(GPIOB_MT_EN) | \ + PIN_PUPDR_FLOATING(GPIOB_IMU_INT4) | \ + PIN_PUPDR_FLOATING(GPIOB_IMU_INT3) | \ + PIN_PUPDR_FLOATING(GPIOB_MT_X_PHASE) | \ + PIN_PUPDR_FLOATING(GPIOB_IMU_INT1) | \ + PIN_PUPDR_FLOATING(GPIOB_MT_X_PWM) | \ + PIN_PUPDR_FLOATING(GPIOB_MT_Y_PWM) | \ + PIN_PUPDR_FLOATING(GPIOB_MT_Z_PWM)) +#define VAL_GPIOB_ODR (PIN_ODR_LOW(GPIOB_MT_Z_PHASE) | \ + PIN_ODR_HIGH(GPIOB_IMU_INT2) | \ + PIN_ODR_LOW(GPIOB_MT_Y_PHASE) | \ + PIN_ODR_HIGH(GPIOB_MAG_N_FAULT) | \ + PIN_ODR_LOW(GPIOB_MAG_N_EN) | \ + PIN_ODR_HIGH(GPIOB_MAG_READY) | \ + PIN_ODR_HIGH(GPIOB_I2C1_SCL) | \ + PIN_ODR_HIGH(GPIOB_I2C1_SDA) | \ + PIN_ODR_LOW(GPIOB_MT_EN) | \ + PIN_ODR_HIGH(GPIOB_IMU_INT4) | \ + PIN_ODR_HIGH(GPIOB_IMU_INT3) | \ + PIN_ODR_LOW(GPIOB_MT_X_PHASE) | \ + PIN_ODR_HIGH(GPIOB_IMU_INT1) | \ + PIN_ODR_LOW(GPIOB_MT_X_PWM) | \ + PIN_ODR_LOW(GPIOB_MT_Y_PWM) | \ + PIN_ODR_LOW(GPIOB_MT_Z_PWM)) +#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_MT_Z_PHASE, 0U) | \ + PIN_AFIO_AF(GPIOB_IMU_INT2, 0U) | \ + PIN_AFIO_AF(GPIOB_MT_Y_PHASE, 0U) | \ + PIN_AFIO_AF(GPIOB_MAG_N_FAULT, 0U) | \ + PIN_AFIO_AF(GPIOB_MAG_N_EN, 0U) | \ + PIN_AFIO_AF(GPIOB_MAG_READY, 0U) | \ + PIN_AFIO_AF(GPIOB_I2C1_SCL, 1U) | \ + PIN_AFIO_AF(GPIOB_I2C1_SDA, 1U)) +#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_MT_EN, 0U) | \ + PIN_AFIO_AF(GPIOB_IMU_INT4, 0U) | \ + PIN_AFIO_AF(GPIOB_IMU_INT3, 0U) | \ + PIN_AFIO_AF(GPIOB_MT_X_PHASE, 0U) | \ + PIN_AFIO_AF(GPIOB_IMU_INT1, 0U) | \ + PIN_AFIO_AF(GPIOB_MT_X_PWM, 2U) | \ + PIN_AFIO_AF(GPIOB_MT_Y_PWM, 2U) | \ + PIN_AFIO_AF(GPIOB_MT_Z_PWM, 2U)) + +/* + * GPIOC setup: + * + * PC0 - PIN0 (analog). + * PC1 - PIN1 (analog). + * PC2 - PIN2 (analog). + * PC3 - PIN3 (analog). + * PC4 - PIN4 (analog). + * PC5 - PIN5 (analog). + * PC6 - PIN6 (analog). + * PC7 - PIN7 (analog). + * PC8 - PIN8 (analog). + * PC9 - PIN9 (analog). + * PC10 - PIN10 (analog). + * PC11 - PIN11 (analog). + * PC12 - PIN12 (analog). + * PC13 - PIN13 (analog). + * PC14 - PIN14 (analog). + * PC15 - PIN15 (analog). + */ +#define VAL_GPIOC_MODER (PIN_MODE_ANALOG(GPIOC_PIN0) | \ + PIN_MODE_ANALOG(GPIOC_PIN1) | \ + PIN_MODE_ANALOG(GPIOC_PIN2) | \ + PIN_MODE_ANALOG(GPIOC_PIN3) | \ + PIN_MODE_ANALOG(GPIOC_PIN4) | \ + PIN_MODE_ANALOG(GPIOC_PIN5) | \ + PIN_MODE_ANALOG(GPIOC_PIN6) | \ + PIN_MODE_ANALOG(GPIOC_PIN7) | \ + PIN_MODE_ANALOG(GPIOC_PIN8) | \ + PIN_MODE_ANALOG(GPIOC_PIN9) | \ + PIN_MODE_ANALOG(GPIOC_PIN10) | \ + PIN_MODE_ANALOG(GPIOC_PIN11) | \ + PIN_MODE_ANALOG(GPIOC_PIN12) | \ + PIN_MODE_ANALOG(GPIOC_PIN13) | \ + PIN_MODE_ANALOG(GPIOC_PIN14) | \ + PIN_MODE_ANALOG(GPIOC_PIN15)) +#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOC_PIN15)) +#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_HIGH(GPIOC_PIN0) | \ + PIN_OSPEED_HIGH(GPIOC_PIN1) | \ + PIN_OSPEED_HIGH(GPIOC_PIN2) | \ + PIN_OSPEED_HIGH(GPIOC_PIN3) | \ + PIN_OSPEED_HIGH(GPIOC_PIN4) | \ + PIN_OSPEED_HIGH(GPIOC_PIN5) | \ + PIN_OSPEED_HIGH(GPIOC_PIN6) | \ + PIN_OSPEED_HIGH(GPIOC_PIN7) | \ + PIN_OSPEED_HIGH(GPIOC_PIN8) | \ + PIN_OSPEED_HIGH(GPIOC_PIN9) | \ + PIN_OSPEED_HIGH(GPIOC_PIN10) | \ + PIN_OSPEED_HIGH(GPIOC_PIN11) | \ + PIN_OSPEED_HIGH(GPIOC_PIN12) | \ + PIN_OSPEED_HIGH(GPIOC_PIN13) | \ + PIN_OSPEED_HIGH(GPIOC_PIN14) | \ + PIN_OSPEED_HIGH(GPIOC_PIN15)) +#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(GPIOC_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOC_PIN15)) +#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \ + PIN_ODR_HIGH(GPIOC_PIN1) | \ + PIN_ODR_HIGH(GPIOC_PIN2) | \ + PIN_ODR_HIGH(GPIOC_PIN3) | \ + PIN_ODR_HIGH(GPIOC_PIN4) | \ + PIN_ODR_HIGH(GPIOC_PIN5) | \ + PIN_ODR_HIGH(GPIOC_PIN6) | \ + PIN_ODR_HIGH(GPIOC_PIN7) | \ + PIN_ODR_HIGH(GPIOC_PIN8) | \ + PIN_ODR_HIGH(GPIOC_PIN9) | \ + PIN_ODR_HIGH(GPIOC_PIN10) | \ + PIN_ODR_HIGH(GPIOC_PIN11) | \ + PIN_ODR_HIGH(GPIOC_PIN12) | \ + PIN_ODR_HIGH(GPIOC_PIN13) | \ + PIN_ODR_HIGH(GPIOC_PIN14) | \ + PIN_ODR_HIGH(GPIOC_PIN15)) +#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN7, 0U)) +#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOC_PIN15, 0U)) + +/* + * GPIOD setup: + * + * PD0 - PIN0 (analog). + * PD1 - PIN1 (analog). + * PD2 - PIN2 (analog). + * PD3 - PIN3 (analog). + * PD4 - PIN4 (analog). + * PD5 - PIN5 (analog). + * PD6 - PIN6 (analog). + * PD7 - PIN7 (analog). + * PD8 - PIN8 (analog). + * PD9 - PIN9 (analog). + * PD10 - PIN10 (analog). + * PD11 - PIN11 (analog). + * PD12 - PIN12 (analog). + * PD13 - PIN13 (analog). + * PD14 - PIN14 (analog). + * PD15 - PIN15 (analog). + */ +#define VAL_GPIOD_MODER (PIN_MODE_ANALOG(GPIOD_PIN0) | \ + PIN_MODE_ANALOG(GPIOD_PIN1) | \ + PIN_MODE_ANALOG(GPIOD_PIN2) | \ + PIN_MODE_ANALOG(GPIOD_PIN3) | \ + PIN_MODE_ANALOG(GPIOD_PIN4) | \ + PIN_MODE_ANALOG(GPIOD_PIN5) | \ + PIN_MODE_ANALOG(GPIOD_PIN6) | \ + PIN_MODE_ANALOG(GPIOD_PIN7) | \ + PIN_MODE_ANALOG(GPIOD_PIN8) | \ + PIN_MODE_ANALOG(GPIOD_PIN9) | \ + PIN_MODE_ANALOG(GPIOD_PIN10) | \ + PIN_MODE_ANALOG(GPIOD_PIN11) | \ + PIN_MODE_ANALOG(GPIOD_PIN12) | \ + PIN_MODE_ANALOG(GPIOD_PIN13) | \ + PIN_MODE_ANALOG(GPIOD_PIN14) | \ + PIN_MODE_ANALOG(GPIOD_PIN15)) +#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOD_PIN15)) +#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_HIGH(GPIOD_PIN0) | \ + PIN_OSPEED_HIGH(GPIOD_PIN1) | \ + PIN_OSPEED_HIGH(GPIOD_PIN2) | \ + PIN_OSPEED_HIGH(GPIOD_PIN3) | \ + PIN_OSPEED_HIGH(GPIOD_PIN4) | \ + PIN_OSPEED_HIGH(GPIOD_PIN5) | \ + PIN_OSPEED_HIGH(GPIOD_PIN6) | \ + PIN_OSPEED_HIGH(GPIOD_PIN7) | \ + PIN_OSPEED_HIGH(GPIOD_PIN8) | \ + PIN_OSPEED_HIGH(GPIOD_PIN9) | \ + PIN_OSPEED_HIGH(GPIOD_PIN10) | \ + PIN_OSPEED_HIGH(GPIOD_PIN11) | \ + PIN_OSPEED_HIGH(GPIOD_PIN12) | \ + PIN_OSPEED_HIGH(GPIOD_PIN13) | \ + PIN_OSPEED_HIGH(GPIOD_PIN14) | \ + PIN_OSPEED_HIGH(GPIOD_PIN15)) +#define VAL_GPIOD_PUPDR (PIN_PUPDR_FLOATING(GPIOD_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOD_PIN15)) +#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \ + PIN_ODR_HIGH(GPIOD_PIN1) | \ + PIN_ODR_HIGH(GPIOD_PIN2) | \ + PIN_ODR_HIGH(GPIOD_PIN3) | \ + PIN_ODR_HIGH(GPIOD_PIN4) | \ + PIN_ODR_HIGH(GPIOD_PIN5) | \ + PIN_ODR_HIGH(GPIOD_PIN6) | \ + PIN_ODR_HIGH(GPIOD_PIN7) | \ + PIN_ODR_HIGH(GPIOD_PIN8) | \ + PIN_ODR_HIGH(GPIOD_PIN9) | \ + PIN_ODR_HIGH(GPIOD_PIN10) | \ + PIN_ODR_HIGH(GPIOD_PIN11) | \ + PIN_ODR_HIGH(GPIOD_PIN12) | \ + PIN_ODR_HIGH(GPIOD_PIN13) | \ + PIN_ODR_HIGH(GPIOD_PIN14) | \ + PIN_ODR_HIGH(GPIOD_PIN15)) +#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN7, 0U)) +#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOD_PIN15, 0U)) + +/* + * GPIOE setup: + * + * PE0 - PIN0 (analog). + * PE1 - PIN1 (analog). + * PE2 - PIN2 (analog). + * PE3 - PIN3 (analog). + * PE4 - PIN4 (analog). + * PE5 - PIN5 (analog). + * PE6 - PIN6 (analog). + * PE7 - PIN7 (analog). + * PE8 - PIN8 (analog). + * PE9 - PIN9 (analog). + * PE10 - PIN10 (analog). + * PE11 - PIN11 (analog). + * PE12 - PIN12 (analog). + * PE13 - PIN13 (analog). + * PE14 - PIN14 (analog). + * PE15 - PIN15 (analog). + */ +#define VAL_GPIOE_MODER (PIN_MODE_ANALOG(GPIOE_PIN0) | \ + PIN_MODE_ANALOG(GPIOE_PIN1) | \ + PIN_MODE_ANALOG(GPIOE_PIN2) | \ + PIN_MODE_ANALOG(GPIOE_PIN3) | \ + PIN_MODE_ANALOG(GPIOE_PIN4) | \ + PIN_MODE_ANALOG(GPIOE_PIN5) | \ + PIN_MODE_ANALOG(GPIOE_PIN6) | \ + PIN_MODE_ANALOG(GPIOE_PIN7) | \ + PIN_MODE_ANALOG(GPIOE_PIN8) | \ + PIN_MODE_ANALOG(GPIOE_PIN9) | \ + PIN_MODE_ANALOG(GPIOE_PIN10) | \ + PIN_MODE_ANALOG(GPIOE_PIN11) | \ + PIN_MODE_ANALOG(GPIOE_PIN12) | \ + PIN_MODE_ANALOG(GPIOE_PIN13) | \ + PIN_MODE_ANALOG(GPIOE_PIN14) | \ + PIN_MODE_ANALOG(GPIOE_PIN15)) +#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN1) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOE_PIN15)) +#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_HIGH(GPIOE_PIN0) | \ + PIN_OSPEED_HIGH(GPIOE_PIN1) | \ + PIN_OSPEED_HIGH(GPIOE_PIN2) | \ + PIN_OSPEED_HIGH(GPIOE_PIN3) | \ + PIN_OSPEED_HIGH(GPIOE_PIN4) | \ + PIN_OSPEED_HIGH(GPIOE_PIN5) | \ + PIN_OSPEED_HIGH(GPIOE_PIN6) | \ + PIN_OSPEED_HIGH(GPIOE_PIN7) | \ + PIN_OSPEED_HIGH(GPIOE_PIN8) | \ + PIN_OSPEED_HIGH(GPIOE_PIN9) | \ + PIN_OSPEED_HIGH(GPIOE_PIN10) | \ + PIN_OSPEED_HIGH(GPIOE_PIN11) | \ + PIN_OSPEED_HIGH(GPIOE_PIN12) | \ + PIN_OSPEED_HIGH(GPIOE_PIN13) | \ + PIN_OSPEED_HIGH(GPIOE_PIN14) | \ + PIN_OSPEED_HIGH(GPIOE_PIN15)) +#define VAL_GPIOE_PUPDR (PIN_PUPDR_FLOATING(GPIOE_PIN0) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN1) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN11) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOE_PIN15)) +#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \ + PIN_ODR_HIGH(GPIOE_PIN1) | \ + PIN_ODR_HIGH(GPIOE_PIN2) | \ + PIN_ODR_HIGH(GPIOE_PIN3) | \ + PIN_ODR_HIGH(GPIOE_PIN4) | \ + PIN_ODR_HIGH(GPIOE_PIN5) | \ + PIN_ODR_HIGH(GPIOE_PIN6) | \ + PIN_ODR_HIGH(GPIOE_PIN7) | \ + PIN_ODR_HIGH(GPIOE_PIN8) | \ + PIN_ODR_HIGH(GPIOE_PIN9) | \ + PIN_ODR_HIGH(GPIOE_PIN10) | \ + PIN_ODR_HIGH(GPIOE_PIN11) | \ + PIN_ODR_HIGH(GPIOE_PIN12) | \ + PIN_ODR_HIGH(GPIOE_PIN13) | \ + PIN_ODR_HIGH(GPIOE_PIN14) | \ + PIN_ODR_HIGH(GPIOE_PIN15)) +#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN1, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN7, 0U)) +#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN11, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOE_PIN15, 0U)) + +/* + * GPIOF setup: + * + * PF0 - OSC_IN (analog). + * PF1 - OSC_OUT (analog). + * PF2 - PIN2 (analog). + * PF3 - PIN3 (analog). + * PF4 - PIN4 (analog). + * PF5 - PIN5 (analog). + * PF6 - PIN6 (analog). + * PF7 - PIN7 (analog). + * PF8 - PIN8 (analog). + * PF9 - PIN9 (analog). + * PF10 - PIN10 (analog). + * PF11 - BOOT0 (analog). + * PF12 - PIN12 (analog). + * PF13 - PIN13 (analog). + * PF14 - PIN14 (analog). + * PF15 - PIN15 (analog). + */ +#define VAL_GPIOF_MODER (PIN_MODE_ANALOG(GPIOF_OSC_IN) | \ + PIN_MODE_ANALOG(GPIOF_OSC_OUT) | \ + PIN_MODE_ANALOG(GPIOF_PIN2) | \ + PIN_MODE_ANALOG(GPIOF_PIN3) | \ + PIN_MODE_ANALOG(GPIOF_PIN4) | \ + PIN_MODE_ANALOG(GPIOF_PIN5) | \ + PIN_MODE_ANALOG(GPIOF_PIN6) | \ + PIN_MODE_ANALOG(GPIOF_PIN7) | \ + PIN_MODE_ANALOG(GPIOF_PIN8) | \ + PIN_MODE_ANALOG(GPIOF_PIN9) | \ + PIN_MODE_ANALOG(GPIOF_PIN10) | \ + PIN_MODE_ANALOG(GPIOF_BOOT0) | \ + PIN_MODE_ANALOG(GPIOF_PIN12) | \ + PIN_MODE_ANALOG(GPIOF_PIN13) | \ + PIN_MODE_ANALOG(GPIOF_PIN14) | \ + PIN_MODE_ANALOG(GPIOF_PIN15)) +#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_OSC_IN) | \ + PIN_OTYPE_PUSHPULL(GPIOF_OSC_OUT) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \ + PIN_OTYPE_PUSHPULL(GPIOF_BOOT0) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \ + PIN_OTYPE_PUSHPULL(GPIOF_PIN15)) +#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_OSC_IN) | \ + PIN_OSPEED_HIGH(GPIOF_OSC_OUT) | \ + PIN_OSPEED_HIGH(GPIOF_PIN2) | \ + PIN_OSPEED_HIGH(GPIOF_PIN3) | \ + PIN_OSPEED_HIGH(GPIOF_PIN4) | \ + PIN_OSPEED_HIGH(GPIOF_PIN5) | \ + PIN_OSPEED_HIGH(GPIOF_PIN6) | \ + PIN_OSPEED_HIGH(GPIOF_PIN7) | \ + PIN_OSPEED_HIGH(GPIOF_PIN8) | \ + PIN_OSPEED_HIGH(GPIOF_PIN9) | \ + PIN_OSPEED_HIGH(GPIOF_PIN10) | \ + PIN_OSPEED_HIGH(GPIOF_BOOT0) | \ + PIN_OSPEED_HIGH(GPIOF_PIN12) | \ + PIN_OSPEED_HIGH(GPIOF_PIN13) | \ + PIN_OSPEED_HIGH(GPIOF_PIN14) | \ + PIN_OSPEED_HIGH(GPIOF_PIN15)) +#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_OSC_IN) | \ + PIN_PUPDR_FLOATING(GPIOF_OSC_OUT) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN2) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN3) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN4) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN5) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN6) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN7) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN8) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN9) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN10) | \ + PIN_PUPDR_FLOATING(GPIOF_BOOT0) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN12) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN13) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN14) | \ + PIN_PUPDR_FLOATING(GPIOF_PIN15)) +#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_OSC_IN) | \ + PIN_ODR_HIGH(GPIOF_OSC_OUT) | \ + PIN_ODR_HIGH(GPIOF_PIN2) | \ + PIN_ODR_HIGH(GPIOF_PIN3) | \ + PIN_ODR_HIGH(GPIOF_PIN4) | \ + PIN_ODR_HIGH(GPIOF_PIN5) | \ + PIN_ODR_HIGH(GPIOF_PIN6) | \ + PIN_ODR_HIGH(GPIOF_PIN7) | \ + PIN_ODR_HIGH(GPIOF_PIN8) | \ + PIN_ODR_HIGH(GPIOF_PIN9) | \ + PIN_ODR_HIGH(GPIOF_PIN10) | \ + PIN_ODR_HIGH(GPIOF_BOOT0) | \ + PIN_ODR_HIGH(GPIOF_PIN12) | \ + PIN_ODR_HIGH(GPIOF_PIN13) | \ + PIN_ODR_HIGH(GPIOF_PIN14) | \ + PIN_ODR_HIGH(GPIOF_PIN15)) +#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_OSC_IN, 0U) | \ + PIN_AFIO_AF(GPIOF_OSC_OUT, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN2, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN3, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN4, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN5, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN6, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN7, 0U)) +#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN9, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN10, 0U) | \ + PIN_AFIO_AF(GPIOF_BOOT0, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN12, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN13, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN14, 0U) | \ + PIN_AFIO_AF(GPIOF_PIN15, 0U)) + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* BOARD_H */ diff --git a/boards/ORESAT_ADCS_V1_2/board.mk b/boards/ORESAT_ADCS_V1_2/board.mk new file mode 100644 index 00000000..60673b37 --- /dev/null +++ b/boards/ORESAT_ADCS_V1_2/board.mk @@ -0,0 +1,9 @@ +# List of all the board related files. +BOARDSRC = $(BOARDDIR)/board.c + +# Required include directories +BOARDINC = $(BOARDDIR) + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) diff --git a/boards/ORESAT_ADCS_V1_2/oocd.cfg b/boards/ORESAT_ADCS_V1_2/oocd.cfg new file mode 100644 index 00000000..46967e82 --- /dev/null +++ b/boards/ORESAT_ADCS_V1_2/oocd.cfg @@ -0,0 +1,9 @@ +# +# +# for use with STLINK V2 SWD programmer +# + +source [find interface/stlink.cfg] +transport select hla_swd +source [find target/stm32f0x.cfg] + diff --git a/common/bmi088.c b/common/bmi088.c index 57013d5c..8945b81a 100644 --- a/common/bmi088.c +++ b/common/bmi088.c @@ -9,6 +9,8 @@ #include "hal.h" #include "bmi088.h" +#include "chprintf.h" +#define DEBUG_SD (BaseSequentialStream*) &SD2 /*===========================================================================*/ /* Driver local definitions. */ @@ -112,6 +114,28 @@ bool bmi088Start(BMI088Driver *devp, const BMI088Config *config) { devp->config = config; +// for(int i = 0; i < 100000; i++ ) { +// devp->state = BMI088_READY; +// chprintf(DEBUG_SD, "Stopping I2C bus...\r\n"); +// uint8_t chip_id = 0; +// chprintf(DEBUG_SD, "Reading chip ID...\r\n"); +// chThdSleepMilliseconds(5); +// int r = 0; +// if( (r = bmi088ReadAccelerometerChipId(devp, &chip_id)) != MSG_OK ) { +// chprintf(DEBUG_SD, "Failed to read chip ID, %d\r\n", r); +// } else { +// chprintf(DEBUG_SD, "Chip ID = 0x%X\r\n", chip_id); +// } +// +//// chprintf(DEBUG_SD, "Setting power...\r\n"); +//// chThdSleepMilliseconds(5); +//// +//// if( bmi088AccelerometerPowerOnOrOff(devp, BMI088_ON) != MSG_OK ) { +//// devp->error_flags |= (1<<0); +//// ret = false; +//// } +// chThdSleepMilliseconds(250); +// } /* Configuring common registers.*/ #if BMI088_USE_I2C @@ -139,19 +163,25 @@ bool bmi088Start(BMI088Driver *devp, const BMI088Config *config) { #endif + + if( bmi088AccelerometerPowerOnOrOff(devp, BMI088_ON) != MSG_OK ) { + devp->error_flags |= (1<<0); ret = false; } if( bmi088AccelerometerEnableOrSuspend(devp, BMI088_MODE_ACTIVE) != MSG_OK ) { + devp->error_flags |= (1<<1); ret = false; } if( bmi088SetGyroBandwidth(devp, BMI088_GYR_BANDWIDTH_100HZ_32HZ) != MSG_OK ) { + devp->error_flags |= (1<<2); ret = false; } if( bmi088SetGyroRange(devp, BMI088_GYR_RANGE_1K) != MSG_OK ) { + devp->error_flags |= (1<<3); ret = false; } diff --git a/common/include/bmi088.h b/common/include/bmi088.h index f9ad90dc..071f6f5b 100644 --- a/common/include/bmi088.h +++ b/common/include/bmi088.h @@ -876,6 +876,7 @@ typedef struct { struct BMI088Driver { /* Driver state.*/ bmi088_state_t state; + uint32_t error_flags; /* Current configuration data.*/ const BMI088Config *config; }; diff --git a/common/include/ltc4305.h b/common/include/ltc4305.h new file mode 100644 index 00000000..1369d86d --- /dev/null +++ b/common/include/ltc4305.h @@ -0,0 +1,10 @@ +#ifndef COMMON_INCLUDE_LTC4305_H_ +#define COMMON_INCLUDE_LTC4305_H_ + +#define LTC_4035_MINUSZ_CARD_I2C_ADDRESS 0xA8 +#define LTC_4035_PLUSZ_CARD_I2C_ADDRESS 0x88 + +bool ltc4305_set_connections(I2CDriver *i2cp, const uint8_t i2c_addr, const bool enable_i2c_bus_1, const bool enable_i2c_bus_2); + + +#endif /* COMMON_INCLUDE_LTC4305_H_ */ diff --git a/common/include/mmc5883ma.h b/common/include/mmc5883ma.h index 64e458a4..c262fa21 100644 --- a/common/include/mmc5883ma.h +++ b/common/include/mmc5883ma.h @@ -17,6 +17,9 @@ * @name Version Identification * @{ */ + +#define MMC5883MA_I2C_ADDRESS 0x30 + /** * @brief MMC5883MA Driver version string. */ @@ -93,7 +96,7 @@ * @name MMC5883MA X Threshold register fields * @{ */ -#define MMC5883MA_X_THRSHLD_X_MAG_TH_Pos (0U) +//#define MMC5883MA_X_THRSHLD_X_MAG_TH_Pos (0U) #define MMC5883MA_X_THRSHLD_X_MAG_TH_Msk (0xFFU << MMC5883MA_X_THRSHLD_X_MAG_TH_Pos) #define MMC5883MA_X_THRSHLD_X_MAG_TH MMC5883MA_X_THRSHLD_X_MAG_TH_Msk #define MMC5883MA_X_THRSHLD_X_MAG_TH_Pos (0x00U << MMC5883MA_X_THRSHLD_X_MAG_TH_Pos) @@ -110,12 +113,12 @@ #define MMC5883MA_INTRNLCTRL2_CM_FREQ_5Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) #define MMC5883MA_INTRNLCTRL2_CM_FREQ_2200mHz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) #define MMC5883MA_INTRNLCTRL2_CM_FREQ_1Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1/2Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1/4Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1/8Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1/16Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1/32Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1/64Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_2Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_4Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_8Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_16Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_32Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_64Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) #define MMC5883MA_INTRNLCTRL2_CM_FREQ_RST (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) #define MMC5883MA_INTRNLCTRL2_MDT_Pos (5U) #define MMC5883MA_INTRNLCTRL2_MDT_Msk (0x1U << MMC5883MA_INTRNLCTRL2_MDT_Pos) @@ -243,7 +246,7 @@ */ #define MMC5883MA_YOUT_H_Pos (0U) #define MMC5883MA_YOUT_H_Msk (0xFFU << MMC5883MA_YOUT_H_Pos) -#define MMC5883MA_YOUT_H_Msk MMC5883MA_YOUT_H_Msk +//#define MMC5883MA_YOUT_H_Msk MMC5883MA_YOUT_H_Msk /** @} */ /** @@ -396,6 +399,12 @@ struct MMC5883MADriver { /** @} */ +typedef struct { + int16_t mx; + int16_t my; + int16_t mz; +} mmc5883ma_data_t; + /*===========================================================================*/ /* Driver macros. */ /*===========================================================================*/ @@ -408,8 +417,9 @@ struct MMC5883MADriver { extern "C" { #endif void mmc5883maObjectInit(MMC5883MADriver *devp); -void mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config); +bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config); void mmc5883maStop(MMC5883MADriver *devp); +bool mmc5883maReadData(MMC5883MADriver *devp, mmc5883ma_data_t *dest); #ifdef __cplusplus } #endif diff --git a/common/ltc4305.c b/common/ltc4305.c new file mode 100644 index 00000000..e9edc2e8 --- /dev/null +++ b/common/ltc4305.c @@ -0,0 +1,27 @@ +#include "hal.h" +#include "ltc4305.h" + + +bool ltc4305_set_connections(I2CDriver *i2cp, const uint8_t i2c_addr, const bool enable_i2c_bus_1, const bool enable_i2c_bus_2) { + + + uint8_t tx[2]; + tx[0] = 0x03; + + uint8_t reg_3_value = 0; + if( enable_i2c_bus_1 ) { + reg_3_value |= (1<<7); + } + + if( enable_i2c_bus_2 ) { + reg_3_value |= (1<<6); + } + + tx[1] = reg_3_value; + + if( i2cMasterTransmitTimeout(i2cp, i2c_addr, tx, 2, NULL, 0, 50) == MSG_OK ) { + return(true); + } + return(false); + +} diff --git a/common/ltc4305.mk b/common/ltc4305.mk new file mode 100644 index 00000000..35d01cb1 --- /dev/null +++ b/common/ltc4305.mk @@ -0,0 +1,9 @@ +# List of all the LTC4305 device files. +LTC4305SRC := $(PROJ_SRC)/ltc4305.c + +# Required include directories +LTC4305INC := $(PROJ_SRC)/include + +# Shared variables +ALLCSRC += $(LTC4305SRC) +ALLINC += $(LTC4305INC) diff --git a/common/mmc5883ma.c b/common/mmc5883ma.c index 06303523..060d6dc8 100644 --- a/common/mmc5883ma.c +++ b/common/mmc5883ma.c @@ -1,6 +1,6 @@ /** * @file mmc5883ma.c - * @brief MMC5883MA Digital to Analog Converter. + * @brief MMC5883MA Magnetometer * * @addtogroup MMC5883MA * @ingrup ORESAT @@ -9,6 +9,7 @@ #include "hal.h" #include "mmc5883ma.h" +#include "string.h" /*===========================================================================*/ /* Driver local definitions. */ @@ -21,57 +22,51 @@ /*===========================================================================*/ /* Driver local variables and types. */ /*===========================================================================*/ -typedef union { - struct __attribute__((packed)) { - uint8_t reg; - union { - uint8_t data[2]; - uint16_t value; - }; - }; - uint8_t buf[3]; -} i2cbuf_t; +//typedef union { +// struct __attribute__((packed)) { +// uint8_t reg; +// union { +// uint8_t data[2]; +// uint16_t value; +// }; +// }; +// uint8_t buf[3]; +//} i2cbuf_t; /*===========================================================================*/ /* Driver local functions. */ /*===========================================================================*/ +#define MMC5883MA_DEFAULT_I2C_TIMEOUT 50 #if (MMC5883MA_USE_I2C) || defined(__DOXYGEN__) -/** - * @brief Reads registers value using I2C. - * @pre The I2C interface must be initialized and the driver started. - * - * @param[in] i2cp pointer to the I2C interface - * @param[in] sad slave address without R bit - * @param[in] reg first sub-register address - * @param[out] rxbuf pointer to an output buffer - * @param[in] n number of consecutive register to read - * @return the operation status. - * @notapi - */ -msg_t mmc5883maI2CReadRegister(I2CDriver *i2cp, i2caddr_t sad, uint8_t reg, - uint8_t* rxbuf, size_t n) { - return i2cMasterTransmitTimeout(i2cp, sad, ®, 1, rxbuf, n, - TIME_INFINITE); + +bool mmc5883maI2CWriteRegister2(I2CDriver *i2cp, const uint8_t reg_number, const uint8_t value) { + uint8_t tx[2]; + tx[0] = reg_number; + tx[1] = value; + + if( i2cMasterTransmitTimeout(i2cp, MMC5883MA_I2C_ADDRESS, tx, 2, NULL, 0, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { + return(true); + } + return(false); } -/** - * @brief Writes a value into a register using I2C. - * @pre The I2C interface must be initialized and the driver started. - * - * @param[in] i2cp pointer to the I2C interface - * @param[in] sad slave address without R bit - * @param[in] txbuf buffer containing reg in first byte and high - * and low data bytes - * @param[in] n size of txbuf - * @return the operation status. - * @notapi - */ -msg_t mmc5883maI2CWriteRegister(I2CDriver *i2cp, i2caddr_t sad, uint8_t *txbuf, - size_t n) { - return i2cMasterTransmitTimeout(i2cp, sad, txbuf, n, NULL, 0, - TIME_INFINITE); +bool mmc5883maI2CReadRegister2(I2CDriver *i2cp, const uint8_t reg_number, uint8_t *dest_value) { + uint8_t tx[2]; + tx[0] = reg_number; + tx[1] = 0; + uint8_t rx[2]; + rx[0] = 0; + rx[1] = 0; + + if( i2cMasterTransmitTimeout(i2cp, (i2caddr_t) MMC5883MA_I2C_ADDRESS, tx, 1, rx, 1, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { + *dest_value = rx[0]; + return(true); + } + return(false); } + + #endif /* MMC5883MA_USE_I2C */ /*==========================================================================*/ @@ -86,6 +81,42 @@ static const struct MMC5883MAVMT vmt_device = { /* Driver exported functions. */ /*===========================================================================*/ + +bool mmc5883maReadData(MMC5883MADriver *devp, mmc5883ma_data_t *dest) { + osalDbgCheck((devp != NULL)); + osalDbgAssert((devp->state != MMC5883MA_READY), + "mmc5883maStart(), invalid state"); + + bool ret = false; + + /* Configuring common registers.*/ +#if MMC5883MA_USE_I2C +#if MMC5883MA_SHARED_I2C + i2cAcquireBus(config->i2cp); +#endif /* MMC5883MA_SHARED_I2C */ + + uint8_t rx[10]; + memset(rx, 0, sizeof(rx)); + + uint8_t reg = MMC5883MA_AD_XOUT_LOW; + msg_t r = i2cMasterTransmitTimeout(devp->config->i2cp, MMC5883MA_I2C_ADDRESS, ®, 1, rx, 6, MMC5883MA_DEFAULT_I2C_TIMEOUT); + + if( r == MSG_OK ) { + dest->mx = (rx[0] << 8) | rx[1]; + dest->my = (rx[2] << 8) | rx[3]; + dest->mz = (rx[4] << 8) | rx[5]; + + ret = true; + } + +#if MMC5883MA_SHARED_I2C + i2cReleaseBus(config->i2cp); +#endif /* MMC5883MA_SHARED_I2C */ +#endif /* MMC5883MA_USE_I2C */ + + return(ret); +} + /** * @brief Initializes an instance. * @@ -101,6 +132,10 @@ void mmc5883maObjectInit(MMC5883MADriver *devp) { devp->state = MMC5883MA_STOP; } +bool mmc5883maSoftReset(MMC5883MADriver *devp) { + return(mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL0, MMC5883MA_INTRNLCTRL0_RST_CMD)); +} + /** * @brief Configures and activates MMC5883MA Complex Driver peripheral. * @@ -109,8 +144,8 @@ void mmc5883maObjectInit(MMC5883MADriver *devp) { * * @api */ -void mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { - i2cbuf_t buf; +bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { +// i2cbuf_t buf; osalDbgCheck((devp != NULL) && (config != NULL)); osalDbgAssert((devp->state == MMC5883MA_STOP) || @@ -126,25 +161,23 @@ void mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { #endif /* MMC5883MA_SHARED_I2C */ i2cStart(config->i2cp, config->i2ccfg); - buf.reg = MMC5883MA_AD_CONFIG; - buf.value = __REVSH(MMC5883MA_CONFIG_RST); - mmc5883maI2CWriteRegister(config->i2cp, config->saddr, buf.buf, sizeof(buf)); - do { - mmc5883maI2CReadRegister(config->i2cp, config->saddr, MMC5883MA_AD_CONFIG, - buf.data, sizeof(buf.data)); - } while (buf.data[0] & 0x80U); /* While still resetting */ - buf.reg = MMC5883MA_AD_CONFIG; - buf.value = __REVSH(config->cfg); - mmc5883maI2CWriteRegister(config->i2cp, config->saddr, buf.buf, sizeof(buf)); - buf.reg = MMC5883MA_AD_CAL; - buf.value = __REVSH(config->cal); - mmc5883maI2CWriteRegister(config->i2cp, config->saddr, buf.buf, sizeof(buf)); + + mmc5883maSoftReset(devp); + + //Control 1 reg can be left default of all zeros, 100hz + uint8_t ctrl2 = (1<<2) | (1<<3); //50hz continuous mode + if( ! mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL2, ctrl2)) { + //FIXME handle this + } + #if MMC5883MA_SHARED_I2C i2cReleaseBus(config->i2cp); #endif /* MMC5883MA_SHARED_I2C */ #endif /* MMC5883MA_USE_I2C */ devp->state = MMC5883MA_READY; + + return(devp->state == MMC5883MA_READY); } /** @@ -155,8 +188,6 @@ void mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { * @api */ void mmc5883maStop(MMC5883MADriver *devp) { - i2cbuf_t buf; - osalDbgCheck(devp != NULL); osalDbgAssert((devp->state == MMC5883MA_STOP) || (devp->state == MMC5883MA_READY), "mmc5883maStop(), invalid state"); @@ -168,11 +199,6 @@ void mmc5883maStop(MMC5883MADriver *devp) { i2cStart(devp->config->i2cp, devp->config->i2ccfg); #endif /* MMC5883MA_SHARED_I2C */ - /* Reset to input.*/ - buf.reg = MMC5883MA_AD_CONFIG; - buf.value = __REVSH(MMC5883MA_CONFIG_RST); - mmc5883maI2CWriteRegister(devp->config->i2cp, devp->config->saddr, buf.buf, sizeof(buf)); - i2cStop(devp->config->i2cp); #if MMC5883MA_SHARED_I2C i2cReleaseBus(devp->config->i2cp); @@ -182,148 +208,6 @@ void mmc5883maStop(MMC5883MADriver *devp) { devp->state = MMC5883MA_STOP; } -/** - * @brief Sets MMC5883MA Alert type and value - * - * @param[in] devp pointer to the @p MMC5883MADriver object - * @param[in] alert_me the value to write to Mask/Enable register (0 to disable) - * @param[in] alert_lim the value to write to Alert Limit register - * - * @api - */ -void mmc5883maSetAlert(MMC5883MADriver *devp, uint16_t alert_me, uint16_t alert_lim) { - i2cbuf_t buf; - osalDbgCheck(devp != NULL); - osalDbgAssert(devp->state == MMC5883MA_READY, - "mmc5883maSetAlert(), invalid state"); - -#if MMC5883MA_USE_I2C -#if MMC5883MA_SHARED_I2C - i2cAcquireBus(devp->config->i2cp); - i2cStart(devp->config->i2cp, devp->config->i2ccfg); -#endif /* MMC5883MA_SHARED_I2C */ - - buf.reg = MMC5883MA_AD_LIM; - buf.value = __REVSH(alert_lim); - mmc5883maI2CWriteRegister(devp->config->i2cp, devp->config->saddr, buf.buf, sizeof(buf)); - buf.reg = MMC5883MA_AD_ME; - buf.value = __REVSH(alert_me); - mmc5883maI2CWriteRegister(devp->config->i2cp, devp->config->saddr, buf.buf, sizeof(buf)); - -#if MMC5883MA_SHARED_I2C - i2cReleaseBus(devp->config->i2cp); -#endif /* MMC5883MA_SHARED_I2C */ -#endif /* MMC5883MA_USE_I2C */ -} - -/** - * @brief Reads MMC5883MA Register as raw value. - * - * @param[in] devp pointer to the @p MMC5883MADriver object - * @param[in] reg the register to read from - * - * @api - */ -uint16_t mmc5883maReadRaw(MMC5883MADriver *devp, uint8_t reg) { - i2cbuf_t buf; - - osalDbgCheck(devp != NULL); - osalDbgAssert(devp->state == MMC5883MA_READY, - "mmc5883maReadRaw(), invalid state"); - -#if MMC5883MA_USE_I2C -#if MMC5883MA_SHARED_I2C - i2cAcquireBus(devp->config->i2cp); - i2cStart(devp->config->i2cp, devp->config->i2ccfg); -#endif /* MMC5883MA_SHARED_I2C */ - - buf.reg = reg; - mmc5883maI2CReadRegister(devp->config->i2cp, devp->config->saddr, buf.reg, buf.data, sizeof(buf.data)); - -#if MMC5883MA_SHARED_I2C - i2cReleaseBus(devp->config->i2cp); -#endif /* MMC5883MA_SHARED_I2C */ -#endif /* MMC5883MA_USE_I2C */ - return __REVSH(buf.value); -} - -/** - * @brief Reads MMC5883MA Shunt voltage. - * - * @param[in] devp Pointer to the @p MMC5883MADriver object - * @return Shunt voltage in 0.1uV increments - * - * @api - */ -int16_t mmc5883maReadShunt(MMC5883MADriver *devp) { - int16_t voltage; - - osalDbgCheck(devp != NULL); - - voltage = mmc5883maReadRaw(devp, MMC5883MA_AD_SHUNT) * 25; - - return voltage; -} - -/** - * @brief Reads MMC5883MA VBUS voltage. - * - * @param[in] devp pointer to the @p MMC5883MADriver object - * @return VBUS voltage in 0.01mV increments - * - * @api - */ -uint16_t mmc5883maReadVBUS(MMC5883MADriver *devp) { - uint16_t voltage; - - osalDbgCheck(devp != NULL); - - voltage = mmc5883maReadRaw(devp, MMC5883MA_AD_VBUS) * 125; - - return voltage; -} - -/** - * @brief Reads MMC5883MA Current. - * @note Requires curr_lsb to be set in config - * - * @param[in] devp pointer to the @p MMC5883MADriver object - * @return Current in increments of @p curr_lsb - * - * @api - */ -int16_t mmc5883maReadCurrent(MMC5883MADriver *devp) { - int16_t current; - - osalDbgCheck(devp != NULL); - osalDbgAssert(devp->config->curr_lsb, - "mmc5883maReadCurrent(): invalid curr_lsb value"); - - current = mmc5883maReadRaw(devp, MMC5883MA_AD_CURRENT) * devp->config->curr_lsb; - - return current; -} - -/** - * @brief Reads MMC5883MA Power. - * @note Requires curr_lsb to be set in config - * - * @param[in] devp pointer to the @p MMC5883MADriver object - * @return Power in increments of @p curr_lsb * 25V - * - * @api - */ -uint16_t mmc5883maReadPower(MMC5883MADriver *devp) { - uint16_t power; - - osalDbgCheck(devp != NULL); - osalDbgAssert(devp->config->curr_lsb, - "mmc5883maReadCurrent(): invalid curr_lsb value"); - - power = mmc5883maReadRaw(devp, MMC5883MA_AD_POWER) * devp->config->curr_lsb * 25; - - return power; -} /** @} */ diff --git a/src/f0/app_adcs/Makefile b/src/f0/app_adcs/Makefile new file mode 100644 index 00000000..4c944fda --- /dev/null +++ b/src/f0/app_adcs/Makefile @@ -0,0 +1,217 @@ +############################################################################## +# Build global options +# NOTE: Can be overridden externally. +# + +# Compiler options here. +ifeq ($(USE_OPT),) + USE_OPT = -Og -ggdb -fomit-frame-pointer -falign-functions=16 +endif + +# C specific options here (added to USE_OPT). +ifeq ($(USE_COPT),) + USE_COPT = +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti +endif + +# Enable this if you want the linker to remove unused code and data. +ifeq ($(USE_LINK_GC),) + USE_LINK_GC = yes +endif + +# Linker extra options here. +ifeq ($(USE_LDOPT),) + USE_LDOPT = +endif + +# Enable this if you want link time optimizations (LTO). +ifeq ($(USE_LTO),) + USE_LTO = yes +endif + +# Enable this if you want to see the full log while compiling. +ifeq ($(USE_VERBOSE_COMPILE),) + USE_VERBOSE_COMPILE = no +endif + +# If enabled, this option makes the build process faster by not compiling +# modules not used in the current configuration. +ifeq ($(USE_SMART_BUILD),) + USE_SMART_BUILD = yes +endif + +# +# Build global options +############################################################################## + +############################################################################## +# Architecture or project specific options +# + +# Stack size to be allocated to the Cortex-M process stack. This stack is +# the stack used by the main() thread. +ifeq ($(USE_PROCESS_STACKSIZE),) + USE_PROCESS_STACKSIZE = 0x200 +endif + +# Stack size to the allocated to the Cortex-M main/exceptions stack. This +# stack is used for processing interrupts and exceptions. +ifeq ($(USE_EXCEPTIONS_STACKSIZE),) + USE_EXCEPTIONS_STACKSIZE = 0x200 +endif + +# Enables the use of FPU (no, softfp, hard). +ifeq ($(USE_FPU),) + USE_FPU = no +endif + +# FPU-related options. +ifeq ($(USE_FPU_OPT),) + USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 +endif + +# +# Architecture or project specific options +############################################################################## + +############################################################################## +# Project, target, sources and paths +# + +# Define project name here +PROJECT = app_adcs + +# Target settings. +MCU = cortex-m0 +BOARD = ORESAT_ADCS_V1_2 + +# Project sources. +PROJ_ROOT = ../../.. +APP_ROOT = . +PROJ_SRC = $(PROJ_ROOT)/common +PROJ_INC = $(PROJ_SRC)/include +TOOLCHAIN = $(PROJ_ROOT)/toolchain + +# Imported source files and paths. +CHIBIOS := $(PROJ_ROOT)/ext/ChibiOS +CONFDIR := $(APP_ROOT)/cfg +BUILDDIR := $(APP_ROOT)/build +DEPDIR := $(APP_ROOT)/.dep + +# Board specific directories. +BOARDDIR = $(PROJ_ROOT)/boards/$(BOARD) + +# Enable bootloader +ifeq ($(USE_BOOTLOADER),) + USE_BOOTLOADER = yes +endif + +# Project specific files. +include $(PROJ_SRC)/oresat.mk +include $(PROJ_SRC)/bmi088.mk +include $(PROJ_SRC)/mmc5883ma.mk +include $(PROJ_SRC)/ltc4305.mk + +# Licensing files. +include $(CHIBIOS)/os/license/license.mk +# Startup files. +include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f0xx.mk +# HAL-OSAL files (optional). +include $(CHIBIOS)/os/hal/hal.mk +include $(CHIBIOS)/os/hal/ports/STM32/STM32F0xx/platform.mk +include $(BOARDDIR)/board.mk +include $(CHIBIOS)/os/hal/osal/rt-nil/osal.mk +# RTOS files (optional). +include $(CHIBIOS)/os/rt/rt.mk +include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v6m.mk +# Auto-build files in ./source recursively. +include $(CHIBIOS)/tools/mk/autobuild.mk +# Other files (optional). +#include $(CHIBIOS)/test/lib/test.mk +#include $(CHIBIOS)/test/rt/rt_test.mk +#include $(CHIBIOS)/test/oslib/oslib_test.mk +include $(CHIBIOS)/os/hal/lib/streams/streams.mk + +# Define linker script file here +ifeq ($(USE_BOOTLOADER),yes) + LDSCRIPT= $(PROJ_ROOT)/ld/STM32F091xC-app.ld +else + LDSCRIPT= $(PROJ_ROOT)/ld/STM32F091xC-app-noboot.ld +endif + +# C sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CSRC = $(ALLCSRC) \ + $(TESTSRC) \ + main.c + +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = $(ALLCPPSRC) + +# List ASM source files here. +ASMSRC = $(ALLASMSRC) + +# List ASM with preprocessor source files here. +ASMXSRC = $(ALLXASMSRC) + +# Inclusion directories. +INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC) + +# Define C warning options here. +CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes + +# Define C++ warning options here. +CPPWARN = -Wall -Wextra -Wundef + +# +# Project, target, sources and paths +############################################################################## + +############################################################################## +# Start of user section +# + +# List all user C define here, like -D_DEBUG=1 +UDEFS = + +# Define ASM defines here +UADEFS = + +# List all user directories here +UINCDIR = $(PROJ_INC) + +# List the user directory to look for the libraries here +ULIBDIR = $(PROJ_SRC) + +# List all user libraries here +ULIBS = + +# +# End of user section +############################################################################## + +############################################################################## +# Common rules +# + +RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk +include $(RULESPATH)/arm-none-eabi.mk +include $(RULESPATH)/rules.mk +include $(TOOLCHAIN)/toolchain.mk + +# +# Common rules +############################################################################## + +############################################################################## +# Custom rules +# + +# +# Custom rules +############################################################################## diff --git a/src/f0/app_adcs/README.md b/src/f0/app_adcs/README.md new file mode 100644 index 00000000..1df5134b --- /dev/null +++ b/src/f0/app_adcs/README.md @@ -0,0 +1,12 @@ +# Application Main Directory +## Directory Structure +This folder contains the root of an applications sources. It contains +several files and folders: +* [main.c](main.c): The main program file called by ChibiOS. Contains + initialization code and registers threads and functions. +* [Makefile](Makefile): The main Makefile for the application. Sources + all other build files. +* [cfg](cfg): The directory containing ChibiOS's configuration files for + this application. +* [source](source): The directory where application code is put. + Everything within this directory automatically builds. diff --git a/src/f0/app_adcs/cfg/CO_driver_custom.h b/src/f0/app_adcs/cfg/CO_driver_custom.h new file mode 100644 index 00000000..4d72b881 --- /dev/null +++ b/src/f0/app_adcs/cfg/CO_driver_custom.h @@ -0,0 +1,13 @@ +#ifndef CO_DRIVER_CUSTOM_H +#define CO_DRIVER_CUSTOM_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* CO_DRIVER_CUSTOM_H */ diff --git a/src/f0/app_adcs/cfg/chconf.h b/src/f0/app_adcs/cfg/chconf.h new file mode 100644 index 00000000..8b7db1d3 --- /dev/null +++ b/src/f0/app_adcs/cfg/chconf.h @@ -0,0 +1,763 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file rt/templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ +#define _CHIBIOS_RT_CONF_VER_6_1_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#if !defined(CH_CFG_ST_RESOLUTION) +#define CH_CFG_ST_RESOLUTION 32 +#endif + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#if !defined(CH_CFG_ST_FREQUENCY) +#define CH_CFG_ST_FREQUENCY 10000 +#endif + +/** + * @brief Time intervals data size. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_INTERVALS_SIZE) +#define CH_CFG_INTERVALS_SIZE 32 +#endif + +/** + * @brief Time types data size. + * @note Allowed values are 16 or 32 bits. + */ +#if !defined(CH_CFG_TIME_TYPES_SIZE) +#define CH_CFG_TIME_TYPES_SIZE 32 +#endif + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#if !defined(CH_CFG_ST_TIMEDELTA) +#define CH_CFG_ST_TIMEDELTA 2 +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#if !defined(CH_CFG_TIME_QUANTUM) +#define CH_CFG_TIME_QUANTUM 0 +#endif + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#if !defined(CH_CFG_NO_IDLE_THREAD) +#define CH_CFG_NO_IDLE_THREAD FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_OPTIMIZE_SPEED) +#define CH_CFG_OPTIMIZE_SPEED TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_TM) +#define CH_CFG_USE_TM FALSE +#endif + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_REGISTRY) +#define CH_CFG_USE_REGISTRY TRUE +#endif + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_WAITEXIT) +#define CH_CFG_USE_WAITEXIT TRUE +#endif + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_SEMAPHORES) +#define CH_CFG_USE_SEMAPHORES TRUE +#endif + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE +#endif + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MUTEXES) +#define CH_CFG_USE_MUTEXES TRUE +#endif + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE +#endif + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#if !defined(CH_CFG_USE_CONDVARS) +#define CH_CFG_USE_CONDVARS TRUE +#endif + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE +#endif + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_EVENTS) +#define CH_CFG_USE_EVENTS TRUE +#endif + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE +#endif + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MESSAGES) +#define CH_CFG_USE_MESSAGES TRUE +#endif + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE +#endif + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#if !defined(CH_CFG_USE_DYNAMIC) +#define CH_CFG_USE_DYNAMIC TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name OSLIB options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#if !defined(CH_CFG_USE_MAILBOXES) +#define CH_CFG_USE_MAILBOXES TRUE +#endif + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCORE) +#define CH_CFG_USE_MEMCORE TRUE +#endif + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#if !defined(CH_CFG_MEMCORE_SIZE) +#define CH_CFG_MEMCORE_SIZE 0 +#endif + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#if !defined(CH_CFG_USE_HEAP) +#define CH_CFG_USE_HEAP TRUE +#endif + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMPOOLS) +#define CH_CFG_USE_MEMPOOLS TRUE +#endif + +/** + * @brief Objects FIFOs APIs. + * @details If enabled then the objects FIFOs APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_FIFOS) +#define CH_CFG_USE_OBJ_FIFOS TRUE +#endif + +/** + * @brief Pipes APIs. + * @details If enabled then the pipes APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_PIPES) +#define CH_CFG_USE_PIPES TRUE +#endif + +/** + * @brief Objects Caches APIs. + * @details If enabled then the objects caches APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_CACHES) +#define CH_CFG_USE_OBJ_CACHES TRUE +#endif + +/** + * @brief Delegate threads APIs. + * @details If enabled then the delegate threads APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_DELEGATES) +#define CH_CFG_USE_DELEGATES TRUE +#endif + +/** + * @brief Jobs Queues APIs. + * @details If enabled then the jobs queues APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_JOBS) +#define CH_CFG_USE_JOBS TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Objects factory options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Objects Factory APIs. + * @details If enabled then the objects factory APIs are included in the + * kernel. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_CFG_USE_FACTORY) +#define CH_CFG_USE_FACTORY FALSE +#endif + +/** + * @brief Maximum length for object names. + * @details If the specified length is zero then the name is stored by + * pointer but this could have unintended side effects. + */ +#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) +#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 +#endif + +/** + * @brief Enables the registry of generic objects. + */ +#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) +#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE +#endif + +/** + * @brief Enables factory for generic buffers. + */ +#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) +#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE +#endif + +/** + * @brief Enables factory for semaphores. + */ +#if !defined(CH_CFG_FACTORY_SEMAPHORES) +#define CH_CFG_FACTORY_SEMAPHORES TRUE +#endif + +/** + * @brief Enables factory for mailboxes. + */ +#if !defined(CH_CFG_FACTORY_MAILBOXES) +#define CH_CFG_FACTORY_MAILBOXES TRUE +#endif + +/** + * @brief Enables factory for objects FIFOs. + */ +#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) +#define CH_CFG_FACTORY_OBJ_FIFOS TRUE +#endif + +/** + * @brief Enables factory for Pipes. + */ +#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_PIPES TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_STATISTICS) +#define CH_DBG_STATISTICS FALSE +#endif + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) +#define CH_DBG_SYSTEM_STATE_CHECK TRUE +#endif + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_CHECKS) +#define CH_DBG_ENABLE_CHECKS TRUE +#endif + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_ASSERTS) +#define CH_DBG_ENABLE_ASSERTS TRUE +#endif + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_MASK) +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_ALL +#endif + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_BUFFER_SIZE) +#define CH_DBG_TRACE_BUFFER_SIZE 128 +#endif + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#if !defined(CH_DBG_ENABLE_STACK_CHECK) +#define CH_DBG_ENABLE_STACK_CHECK TRUE +#endif + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_FILL_THREADS) +#define CH_DBG_FILL_THREADS TRUE +#endif + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#if !defined(CH_DBG_THREADS_PROFILING) +#define CH_DBG_THREADS_PROFILING FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System structure extension. + * @details User fields added to the end of the @p ch_system_t structure. + */ +#define CH_CFG_SYSTEM_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief System initialization hook. + * @details User initialization code added to the @p chSysInit() function + * just before interrupts are enabled globally. + */ +#define CH_CFG_SYSTEM_INIT_HOOK() { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p _thread_init() function. + * + * @note It is invoked from within @p _thread_init() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +/** + * @brief Enables the use of the WFI instruction in the idle thread loop. + */ +#if !defined(CORTEX_ENABLE_WFI_IDLE) +#define CORTEX_ENABLE_WFI_IDLE TRUE +#endif + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/src/f0/app_adcs/cfg/halconf.h b/src/f0/app_adcs/cfg/halconf.h new file mode 100644 index 00000000..7a870188 --- /dev/null +++ b/src/f0/app_adcs/cfg/halconf.h @@ -0,0 +1,531 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef HALCONF_H +#define HALCONF_H + +#define _CHIBIOS_HAL_CONF_ +#define _CHIBIOS_HAL_CONF_VER_7_1_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC TRUE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN TRUE +#endif + +/** + * @brief Enables the cryptographic subsystem. + */ +#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__) +#define HAL_USE_CRY FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC TRUE +#endif + +/** + * @brief Enables the EFlash subsystem. + */ +#if !defined(HAL_USE_EFL) || defined(__DOXYGEN__) +#define HAL_USE_EFL FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C TRUE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM TRUE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL TRUE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB FALSE +#endif + +/** + * @brief Enables the SIO subsystem. + */ +#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__) +#define HAL_USE_SIO FALSE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the TRNG subsystem. + */ +#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__) +#define HAL_USE_TRNG FALSE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB FALSE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/** + * @brief Enables the WSPI subsystem. + */ +#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__) +#define HAL_USE_WSPI FALSE +#endif + +/*===========================================================================*/ +/* PAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__) +#define PAL_USE_CALLBACKS FALSE +#endif + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__) +#define PAL_USE_WAIT FALSE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/** + * @brief Enforces the driver to use direct callbacks rather than OSAL events. + */ +#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__) +#define CAN_ENFORCE_USE_CALLBACKS TRUE +#endif + +/*===========================================================================*/ +/* CRY driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the SW fall-back of the cryptographic driver. + * @details When enabled, this option, activates a fall-back software + * implementation for algorithms not supported by the underlying + * hardware. + * @note Fall-back implementations may not be present for all algorithms. + */ +#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__) +#define HAL_CRY_USE_FALLBACK FALSE +#endif + +/** + * @brief Makes the driver forcibly use the fall-back implementations. + */ +#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__) +#define HAL_CRY_ENFORCE_FALLBACK FALSE +#endif + +/*===========================================================================*/ +/* DAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__) +#define DAC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define DAC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the zero-copy API. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/** + * @brief OCR initialization constant for V20 cards. + */ +#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__) +#define SDC_INIT_OCR_V20 0x50FF8000U +#endif + +/** + * @brief OCR initialization constant for non-V20 cards. + */ +#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__) +#define SDC_INIT_OCR 0x80100000U +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 115200 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 16 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 16 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 256 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/** + * @brief Serial over USB number of buffers. + * @note The default is 2 buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_NUMBER 2 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables circular transfers APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__) +#define SPI_USE_CIRCULAR FALSE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/** + * @brief Handling method for SPI CS line. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__) +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#endif + +/*===========================================================================*/ +/* UART driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__) +#define UART_USE_WAIT FALSE +#endif + +/** + * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define UART_USE_MUTUAL_EXCLUSION FALSE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT FALSE +#endif + +/*===========================================================================*/ +/* WSPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__) +#define WSPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define WSPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +#endif /* HALCONF_H */ + +/** @} */ diff --git a/src/f0/app_adcs/cfg/mcuconf.h b/src/f0/app_adcs/cfg/mcuconf.h new file mode 100644 index 00000000..f6d5b3b7 --- /dev/null +++ b/src/f0/app_adcs/cfg/mcuconf.h @@ -0,0 +1,251 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef MCUCONF_H +#define MCUCONF_H + +/* + * STM32F0xx drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 3...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +#define STM32F0xx_MCUCONF + +/* + * HAL driver system settings. + */ +#define STM32_NO_INIT FALSE +#define STM32_PVD_ENABLE FALSE +#define STM32_PLS STM32_PLS_LEV0 +#define STM32_HSI_ENABLED TRUE +#define STM32_HSI14_ENABLED TRUE +#define STM32_HSI48_ENABLED FALSE +#define STM32_LSI_ENABLED TRUE +#define STM32_HSE_ENABLED TRUE +#define STM32_LSE_ENABLED FALSE +#define STM32_SW STM32_SW_PLL +#define STM32_PLLSRC STM32_PLLSRC_HSE +#define STM32_PREDIV_VALUE 1 +#define STM32_PLLMUL_VALUE 3 +#define STM32_HPRE STM32_HPRE_DIV1 +#define STM32_PPRE STM32_PPRE_DIV1 +#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK +#define STM32_MCOPRE STM32_MCOPRE_DIV1 +#define STM32_PLLNODIV STM32_PLLNODIV_DIV2 +#define STM32_CECSW STM32_CECSW_HSI +#define STM32_I2C1SW STM32_I2C1SW_HSI +#define STM32_USART1SW STM32_USART1SW_PCLK +#define STM32_RTCSEL STM32_RTCSEL_LSI + +/* + * IRQ system settings. + */ +#define STM32_IRQ_EXTI0_1_IRQ_PRIORITY 3 +#define STM32_IRQ_EXTI2_3_IRQ_PRIORITY 3 +#define STM32_IRQ_EXTI4_15_IRQ_PRIORITY 3 +#define STM32_IRQ_EXTI16_IRQ_PRIORITY 3 +#define STM32_IRQ_EXTI17_20_IRQ_PRIORITY 3 +#define STM32_IRQ_USART1_PRIORITY 3 +#define STM32_IRQ_USART2_PRIORITY 3 +#define STM32_IRQ_USART3_8_PRIORITY 3 + +/* + * ADC driver system settings. + */ +#define STM32_ADC_USE_ADC1 TRUE +#define STM32_ADC_ADC1_CKMODE STM32_ADC_CKMODE_ADCCLK +#define STM32_ADC_ADC1_DMA_PRIORITY 2 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2 +#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1) + +/* + * CAN driver system settings. + */ +#define STM32_CAN_USE_CAN1 TRUE +#define STM32_CAN_CAN1_IRQ_PRIORITY 3 + +/* + * DAC driver system settings. + */ +#define STM32_DAC_DUAL_MODE FALSE +#define STM32_DAC_USE_DAC1_CH1 TRUE +#define STM32_DAC_USE_DAC1_CH2 FALSE +#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 2 +#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 2 +#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2 +#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2 +#define STM32_DAC_DAC1_CH1_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_DAC_DAC1_CH2_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) + +/* + * GPT driver system settings. + */ +#define STM32_GPT_USE_TIM1 FALSE +#define STM32_GPT_USE_TIM2 FALSE +#define STM32_GPT_USE_TIM3 FALSE +#define STM32_GPT_USE_TIM6 FALSE +#define STM32_GPT_USE_TIM7 FALSE +#define STM32_GPT_USE_TIM14 FALSE +#define STM32_GPT_TIM1_IRQ_PRIORITY 2 +#define STM32_GPT_TIM2_IRQ_PRIORITY 2 +#define STM32_GPT_TIM3_IRQ_PRIORITY 2 +#define STM32_GPT_TIM6_IRQ_PRIORITY 2 +#define STM32_GPT_TIM7_IRQ_PRIORITY 2 +#define STM32_GPT_TIM14_IRQ_PRIORITY 2 + +/* + * I2C driver system settings. + */ +#define STM32_I2C_USE_I2C1 TRUE +#define STM32_I2C_USE_I2C2 FALSE +#define STM32_I2C_BUSY_TIMEOUT 50 +#define STM32_I2C_I2C1_IRQ_PRIORITY 3 +#define STM32_I2C_I2C2_IRQ_PRIORITY 3 +#define STM32_I2C_USE_DMA TRUE +#define STM32_I2C_I2C1_DMA_PRIORITY 1 +#define STM32_I2C_I2C2_DMA_PRIORITY 1 +#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") + +/* + * I2S driver system settings. + */ +#define STM32_I2S_USE_SPI1 FALSE +#define STM32_I2S_USE_SPI2 FALSE +#define STM32_I2S_SPI1_MODE (STM32_I2S_MODE_MASTER | \ + STM32_I2S_MODE_RX) +#define STM32_I2S_SPI2_MODE (STM32_I2S_MODE_MASTER | \ + STM32_I2S_MODE_RX) +#define STM32_I2S_SPI1_IRQ_PRIORITY 2 +#define STM32_I2S_SPI2_IRQ_PRIORITY 2 +#define STM32_I2S_SPI1_DMA_PRIORITY 1 +#define STM32_I2S_SPI2_DMA_PRIORITY 1 +#define STM32_I2S_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_I2S_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_I2S_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_I2S_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_I2S_DMA_ERROR_HOOK(i2sp) osalSysHalt("DMA failure") + +/* + * ICU driver system settings. + */ +#define STM32_ICU_USE_TIM1 FALSE +#define STM32_ICU_USE_TIM2 FALSE +#define STM32_ICU_USE_TIM3 FALSE +#define STM32_ICU_TIM1_IRQ_PRIORITY 3 +#define STM32_ICU_TIM2_IRQ_PRIORITY 3 +#define STM32_ICU_TIM3_IRQ_PRIORITY 3 + +/* + * PWM driver system settings. + */ +#define STM32_PWM_USE_ADVANCED TRUE +#define STM32_PWM_USE_TIM1 TRUE +#define STM32_PWM_USE_TIM2 FALSE +#define STM32_PWM_USE_TIM3 FALSE +#define STM32_PWM_TIM1_IRQ_PRIORITY 3 +#define STM32_PWM_TIM2_IRQ_PRIORITY 3 +#define STM32_PWM_TIM3_IRQ_PRIORITY 3 +#define STM32_PWM_TIM17_IRQ_PRIORITY 3 + +/* + * SERIAL driver system settings. + */ +#define STM32_SERIAL_USE_USART1 FALSE +#define STM32_SERIAL_USE_USART2 TRUE +#define STM32_SERIAL_USE_USART3 FALSE +#define STM32_SERIAL_USE_UART4 FALSE +#define STM32_SERIAL_USE_UART5 FALSE +#define STM32_SERIAL_USE_USART6 FALSE +#define STM32_SERIAL_USE_UART7 FALSE +#define STM32_SERIAL_USE_UART8 FALSE + +/* + * SPI driver system settings. + */ +#define STM32_SPI_USE_SPI1 FALSE +#define STM32_SPI_USE_SPI2 FALSE +#define STM32_SPI_SPI1_DMA_PRIORITY 1 +#define STM32_SPI_SPI2_DMA_PRIORITY 1 +#define STM32_SPI_SPI1_IRQ_PRIORITY 2 +#define STM32_SPI_SPI2_IRQ_PRIORITY 2 +#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure") + +/* + * ST driver system settings. + */ +#define STM32_ST_IRQ_PRIORITY 2 +#define STM32_ST_USE_TIMER 2 + +/* + * UART driver system settings. + */ +#define STM32_UART_USE_USART1 FALSE +#define STM32_UART_USE_USART2 FALSE +#define STM32_UART_USE_USART3 FALSE +#define STM32_UART_USE_UART4 FALSE +#define STM32_UART_USE_UART5 FALSE +#define STM32_UART_USE_USART6 FALSE +#define STM32_UART_USE_UART7 FALSE +#define STM32_UART_USE_UART8 FALSE +#define STM32_UART_USART1_DMA_PRIORITY 0 +#define STM32_UART_USART2_DMA_PRIORITY 0 +#define STM32_UART_USART3_DMA_PRIORITY 0 +#define STM32_UART_UART4_DMA_PRIORITY 0 +#define STM32_UART_UART5_DMA_PRIORITY 0 +#define STM32_UART_USART6_DMA_PRIORITY 0 +#define STM32_UART_UART7_DMA_PRIORITY 0 +#define STM32_UART_UART8_DMA_PRIORITY 0 +#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_UART_UART4_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_UART_UART4_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_UART_UART5_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_UART_UART5_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_UART_UART7_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3) +#define STM32_UART_UART7_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2) +#define STM32_UART_UART8_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5) +#define STM32_UART_UART8_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4) +#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure") + +/* + * WDG driver system settings. + */ +#define STM32_WDG_USE_IWDG FALSE + +#endif /* MCUCONF_H */ diff --git a/src/f0/app_adcs/main.c b/src/f0/app_adcs/main.c new file mode 100644 index 00000000..7e35f4f9 --- /dev/null +++ b/src/f0/app_adcs/main.c @@ -0,0 +1,75 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* ChibiOS header files */ +#include "ch.h" +#include "hal.h" + +/* Project header files */ +#include "oresat.h" +#include "blink.h" +#include "source/adcs.h" + +static worker_t blink_worker; +static thread_descriptor_t blink_desc = { + .name = "Blink", + .wbase = THD_WORKING_AREA_BASE(blink_wa), + .wend = THD_WORKING_AREA_END(blink_wa), + .prio = NORMALPRIO, + .funcp = blink, + .arg = NULL +}; +static worker_t adcs_worker; +static thread_descriptor_t adcs_desc = { + .name = "ADCS", + .wbase = THD_WORKING_AREA_BASE(adcs_wa), + .wend = THD_WORKING_AREA_END(adcs_wa), + .prio = NORMALPRIO, + .funcp = adcs, + .arg = NULL +}; + +static oresat_config_t oresat_conf = { + .cand = &CAND1, + .node_id = ORESAT_DEFAULT_ID, + .bitrate = ORESAT_DEFAULT_BITRATE, +}; + +/** + * @brief App Initialization + */ +static void app_init(void) +{ + /* App initialization */ + reg_worker(&blink_worker, &blink_desc, false, true); + reg_worker(&adcs_worker, &adcs_desc, false, true); + + /* Start up debug output */ + sdStart(&SD2, NULL); +} + +/** + * @brief Main Application + */ +int main(void) +{ + // Initialize and start + oresat_init(&oresat_conf); + app_init(); + + oresat_start(); + return 0; +} diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c new file mode 100644 index 00000000..156215ee --- /dev/null +++ b/src/f0/app_adcs/source/ObjDict/OD.c @@ -0,0 +1,4372 @@ +/******************************************************************************* + CANopen Object Dictionary definition for CANopenNode V4 + + This file was automatically generated by CANopenEditor v4.0-51-g2d9b1ad + + https://github.com/CANopenNode/CANopenNode + https://github.com/CANopenNode/CANopenEditor + + DON'T EDIT THIS FILE MANUALLY, UNLESS YOU KNOW WHAT YOU ARE DOING !!!! +*******************************************************************************/ + +#define OD_DEFINITION +#include "301/CO_ODinterface.h" +#include "OD.h" + +#if CO_VERSION_MAJOR < 4 +#error This Object dictionary is compatible with CANopenNode V4.0 and above! +#endif + +/******************************************************************************* + OD data initialization of all groups +*******************************************************************************/ +OD_ATTR_ROM OD_ROM_t OD_ROM = { + .x1000_deviceType = 0x00000000, + .x1008_manufacturerDeviceName = {'O', 'r', 'e', 'S', 'a', 't', ' ', 'N', 'o', 'd', 'e', 0}, + .x1009_manufacturerHardwareVersion = {'0', '.', '0', 0}, + .x100A_manufacturerSoftwareVersion = {'0', '.', '0', '.', '0', 0}, + .x1018_identity = { + .highestSub_indexSupported = 0x04, + .vendor_ID = 0x00000000, + .productCode = 0x00000000, + .revisionNumber = 0x00000000, + .serialNumber = 0x00000000 + }, + .x1029_errorBehavior_sub0 = 0x06, + .x1029_errorBehavior = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01} +}; + +OD_ATTR_RAM OD_RAM_t OD_RAM = { + .x1001_errorRegister = 0x00, + .x1002_manufacturerStatusRegister = 0x00000000, + .x1003_pre_definedErrorField_sub0 = 0x00, + .x1003_pre_definedErrorField = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + .x1010_storeParameters_sub0 = 0x04, + .x1010_storeParameters = {0x00000001, 0x00000001, 0x00000001, 0x00000001}, + .x1011_restoreDefaultParameters_sub0 = 0x04, + .x1011_restoreDefaultParameters = {0x00000001, 0x00000001, 0x00000001, 0x00000001}, + .x2010_SCET = 0x0000000000000000, + .x2011_UTC = 0x0000000000000000, + .x2020_MCU_UniqueDeviceID_sub0 = 0x03, + .x2020_MCU_UniqueDeviceID = {0x00000000, 0x00000000, 0x00000000}, + .x2021_MCU_Calibration = { + .highestSub_indexSupported = 0x03, + .TS_CAL1 = 0x0000, + .TS_CAL2 = 0x0000, + .VREFINT_CAL = 0x0000 + }, + .x2022_MCU_Sensors = { + .highestSub_indexSupported = 0x08, + .temperature = 0, + .VREFINT = 0x00, + .VBAT = 0x00, + .VBUSP_Current = 0x00, + .temperatureRaw = 0x0000, + .VREFINT_Raw = 0x0000, + .VBAT_Raw = 0x0000, + .VBUSP_CurrentRaw = 0x0000 + }, + .x2100_errorStatusBits = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + .x6000_gyroscope = { + .highestSub_indexSupported = 0x06, + .pitchRate = 0, + .yawRate = 0, + .rollRate = 0, + .pitchRateRaw = 0x0000, + .yawRateRaw = 0x0000, + .rollRateRaw = 0x0000 + }, + .x6001_acceleration = { + .highestSub_indexSupported = 0x06, + .accX = 0, + .accY = 0, + .accZ = 0, + .accXRaw = 0x0000, + .accYRaw = 0x0000, + .accZRaw = 0x0000 + }, + .x6002_IMU_Temperature = 0, + .x6003_magnetometerPZ1 = { + .highestSub_indexSupported = 0x03, + .magX = 0, + .magY = 0, + .magZ = 0 + }, + .x6004_magnetometerPZ2 = { + .highestSub_indexSupported = 0x03, + .magX = 0, + .magY = 0, + .magZ = 0 + }, + .x6005_magnetometerMZ1 = { + .highestSub_indexSupported = 0x03, + .magX = 0, + .magY = 0, + .magZ = 0 + }, + .x6006_magnetometerMZ2 = { + .highestSub_indexSupported = 0x03, + .magX = 0, + .magY = 0, + .magZ = 0 + } +}; + +OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { + .x1005_COB_ID_SYNCMessage = 0x00000080, + .x1006_communicationCyclePeriod = 0x00000000, + .x1007_synchronousWindowLength = 0x00000000, + .x1014_COB_ID_EMCY = 0x00000080, + .x1015_inhibitTimeEMCY = 0x0000, + .x1016_consumerHeartbeatTime_sub0 = 0x08, + .x1016_consumerHeartbeatTime = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + .x1017_producerHeartbeatTime = 0x03E8, + .x1019_synchronousCounterOverflowValue = 0x00, + .x1200_SDOServerParameter = { + .highestSub_indexSupported = 0x03, + .COB_IDClientToServer = 0x80000000, + .COB_IDServerToClient = 0x80000000, + .node_IDOfTheSDOClient = 0x01 + }, + .x1400_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000200, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1401_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000300, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1402_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000400, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1403_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000500, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1404_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000200, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1405_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000300, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1406_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000400, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1407_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000500, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1408_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000200, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1409_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000300, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x140A_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000400, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x140B_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000500, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x140C_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000200, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x140D_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000300, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x140E_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000400, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x140F_RPDOCommunicationParameter = { + .highestSub_indexSupported = 0x05, + .COB_IDUsedByRPDO = 0x80000500, + .transmissionType = 0xFE, + .eventTimer = 0x0000 + }, + .x1600_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1601_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1602_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1603_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1604_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1605_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1606_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1607_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1608_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1609_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x160A_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x160B_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x160C_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x160D_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x160E_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x160F_RPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1800_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0x40000180, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x2710, + .SYNCStartValue = 0x00 + }, + .x1801_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0x40000280, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x2710, + .SYNCStartValue = 0x00 + }, + .x1802_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0x40000380, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x2710, + .SYNCStartValue = 0x00 + }, + .x1803_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0x40000480, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1804_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0x40000180, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1805_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0x40000280, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1806_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000380, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1807_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000480, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1808_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000180, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1809_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000280, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x180A_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000380, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x180B_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000480, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x180C_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000180, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x180D_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000280, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x180E_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000380, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x180F_TPDOCommunicationParameter = { + .highestSub_indexSupported = 0x06, + .COB_IDUsedByTPDO = 0xC0000480, + .transmissionType = 0xFE, + .inhibitTime = 0x0000, + .compatibilityEntry = 0x00, + .eventTimer = 0x0000, + .SYNCStartValue = 0x00 + }, + .x1A00_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x03, + .applicationObject_1 = 0x60000110, + .applicationObject_2 = 0x60000210, + .applicationObject_3 = 0x60000310, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A01_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x03, + .applicationObject_1 = 0x60010110, + .applicationObject_2 = 0x60010210, + .applicationObject_3 = 0x60010310, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A02_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x01, + .applicationObject_1 = 0x60020008, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A03_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x04, + .applicationObject_1 = 0x60030110, + .applicationObject_2 = 0x60030210, + .applicationObject_3 = 0x60030310, + .applicationObject_4 = 0x60040110, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A04_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x04, + .applicationObject_1 = 0x60040210, + .applicationObject_2 = 0x60040310, + .applicationObject_3 = 0x60050110, + .applicationObject_4 = 0x60050210, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A05_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x04, + .applicationObject_1 = 0x60050310, + .applicationObject_2 = 0x60060110, + .applicationObject_3 = 0x60060210, + .applicationObject_4 = 0x60060310, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A06_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A07_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A08_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A09_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A0A_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A0B_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A0C_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A0D_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A0E_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1A0F_TPDOMappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x00, + .applicationObject_1 = 0x00000000, + .applicationObject_2 = 0x00000000, + .applicationObject_3 = 0x00000000, + .applicationObject_4 = 0x00000000, + .applicationObject_5 = 0x00000000, + .applicationObject_6 = 0x00000000, + .applicationObject_7 = 0x00000000, + .applicationObject_8 = 0x00000000 + }, + .x1F80_NMTStartup = 0x00000008 +}; + +OD_ATTR_PERSIST_MFR OD_PERSIST_MFR_t OD_PERSIST_MFR = { + .x2000_BUS_Management = { + .highestSub_indexSupported = 0x04, + .bdefault = 0x00, + .ttoggle = 0x00, + .ntoggle = 0x00, + .ctoggle = 0x00 + } +}; + + + +/******************************************************************************* + All OD objects (constant definitions) +*******************************************************************************/ +typedef struct { + OD_obj_var_t o_1000_deviceType; + OD_obj_var_t o_1001_errorRegister; + OD_obj_var_t o_1002_manufacturerStatusRegister; + OD_obj_array_t o_1003_pre_definedErrorField; + OD_obj_var_t o_1005_COB_ID_SYNCMessage; + OD_obj_var_t o_1006_communicationCyclePeriod; + OD_obj_var_t o_1007_synchronousWindowLength; + OD_obj_var_t o_1008_manufacturerDeviceName; + OD_obj_var_t o_1009_manufacturerHardwareVersion; + OD_obj_var_t o_100A_manufacturerSoftwareVersion; + OD_obj_array_t o_1010_storeParameters; + OD_obj_array_t o_1011_restoreDefaultParameters; + OD_obj_var_t o_1014_COB_ID_EMCY; + OD_obj_var_t o_1015_inhibitTimeEMCY; + OD_obj_array_t o_1016_consumerHeartbeatTime; + OD_obj_var_t o_1017_producerHeartbeatTime; + OD_obj_record_t o_1018_identity[5]; + OD_obj_var_t o_1019_synchronousCounterOverflowValue; + OD_obj_array_t o_1029_errorBehavior; + OD_obj_record_t o_1200_SDOServerParameter[4]; + OD_obj_record_t o_1400_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1401_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1402_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1403_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1404_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1405_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1406_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1407_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1408_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1409_RPDOCommunicationParameter[4]; + OD_obj_record_t o_140A_RPDOCommunicationParameter[4]; + OD_obj_record_t o_140B_RPDOCommunicationParameter[4]; + OD_obj_record_t o_140C_RPDOCommunicationParameter[4]; + OD_obj_record_t o_140D_RPDOCommunicationParameter[4]; + OD_obj_record_t o_140E_RPDOCommunicationParameter[4]; + OD_obj_record_t o_140F_RPDOCommunicationParameter[4]; + OD_obj_record_t o_1600_RPDOMappingParameter[9]; + OD_obj_record_t o_1601_RPDOMappingParameter[9]; + OD_obj_record_t o_1602_RPDOMappingParameter[9]; + OD_obj_record_t o_1603_RPDOMappingParameter[9]; + OD_obj_record_t o_1604_RPDOMappingParameter[9]; + OD_obj_record_t o_1605_RPDOMappingParameter[9]; + OD_obj_record_t o_1606_RPDOMappingParameter[9]; + OD_obj_record_t o_1607_RPDOMappingParameter[9]; + OD_obj_record_t o_1608_RPDOMappingParameter[9]; + OD_obj_record_t o_1609_RPDOMappingParameter[9]; + OD_obj_record_t o_160A_RPDOMappingParameter[9]; + OD_obj_record_t o_160B_RPDOMappingParameter[9]; + OD_obj_record_t o_160C_RPDOMappingParameter[9]; + OD_obj_record_t o_160D_RPDOMappingParameter[9]; + OD_obj_record_t o_160E_RPDOMappingParameter[9]; + OD_obj_record_t o_160F_RPDOMappingParameter[9]; + OD_obj_record_t o_1800_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1801_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1802_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1803_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1804_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1805_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1806_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1807_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1808_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1809_TPDOCommunicationParameter[7]; + OD_obj_record_t o_180A_TPDOCommunicationParameter[7]; + OD_obj_record_t o_180B_TPDOCommunicationParameter[7]; + OD_obj_record_t o_180C_TPDOCommunicationParameter[7]; + OD_obj_record_t o_180D_TPDOCommunicationParameter[7]; + OD_obj_record_t o_180E_TPDOCommunicationParameter[7]; + OD_obj_record_t o_180F_TPDOCommunicationParameter[7]; + OD_obj_record_t o_1A00_TPDOMappingParameter[9]; + OD_obj_record_t o_1A01_TPDOMappingParameter[9]; + OD_obj_record_t o_1A02_TPDOMappingParameter[9]; + OD_obj_record_t o_1A03_TPDOMappingParameter[9]; + OD_obj_record_t o_1A04_TPDOMappingParameter[9]; + OD_obj_record_t o_1A05_TPDOMappingParameter[9]; + OD_obj_record_t o_1A06_TPDOMappingParameter[9]; + OD_obj_record_t o_1A07_TPDOMappingParameter[9]; + OD_obj_record_t o_1A08_TPDOMappingParameter[9]; + OD_obj_record_t o_1A09_TPDOMappingParameter[9]; + OD_obj_record_t o_1A0A_TPDOMappingParameter[9]; + OD_obj_record_t o_1A0B_TPDOMappingParameter[9]; + OD_obj_record_t o_1A0C_TPDOMappingParameter[9]; + OD_obj_record_t o_1A0D_TPDOMappingParameter[9]; + OD_obj_record_t o_1A0E_TPDOMappingParameter[9]; + OD_obj_record_t o_1A0F_TPDOMappingParameter[9]; + OD_obj_var_t o_1F80_NMTStartup; + OD_obj_record_t o_2000_BUS_Management[5]; + OD_obj_var_t o_2010_SCET; + OD_obj_var_t o_2011_UTC; + OD_obj_array_t o_2020_MCU_UniqueDeviceID; + OD_obj_record_t o_2021_MCU_Calibration[4]; + OD_obj_record_t o_2022_MCU_Sensors[9]; + OD_obj_var_t o_2100_errorStatusBits; + OD_obj_record_t o_6000_gyroscope[7]; + OD_obj_record_t o_6001_acceleration[7]; + OD_obj_var_t o_6002_IMU_Temperature; + OD_obj_record_t o_6003_magnetometerPZ1[4]; + OD_obj_record_t o_6004_magnetometerPZ2[4]; + OD_obj_record_t o_6005_magnetometerMZ1[4]; + OD_obj_record_t o_6006_magnetometerMZ2[4]; +} ODObjs_t; + +static CO_PROGMEM ODObjs_t ODObjs = { + .o_1000_deviceType = { + .dataOrig = &OD_ROM.x1000_deviceType, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + .o_1001_errorRegister = { + .dataOrig = &OD_RAM.x1001_errorRegister, + .attribute = ODA_SDO_R | ODA_TRPDO, + .dataLength = 1 + }, + .o_1002_manufacturerStatusRegister = { + .dataOrig = &OD_RAM.x1002_manufacturerStatusRegister, + .attribute = ODA_SDO_R | ODA_TRPDO | ODA_MB, + .dataLength = 4 + }, + .o_1003_pre_definedErrorField = { + .dataOrig0 = &OD_RAM.x1003_pre_definedErrorField_sub0, + .dataOrig = &OD_RAM.x1003_pre_definedErrorField[0], + .attribute0 = ODA_SDO_RW, + .attribute = ODA_SDO_R | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t) + }, + .o_1005_COB_ID_SYNCMessage = { + .dataOrig = &OD_PERSIST_COMM.x1005_COB_ID_SYNCMessage, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1006_communicationCyclePeriod = { + .dataOrig = &OD_PERSIST_COMM.x1006_communicationCyclePeriod, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1007_synchronousWindowLength = { + .dataOrig = &OD_PERSIST_COMM.x1007_synchronousWindowLength, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1008_manufacturerDeviceName = { + .dataOrig = &OD_ROM.x1008_manufacturerDeviceName[0], + .attribute = ODA_SDO_R | ODA_STR, + .dataLength = 11 + }, + .o_1009_manufacturerHardwareVersion = { + .dataOrig = &OD_ROM.x1009_manufacturerHardwareVersion[0], + .attribute = ODA_SDO_R | ODA_STR, + .dataLength = 3 + }, + .o_100A_manufacturerSoftwareVersion = { + .dataOrig = &OD_ROM.x100A_manufacturerSoftwareVersion[0], + .attribute = ODA_SDO_R | ODA_STR, + .dataLength = 5 + }, + .o_1010_storeParameters = { + .dataOrig0 = &OD_RAM.x1010_storeParameters_sub0, + .dataOrig = &OD_RAM.x1010_storeParameters[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_RW | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t) + }, + .o_1011_restoreDefaultParameters = { + .dataOrig0 = &OD_RAM.x1011_restoreDefaultParameters_sub0, + .dataOrig = &OD_RAM.x1011_restoreDefaultParameters[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_RW | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t) + }, + .o_1014_COB_ID_EMCY = { + .dataOrig = &OD_PERSIST_COMM.x1014_COB_ID_EMCY, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1015_inhibitTimeEMCY = { + .dataOrig = &OD_PERSIST_COMM.x1015_inhibitTimeEMCY, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + .o_1016_consumerHeartbeatTime = { + .dataOrig0 = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime_sub0, + .dataOrig = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_RW | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t) + }, + .o_1017_producerHeartbeatTime = { + .dataOrig = &OD_PERSIST_COMM.x1017_producerHeartbeatTime, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + .o_1018_identity = { + { + .dataOrig = &OD_ROM.x1018_identity.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_ROM.x1018_identity.vendor_ID, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_ROM.x1018_identity.productCode, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_ROM.x1018_identity.revisionNumber, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_ROM.x1018_identity.serialNumber, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + } + }, + .o_1019_synchronousCounterOverflowValue = { + .dataOrig = &OD_PERSIST_COMM.x1019_synchronousCounterOverflowValue, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + .o_1029_errorBehavior = { + .dataOrig0 = &OD_ROM.x1029_errorBehavior_sub0, + .dataOrig = &OD_ROM.x1029_errorBehavior[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_RW, + .dataElementLength = 1, + .dataElementSizeof = sizeof(uint8_t) + }, + .o_1200_SDOServerParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.COB_IDClientToServer, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.COB_IDServerToClient, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.node_IDOfTheSDOClient, + .subIndex = 3, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1400_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1401_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1402_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1403_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1404_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1405_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1406_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1407_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1408_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1409_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_140A_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_140B_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_140C_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_140D_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_140E_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_140F_RPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + } + }, + .o_1600_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1601_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1602_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1603_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1604_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1605_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1606_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1607_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1608_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1609_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_160A_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_160B_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_160C_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_160D_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_160E_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_160F_RPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1800_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1801_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1802_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1803_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1804_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1805_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1806_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1807_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1808_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1809_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_180A_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_180B_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_180C_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_180D_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_180E_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_180F_TPDOCommunicationParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.transmissionType, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.inhibitTime, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.compatibilityEntry, + .subIndex = 4, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.eventTimer, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.SYNCStartValue, + .subIndex = 6, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_1A00_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A01_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A02_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A03_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A04_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A05_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A06_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A07_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A08_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A09_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A0A_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A0B_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A0C_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A0D_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A0E_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1A0F_TPDOMappingParameter = { + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .subIndex = 0, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_1, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_2, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_3, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_4, + .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_5, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_6, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_7, + .subIndex = 7, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_8, + .subIndex = 8, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + } + }, + .o_1F80_NMTStartup = { + .dataOrig = &OD_PERSIST_COMM.x1F80_NMTStartup, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_2000_BUS_Management = { + { + .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.bdefault, + .subIndex = 1, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.ttoggle, + .subIndex = 2, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.ntoggle, + .subIndex = 3, + .attribute = ODA_SDO_RW, + .dataLength = 1 + }, + { + .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.ctoggle, + .subIndex = 4, + .attribute = ODA_SDO_RW, + .dataLength = 1 + } + }, + .o_2010_SCET = { + .dataOrig = &OD_RAM.x2010_SCET, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 8 + }, + .o_2011_UTC = { + .dataOrig = &OD_RAM.x2011_UTC, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 8 + }, + .o_2020_MCU_UniqueDeviceID = { + .dataOrig0 = &OD_RAM.x2020_MCU_UniqueDeviceID_sub0, + .dataOrig = &OD_RAM.x2020_MCU_UniqueDeviceID[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t) + }, + .o_2021_MCU_Calibration = { + { + .dataOrig = &OD_RAM.x2021_MCU_Calibration.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x2021_MCU_Calibration.VREFINT_CAL, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + } + }, + .o_2022_MCU_Sensors = { + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.temperature, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.VREFINT, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBAT, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBUSP_Current, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.temperatureRaw, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.VREFINT_Raw, + .subIndex = 6, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBAT_Raw, + .subIndex = 7, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBUSP_CurrentRaw, + .subIndex = 8, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + }, + .o_2100_errorStatusBits = { + .dataOrig = &OD_RAM.x2100_errorStatusBits[0], + .attribute = ODA_SDO_R, + .dataLength = 10 + }, + .o_6000_gyroscope = { + { + .dataOrig = &OD_RAM.x6000_gyroscope.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6000_gyroscope.pitchRate, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6000_gyroscope.yawRate, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6000_gyroscope.rollRate, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6000_gyroscope.pitchRateRaw, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6000_gyroscope.yawRateRaw, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6000_gyroscope.rollRateRaw, + .subIndex = 6, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + }, + .o_6001_acceleration = { + { + .dataOrig = &OD_RAM.x6001_acceleration.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6001_acceleration.accX, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6001_acceleration.accY, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6001_acceleration.accZ, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6001_acceleration.accXRaw, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6001_acceleration.accYRaw, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6001_acceleration.accZRaw, + .subIndex = 6, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + }, + .o_6002_IMU_Temperature = { + .dataOrig = &OD_RAM.x6002_IMU_Temperature, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + .o_6003_magnetometerPZ1 = { + { + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magX, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magY, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magZ, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + }, + .o_6004_magnetometerPZ2 = { + { + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magX, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magY, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magZ, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + }, + .o_6005_magnetometerMZ1 = { + { + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magX, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magY, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magZ, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + }, + .o_6006_magnetometerMZ2 = { + { + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.highestSub_indexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magX, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magY, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magZ, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + } + } +}; + + +/******************************************************************************* + Object dictionary +*******************************************************************************/ +static OD_ATTR_OD OD_entry_t ODList[] = { + {0x1000, 0x01, ODT_VAR, &ODObjs.o_1000_deviceType, NULL}, + {0x1001, 0x01, ODT_VAR, &ODObjs.o_1001_errorRegister, NULL}, + {0x1002, 0x01, ODT_VAR, &ODObjs.o_1002_manufacturerStatusRegister, NULL}, + {0x1003, 0x09, ODT_ARR, &ODObjs.o_1003_pre_definedErrorField, NULL}, + {0x1005, 0x01, ODT_VAR, &ODObjs.o_1005_COB_ID_SYNCMessage, NULL}, + {0x1006, 0x01, ODT_VAR, &ODObjs.o_1006_communicationCyclePeriod, NULL}, + {0x1007, 0x01, ODT_VAR, &ODObjs.o_1007_synchronousWindowLength, NULL}, + {0x1008, 0x01, ODT_VAR, &ODObjs.o_1008_manufacturerDeviceName, NULL}, + {0x1009, 0x01, ODT_VAR, &ODObjs.o_1009_manufacturerHardwareVersion, NULL}, + {0x100A, 0x01, ODT_VAR, &ODObjs.o_100A_manufacturerSoftwareVersion, NULL}, + {0x1010, 0x05, ODT_ARR, &ODObjs.o_1010_storeParameters, NULL}, + {0x1011, 0x05, ODT_ARR, &ODObjs.o_1011_restoreDefaultParameters, NULL}, + {0x1014, 0x01, ODT_VAR, &ODObjs.o_1014_COB_ID_EMCY, NULL}, + {0x1015, 0x01, ODT_VAR, &ODObjs.o_1015_inhibitTimeEMCY, NULL}, + {0x1016, 0x09, ODT_ARR, &ODObjs.o_1016_consumerHeartbeatTime, NULL}, + {0x1017, 0x01, ODT_VAR, &ODObjs.o_1017_producerHeartbeatTime, NULL}, + {0x1018, 0x05, ODT_REC, &ODObjs.o_1018_identity, NULL}, + {0x1019, 0x01, ODT_VAR, &ODObjs.o_1019_synchronousCounterOverflowValue, NULL}, + {0x1029, 0x07, ODT_ARR, &ODObjs.o_1029_errorBehavior, NULL}, + {0x1200, 0x04, ODT_REC, &ODObjs.o_1200_SDOServerParameter, NULL}, + {0x1400, 0x04, ODT_REC, &ODObjs.o_1400_RPDOCommunicationParameter, NULL}, + {0x1401, 0x04, ODT_REC, &ODObjs.o_1401_RPDOCommunicationParameter, NULL}, + {0x1402, 0x04, ODT_REC, &ODObjs.o_1402_RPDOCommunicationParameter, NULL}, + {0x1403, 0x04, ODT_REC, &ODObjs.o_1403_RPDOCommunicationParameter, NULL}, + {0x1404, 0x04, ODT_REC, &ODObjs.o_1404_RPDOCommunicationParameter, NULL}, + {0x1405, 0x04, ODT_REC, &ODObjs.o_1405_RPDOCommunicationParameter, NULL}, + {0x1406, 0x04, ODT_REC, &ODObjs.o_1406_RPDOCommunicationParameter, NULL}, + {0x1407, 0x04, ODT_REC, &ODObjs.o_1407_RPDOCommunicationParameter, NULL}, + {0x1408, 0x04, ODT_REC, &ODObjs.o_1408_RPDOCommunicationParameter, NULL}, + {0x1409, 0x04, ODT_REC, &ODObjs.o_1409_RPDOCommunicationParameter, NULL}, + {0x140A, 0x04, ODT_REC, &ODObjs.o_140A_RPDOCommunicationParameter, NULL}, + {0x140B, 0x04, ODT_REC, &ODObjs.o_140B_RPDOCommunicationParameter, NULL}, + {0x140C, 0x04, ODT_REC, &ODObjs.o_140C_RPDOCommunicationParameter, NULL}, + {0x140D, 0x04, ODT_REC, &ODObjs.o_140D_RPDOCommunicationParameter, NULL}, + {0x140E, 0x04, ODT_REC, &ODObjs.o_140E_RPDOCommunicationParameter, NULL}, + {0x140F, 0x04, ODT_REC, &ODObjs.o_140F_RPDOCommunicationParameter, NULL}, + {0x1600, 0x09, ODT_REC, &ODObjs.o_1600_RPDOMappingParameter, NULL}, + {0x1601, 0x09, ODT_REC, &ODObjs.o_1601_RPDOMappingParameter, NULL}, + {0x1602, 0x09, ODT_REC, &ODObjs.o_1602_RPDOMappingParameter, NULL}, + {0x1603, 0x09, ODT_REC, &ODObjs.o_1603_RPDOMappingParameter, NULL}, + {0x1604, 0x09, ODT_REC, &ODObjs.o_1604_RPDOMappingParameter, NULL}, + {0x1605, 0x09, ODT_REC, &ODObjs.o_1605_RPDOMappingParameter, NULL}, + {0x1606, 0x09, ODT_REC, &ODObjs.o_1606_RPDOMappingParameter, NULL}, + {0x1607, 0x09, ODT_REC, &ODObjs.o_1607_RPDOMappingParameter, NULL}, + {0x1608, 0x09, ODT_REC, &ODObjs.o_1608_RPDOMappingParameter, NULL}, + {0x1609, 0x09, ODT_REC, &ODObjs.o_1609_RPDOMappingParameter, NULL}, + {0x160A, 0x09, ODT_REC, &ODObjs.o_160A_RPDOMappingParameter, NULL}, + {0x160B, 0x09, ODT_REC, &ODObjs.o_160B_RPDOMappingParameter, NULL}, + {0x160C, 0x09, ODT_REC, &ODObjs.o_160C_RPDOMappingParameter, NULL}, + {0x160D, 0x09, ODT_REC, &ODObjs.o_160D_RPDOMappingParameter, NULL}, + {0x160E, 0x09, ODT_REC, &ODObjs.o_160E_RPDOMappingParameter, NULL}, + {0x160F, 0x09, ODT_REC, &ODObjs.o_160F_RPDOMappingParameter, NULL}, + {0x1800, 0x07, ODT_REC, &ODObjs.o_1800_TPDOCommunicationParameter, NULL}, + {0x1801, 0x07, ODT_REC, &ODObjs.o_1801_TPDOCommunicationParameter, NULL}, + {0x1802, 0x07, ODT_REC, &ODObjs.o_1802_TPDOCommunicationParameter, NULL}, + {0x1803, 0x07, ODT_REC, &ODObjs.o_1803_TPDOCommunicationParameter, NULL}, + {0x1804, 0x07, ODT_REC, &ODObjs.o_1804_TPDOCommunicationParameter, NULL}, + {0x1805, 0x07, ODT_REC, &ODObjs.o_1805_TPDOCommunicationParameter, NULL}, + {0x1806, 0x07, ODT_REC, &ODObjs.o_1806_TPDOCommunicationParameter, NULL}, + {0x1807, 0x07, ODT_REC, &ODObjs.o_1807_TPDOCommunicationParameter, NULL}, + {0x1808, 0x07, ODT_REC, &ODObjs.o_1808_TPDOCommunicationParameter, NULL}, + {0x1809, 0x07, ODT_REC, &ODObjs.o_1809_TPDOCommunicationParameter, NULL}, + {0x180A, 0x07, ODT_REC, &ODObjs.o_180A_TPDOCommunicationParameter, NULL}, + {0x180B, 0x07, ODT_REC, &ODObjs.o_180B_TPDOCommunicationParameter, NULL}, + {0x180C, 0x07, ODT_REC, &ODObjs.o_180C_TPDOCommunicationParameter, NULL}, + {0x180D, 0x07, ODT_REC, &ODObjs.o_180D_TPDOCommunicationParameter, NULL}, + {0x180E, 0x07, ODT_REC, &ODObjs.o_180E_TPDOCommunicationParameter, NULL}, + {0x180F, 0x07, ODT_REC, &ODObjs.o_180F_TPDOCommunicationParameter, NULL}, + {0x1A00, 0x09, ODT_REC, &ODObjs.o_1A00_TPDOMappingParameter, NULL}, + {0x1A01, 0x09, ODT_REC, &ODObjs.o_1A01_TPDOMappingParameter, NULL}, + {0x1A02, 0x09, ODT_REC, &ODObjs.o_1A02_TPDOMappingParameter, NULL}, + {0x1A03, 0x09, ODT_REC, &ODObjs.o_1A03_TPDOMappingParameter, NULL}, + {0x1A04, 0x09, ODT_REC, &ODObjs.o_1A04_TPDOMappingParameter, NULL}, + {0x1A05, 0x09, ODT_REC, &ODObjs.o_1A05_TPDOMappingParameter, NULL}, + {0x1A06, 0x09, ODT_REC, &ODObjs.o_1A06_TPDOMappingParameter, NULL}, + {0x1A07, 0x09, ODT_REC, &ODObjs.o_1A07_TPDOMappingParameter, NULL}, + {0x1A08, 0x09, ODT_REC, &ODObjs.o_1A08_TPDOMappingParameter, NULL}, + {0x1A09, 0x09, ODT_REC, &ODObjs.o_1A09_TPDOMappingParameter, NULL}, + {0x1A0A, 0x09, ODT_REC, &ODObjs.o_1A0A_TPDOMappingParameter, NULL}, + {0x1A0B, 0x09, ODT_REC, &ODObjs.o_1A0B_TPDOMappingParameter, NULL}, + {0x1A0C, 0x09, ODT_REC, &ODObjs.o_1A0C_TPDOMappingParameter, NULL}, + {0x1A0D, 0x09, ODT_REC, &ODObjs.o_1A0D_TPDOMappingParameter, NULL}, + {0x1A0E, 0x09, ODT_REC, &ODObjs.o_1A0E_TPDOMappingParameter, NULL}, + {0x1A0F, 0x09, ODT_REC, &ODObjs.o_1A0F_TPDOMappingParameter, NULL}, + {0x1F80, 0x01, ODT_VAR, &ODObjs.o_1F80_NMTStartup, NULL}, + {0x2000, 0x05, ODT_REC, &ODObjs.o_2000_BUS_Management, NULL}, + {0x2010, 0x01, ODT_VAR, &ODObjs.o_2010_SCET, NULL}, + {0x2011, 0x01, ODT_VAR, &ODObjs.o_2011_UTC, NULL}, + {0x2020, 0x04, ODT_ARR, &ODObjs.o_2020_MCU_UniqueDeviceID, NULL}, + {0x2021, 0x04, ODT_REC, &ODObjs.o_2021_MCU_Calibration, NULL}, + {0x2022, 0x09, ODT_REC, &ODObjs.o_2022_MCU_Sensors, NULL}, + {0x2100, 0x01, ODT_VAR, &ODObjs.o_2100_errorStatusBits, NULL}, + {0x6000, 0x07, ODT_REC, &ODObjs.o_6000_gyroscope, NULL}, + {0x6001, 0x07, ODT_REC, &ODObjs.o_6001_acceleration, NULL}, + {0x6002, 0x01, ODT_VAR, &ODObjs.o_6002_IMU_Temperature, NULL}, + {0x6003, 0x04, ODT_REC, &ODObjs.o_6003_magnetometerPZ1, NULL}, + {0x6004, 0x04, ODT_REC, &ODObjs.o_6004_magnetometerPZ2, NULL}, + {0x6005, 0x04, ODT_REC, &ODObjs.o_6005_magnetometerMZ1, NULL}, + {0x6006, 0x04, ODT_REC, &ODObjs.o_6006_magnetometerMZ2, NULL}, + {0x0000, 0x00, 0, NULL, NULL} +}; + +static OD_t _OD = { + (sizeof(ODList) / sizeof(ODList[0])) - 1, + &ODList[0] +}; + +OD_t *OD = &_OD; diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h new file mode 100644 index 00000000..665be0d2 --- /dev/null +++ b/src/f0/app_adcs/source/ObjDict/OD.h @@ -0,0 +1,1058 @@ +/******************************************************************************* + CANopen Object Dictionary definition for CANopenNode V4 + + This file was automatically generated by CANopenEditor v4.0-51-g2d9b1ad + + https://github.com/CANopenNode/CANopenNode + https://github.com/CANopenNode/CANopenEditor + + DON'T EDIT THIS FILE MANUALLY !!!! +******************************************************************************** + + File info: + File Names: OD.h; OD.c + Project File: app.xdd + File Version: 0 + + Created: 8/12/2019 2:51:00 PM + Created By: Miles Simpson + Modified: 11/28/2021 11:21:02 AM + Modified By: Ryan Meidick + + Device Info: + Vendor Name: Portland State Aerospace Society + Vendor ID: 0 + Product Name: OreSat IMU + Product ID: 0 + + Description: OreSat IMU Application Object Dictionary +*******************************************************************************/ + +#ifndef OD_H +#define OD_H +/******************************************************************************* + Counters of OD objects +*******************************************************************************/ +#define OD_CNT_NMT 1 +#define OD_CNT_EM 1 +#define OD_CNT_SYNC 1 +#define OD_CNT_SYNC_PROD 1 +#define OD_CNT_STORAGE 1 +#define OD_CNT_EM_PROD 1 +#define OD_CNT_HB_CONS 1 +#define OD_CNT_HB_PROD 1 +#define OD_CNT_SDO_SRV 1 +#define OD_CNT_RPDO 16 +#define OD_CNT_TPDO 16 + + +/******************************************************************************* + Sizes of OD arrays +*******************************************************************************/ +#define OD_CNT_ARR_1003 8 +#define OD_CNT_ARR_1010 4 +#define OD_CNT_ARR_1011 4 +#define OD_CNT_ARR_1016 8 +#define OD_CNT_ARR_1029 6 +#define OD_CNT_ARR_2020 3 + + +/******************************************************************************* + OD data declaration of all groups +*******************************************************************************/ +typedef struct { + uint32_t x1000_deviceType; + char x1008_manufacturerDeviceName[12]; + char x1009_manufacturerHardwareVersion[4]; + char x100A_manufacturerSoftwareVersion[6]; + struct { + uint8_t highestSub_indexSupported; + uint32_t vendor_ID; + uint32_t productCode; + uint32_t revisionNumber; + uint32_t serialNumber; + } x1018_identity; + uint8_t x1029_errorBehavior_sub0; + uint8_t x1029_errorBehavior[OD_CNT_ARR_1029]; +} OD_ROM_t; + +typedef struct { + uint8_t x1001_errorRegister; + uint32_t x1002_manufacturerStatusRegister; + uint8_t x1003_pre_definedErrorField_sub0; + uint32_t x1003_pre_definedErrorField[OD_CNT_ARR_1003]; + uint8_t x1010_storeParameters_sub0; + uint32_t x1010_storeParameters[OD_CNT_ARR_1010]; + uint8_t x1011_restoreDefaultParameters_sub0; + uint32_t x1011_restoreDefaultParameters[OD_CNT_ARR_1011]; + uint64_t x2010_SCET; + uint64_t x2011_UTC; + uint8_t x2020_MCU_UniqueDeviceID_sub0; + uint32_t x2020_MCU_UniqueDeviceID[OD_CNT_ARR_2020]; + struct { + uint8_t highestSub_indexSupported; + uint16_t TS_CAL1; + uint16_t TS_CAL2; + uint16_t VREFINT_CAL; + } x2021_MCU_Calibration; + struct { + uint8_t highestSub_indexSupported; + int8_t temperature; + uint8_t VREFINT; + uint8_t VBAT; + uint8_t VBUSP_Current; + uint16_t temperatureRaw; + uint16_t VREFINT_Raw; + uint16_t VBAT_Raw; + uint16_t VBUSP_CurrentRaw; + } x2022_MCU_Sensors; + uint8_t x2100_errorStatusBits[10]; + struct { + uint8_t highestSub_indexSupported; + int16_t pitchRate; + int16_t yawRate; + int16_t rollRate; + uint16_t pitchRateRaw; + uint16_t yawRateRaw; + uint16_t rollRateRaw; + } x6000_gyroscope; + struct { + uint8_t highestSub_indexSupported; + int16_t accX; + int16_t accY; + int16_t accZ; + uint16_t accXRaw; + uint16_t accYRaw; + uint16_t accZRaw; + } x6001_acceleration; + int8_t x6002_IMU_Temperature; + struct { + uint8_t highestSub_indexSupported; + int16_t magX; + int16_t magY; + int16_t magZ; + } x6003_magnetometerPZ1; + struct { + uint8_t highestSub_indexSupported; + int16_t magX; + int16_t magY; + int16_t magZ; + } x6004_magnetometerPZ2; + struct { + uint8_t highestSub_indexSupported; + int16_t magX; + int16_t magY; + int16_t magZ; + } x6005_magnetometerMZ1; + struct { + uint8_t highestSub_indexSupported; + int16_t magX; + int16_t magY; + int16_t magZ; + } x6006_magnetometerMZ2; +} OD_RAM_t; + +typedef struct { + uint32_t x1005_COB_ID_SYNCMessage; + uint32_t x1006_communicationCyclePeriod; + uint32_t x1007_synchronousWindowLength; + uint32_t x1014_COB_ID_EMCY; + uint16_t x1015_inhibitTimeEMCY; + uint8_t x1016_consumerHeartbeatTime_sub0; + uint32_t x1016_consumerHeartbeatTime[OD_CNT_ARR_1016]; + uint16_t x1017_producerHeartbeatTime; + uint8_t x1019_synchronousCounterOverflowValue; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDClientToServer; + uint32_t COB_IDServerToClient; + uint8_t node_IDOfTheSDOClient; + } x1200_SDOServerParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1400_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1401_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1402_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1403_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1404_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1405_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1406_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1407_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1408_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x1409_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x140A_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x140B_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x140C_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x140D_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x140E_RPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByRPDO; + uint8_t transmissionType; + uint16_t eventTimer; + } x140F_RPDOCommunicationParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1600_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1601_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1602_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1603_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1604_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1605_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1606_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1607_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1608_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1609_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x160A_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x160B_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x160C_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x160D_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x160E_RPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x160F_RPDOMappingParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1800_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1801_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1802_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1803_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1804_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1805_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1806_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1807_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1808_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x1809_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x180A_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x180B_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x180C_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x180D_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x180E_TPDOCommunicationParameter; + struct { + uint8_t highestSub_indexSupported; + uint32_t COB_IDUsedByTPDO; + uint8_t transmissionType; + uint16_t inhibitTime; + uint8_t compatibilityEntry; + uint16_t eventTimer; + uint8_t SYNCStartValue; + } x180F_TPDOCommunicationParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A00_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A01_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A02_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A03_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A04_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A05_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A06_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A07_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A08_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A09_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A0A_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A0B_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A0C_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A0D_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A0E_TPDOMappingParameter; + struct { + uint8_t numberOfMappedApplicationObjectsInPDO; + uint32_t applicationObject_1; + uint32_t applicationObject_2; + uint32_t applicationObject_3; + uint32_t applicationObject_4; + uint32_t applicationObject_5; + uint32_t applicationObject_6; + uint32_t applicationObject_7; + uint32_t applicationObject_8; + } x1A0F_TPDOMappingParameter; + uint32_t x1F80_NMTStartup; +} OD_PERSIST_COMM_t; + +typedef struct { + struct { + uint8_t highestSub_indexSupported; + uint8_t bdefault; + uint8_t ttoggle; + uint8_t ntoggle; + uint8_t ctoggle; + } x2000_BUS_Management; +} OD_PERSIST_MFR_t; + +#ifndef OD_ATTR_ROM +#define OD_ATTR_ROM +#endif +extern OD_ATTR_ROM OD_ROM_t OD_ROM; + +#ifndef OD_ATTR_RAM +#define OD_ATTR_RAM +#endif +extern OD_ATTR_RAM OD_RAM_t OD_RAM; + +#ifndef OD_ATTR_PERSIST_COMM +#define OD_ATTR_PERSIST_COMM +#endif +extern OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM; + +#ifndef OD_ATTR_PERSIST_MFR +#define OD_ATTR_PERSIST_MFR +#endif +extern OD_ATTR_PERSIST_MFR OD_PERSIST_MFR_t OD_PERSIST_MFR; + +#ifndef OD_ATTR_OD +#define OD_ATTR_OD +#endif +extern OD_ATTR_OD OD_t *OD; + + +/******************************************************************************* + Object dictionary entries - shortcuts +*******************************************************************************/ +#define OD_ENTRY_H1000 &OD->list[0] +#define OD_ENTRY_H1001 &OD->list[1] +#define OD_ENTRY_H1002 &OD->list[2] +#define OD_ENTRY_H1003 &OD->list[3] +#define OD_ENTRY_H1005 &OD->list[4] +#define OD_ENTRY_H1006 &OD->list[5] +#define OD_ENTRY_H1007 &OD->list[6] +#define OD_ENTRY_H1008 &OD->list[7] +#define OD_ENTRY_H1009 &OD->list[8] +#define OD_ENTRY_H100A &OD->list[9] +#define OD_ENTRY_H1010 &OD->list[10] +#define OD_ENTRY_H1011 &OD->list[11] +#define OD_ENTRY_H1014 &OD->list[12] +#define OD_ENTRY_H1015 &OD->list[13] +#define OD_ENTRY_H1016 &OD->list[14] +#define OD_ENTRY_H1017 &OD->list[15] +#define OD_ENTRY_H1018 &OD->list[16] +#define OD_ENTRY_H1019 &OD->list[17] +#define OD_ENTRY_H1029 &OD->list[18] +#define OD_ENTRY_H1200 &OD->list[19] +#define OD_ENTRY_H1400 &OD->list[20] +#define OD_ENTRY_H1401 &OD->list[21] +#define OD_ENTRY_H1402 &OD->list[22] +#define OD_ENTRY_H1403 &OD->list[23] +#define OD_ENTRY_H1404 &OD->list[24] +#define OD_ENTRY_H1405 &OD->list[25] +#define OD_ENTRY_H1406 &OD->list[26] +#define OD_ENTRY_H1407 &OD->list[27] +#define OD_ENTRY_H1408 &OD->list[28] +#define OD_ENTRY_H1409 &OD->list[29] +#define OD_ENTRY_H140A &OD->list[30] +#define OD_ENTRY_H140B &OD->list[31] +#define OD_ENTRY_H140C &OD->list[32] +#define OD_ENTRY_H140D &OD->list[33] +#define OD_ENTRY_H140E &OD->list[34] +#define OD_ENTRY_H140F &OD->list[35] +#define OD_ENTRY_H1600 &OD->list[36] +#define OD_ENTRY_H1601 &OD->list[37] +#define OD_ENTRY_H1602 &OD->list[38] +#define OD_ENTRY_H1603 &OD->list[39] +#define OD_ENTRY_H1604 &OD->list[40] +#define OD_ENTRY_H1605 &OD->list[41] +#define OD_ENTRY_H1606 &OD->list[42] +#define OD_ENTRY_H1607 &OD->list[43] +#define OD_ENTRY_H1608 &OD->list[44] +#define OD_ENTRY_H1609 &OD->list[45] +#define OD_ENTRY_H160A &OD->list[46] +#define OD_ENTRY_H160B &OD->list[47] +#define OD_ENTRY_H160C &OD->list[48] +#define OD_ENTRY_H160D &OD->list[49] +#define OD_ENTRY_H160E &OD->list[50] +#define OD_ENTRY_H160F &OD->list[51] +#define OD_ENTRY_H1800 &OD->list[52] +#define OD_ENTRY_H1801 &OD->list[53] +#define OD_ENTRY_H1802 &OD->list[54] +#define OD_ENTRY_H1803 &OD->list[55] +#define OD_ENTRY_H1804 &OD->list[56] +#define OD_ENTRY_H1805 &OD->list[57] +#define OD_ENTRY_H1806 &OD->list[58] +#define OD_ENTRY_H1807 &OD->list[59] +#define OD_ENTRY_H1808 &OD->list[60] +#define OD_ENTRY_H1809 &OD->list[61] +#define OD_ENTRY_H180A &OD->list[62] +#define OD_ENTRY_H180B &OD->list[63] +#define OD_ENTRY_H180C &OD->list[64] +#define OD_ENTRY_H180D &OD->list[65] +#define OD_ENTRY_H180E &OD->list[66] +#define OD_ENTRY_H180F &OD->list[67] +#define OD_ENTRY_H1A00 &OD->list[68] +#define OD_ENTRY_H1A01 &OD->list[69] +#define OD_ENTRY_H1A02 &OD->list[70] +#define OD_ENTRY_H1A03 &OD->list[71] +#define OD_ENTRY_H1A04 &OD->list[72] +#define OD_ENTRY_H1A05 &OD->list[73] +#define OD_ENTRY_H1A06 &OD->list[74] +#define OD_ENTRY_H1A07 &OD->list[75] +#define OD_ENTRY_H1A08 &OD->list[76] +#define OD_ENTRY_H1A09 &OD->list[77] +#define OD_ENTRY_H1A0A &OD->list[78] +#define OD_ENTRY_H1A0B &OD->list[79] +#define OD_ENTRY_H1A0C &OD->list[80] +#define OD_ENTRY_H1A0D &OD->list[81] +#define OD_ENTRY_H1A0E &OD->list[82] +#define OD_ENTRY_H1A0F &OD->list[83] +#define OD_ENTRY_H1F80 &OD->list[84] +#define OD_ENTRY_H2000 &OD->list[85] +#define OD_ENTRY_H2010 &OD->list[86] +#define OD_ENTRY_H2011 &OD->list[87] +#define OD_ENTRY_H2020 &OD->list[88] +#define OD_ENTRY_H2021 &OD->list[89] +#define OD_ENTRY_H2022 &OD->list[90] +#define OD_ENTRY_H2100 &OD->list[91] +#define OD_ENTRY_H6000 &OD->list[92] +#define OD_ENTRY_H6001 &OD->list[93] +#define OD_ENTRY_H6002 &OD->list[94] +#define OD_ENTRY_H6003 &OD->list[95] +#define OD_ENTRY_H6004 &OD->list[96] +#define OD_ENTRY_H6005 &OD->list[97] +#define OD_ENTRY_H6006 &OD->list[98] + + +/******************************************************************************* + Object dictionary entries - shortcuts with names +*******************************************************************************/ +#define OD_ENTRY_H1000_deviceType &OD->list[0] +#define OD_ENTRY_H1001_errorRegister &OD->list[1] +#define OD_ENTRY_H1002_manufacturerStatusRegister &OD->list[2] +#define OD_ENTRY_H1003_pre_definedErrorField &OD->list[3] +#define OD_ENTRY_H1005_COB_ID_SYNCMessage &OD->list[4] +#define OD_ENTRY_H1006_communicationCyclePeriod &OD->list[5] +#define OD_ENTRY_H1007_synchronousWindowLength &OD->list[6] +#define OD_ENTRY_H1008_manufacturerDeviceName &OD->list[7] +#define OD_ENTRY_H1009_manufacturerHardwareVersion &OD->list[8] +#define OD_ENTRY_H100A_manufacturerSoftwareVersion &OD->list[9] +#define OD_ENTRY_H1010_storeParameters &OD->list[10] +#define OD_ENTRY_H1011_restoreDefaultParameters &OD->list[11] +#define OD_ENTRY_H1014_COB_ID_EMCY &OD->list[12] +#define OD_ENTRY_H1015_inhibitTimeEMCY &OD->list[13] +#define OD_ENTRY_H1016_consumerHeartbeatTime &OD->list[14] +#define OD_ENTRY_H1017_producerHeartbeatTime &OD->list[15] +#define OD_ENTRY_H1018_identity &OD->list[16] +#define OD_ENTRY_H1019_synchronousCounterOverflowValue &OD->list[17] +#define OD_ENTRY_H1029_errorBehavior &OD->list[18] +#define OD_ENTRY_H1200_SDOServerParameter &OD->list[19] +#define OD_ENTRY_H1400_RPDOCommunicationParameter &OD->list[20] +#define OD_ENTRY_H1401_RPDOCommunicationParameter &OD->list[21] +#define OD_ENTRY_H1402_RPDOCommunicationParameter &OD->list[22] +#define OD_ENTRY_H1403_RPDOCommunicationParameter &OD->list[23] +#define OD_ENTRY_H1404_RPDOCommunicationParameter &OD->list[24] +#define OD_ENTRY_H1405_RPDOCommunicationParameter &OD->list[25] +#define OD_ENTRY_H1406_RPDOCommunicationParameter &OD->list[26] +#define OD_ENTRY_H1407_RPDOCommunicationParameter &OD->list[27] +#define OD_ENTRY_H1408_RPDOCommunicationParameter &OD->list[28] +#define OD_ENTRY_H1409_RPDOCommunicationParameter &OD->list[29] +#define OD_ENTRY_H140A_RPDOCommunicationParameter &OD->list[30] +#define OD_ENTRY_H140B_RPDOCommunicationParameter &OD->list[31] +#define OD_ENTRY_H140C_RPDOCommunicationParameter &OD->list[32] +#define OD_ENTRY_H140D_RPDOCommunicationParameter &OD->list[33] +#define OD_ENTRY_H140E_RPDOCommunicationParameter &OD->list[34] +#define OD_ENTRY_H140F_RPDOCommunicationParameter &OD->list[35] +#define OD_ENTRY_H1600_RPDOMappingParameter &OD->list[36] +#define OD_ENTRY_H1601_RPDOMappingParameter &OD->list[37] +#define OD_ENTRY_H1602_RPDOMappingParameter &OD->list[38] +#define OD_ENTRY_H1603_RPDOMappingParameter &OD->list[39] +#define OD_ENTRY_H1604_RPDOMappingParameter &OD->list[40] +#define OD_ENTRY_H1605_RPDOMappingParameter &OD->list[41] +#define OD_ENTRY_H1606_RPDOMappingParameter &OD->list[42] +#define OD_ENTRY_H1607_RPDOMappingParameter &OD->list[43] +#define OD_ENTRY_H1608_RPDOMappingParameter &OD->list[44] +#define OD_ENTRY_H1609_RPDOMappingParameter &OD->list[45] +#define OD_ENTRY_H160A_RPDOMappingParameter &OD->list[46] +#define OD_ENTRY_H160B_RPDOMappingParameter &OD->list[47] +#define OD_ENTRY_H160C_RPDOMappingParameter &OD->list[48] +#define OD_ENTRY_H160D_RPDOMappingParameter &OD->list[49] +#define OD_ENTRY_H160E_RPDOMappingParameter &OD->list[50] +#define OD_ENTRY_H160F_RPDOMappingParameter &OD->list[51] +#define OD_ENTRY_H1800_TPDOCommunicationParameter &OD->list[52] +#define OD_ENTRY_H1801_TPDOCommunicationParameter &OD->list[53] +#define OD_ENTRY_H1802_TPDOCommunicationParameter &OD->list[54] +#define OD_ENTRY_H1803_TPDOCommunicationParameter &OD->list[55] +#define OD_ENTRY_H1804_TPDOCommunicationParameter &OD->list[56] +#define OD_ENTRY_H1805_TPDOCommunicationParameter &OD->list[57] +#define OD_ENTRY_H1806_TPDOCommunicationParameter &OD->list[58] +#define OD_ENTRY_H1807_TPDOCommunicationParameter &OD->list[59] +#define OD_ENTRY_H1808_TPDOCommunicationParameter &OD->list[60] +#define OD_ENTRY_H1809_TPDOCommunicationParameter &OD->list[61] +#define OD_ENTRY_H180A_TPDOCommunicationParameter &OD->list[62] +#define OD_ENTRY_H180B_TPDOCommunicationParameter &OD->list[63] +#define OD_ENTRY_H180C_TPDOCommunicationParameter &OD->list[64] +#define OD_ENTRY_H180D_TPDOCommunicationParameter &OD->list[65] +#define OD_ENTRY_H180E_TPDOCommunicationParameter &OD->list[66] +#define OD_ENTRY_H180F_TPDOCommunicationParameter &OD->list[67] +#define OD_ENTRY_H1A00_TPDOMappingParameter &OD->list[68] +#define OD_ENTRY_H1A01_TPDOMappingParameter &OD->list[69] +#define OD_ENTRY_H1A02_TPDOMappingParameter &OD->list[70] +#define OD_ENTRY_H1A03_TPDOMappingParameter &OD->list[71] +#define OD_ENTRY_H1A04_TPDOMappingParameter &OD->list[72] +#define OD_ENTRY_H1A05_TPDOMappingParameter &OD->list[73] +#define OD_ENTRY_H1A06_TPDOMappingParameter &OD->list[74] +#define OD_ENTRY_H1A07_TPDOMappingParameter &OD->list[75] +#define OD_ENTRY_H1A08_TPDOMappingParameter &OD->list[76] +#define OD_ENTRY_H1A09_TPDOMappingParameter &OD->list[77] +#define OD_ENTRY_H1A0A_TPDOMappingParameter &OD->list[78] +#define OD_ENTRY_H1A0B_TPDOMappingParameter &OD->list[79] +#define OD_ENTRY_H1A0C_TPDOMappingParameter &OD->list[80] +#define OD_ENTRY_H1A0D_TPDOMappingParameter &OD->list[81] +#define OD_ENTRY_H1A0E_TPDOMappingParameter &OD->list[82] +#define OD_ENTRY_H1A0F_TPDOMappingParameter &OD->list[83] +#define OD_ENTRY_H1F80_NMTStartup &OD->list[84] +#define OD_ENTRY_H2000_BUS_Management &OD->list[85] +#define OD_ENTRY_H2010_SCET &OD->list[86] +#define OD_ENTRY_H2011_UTC &OD->list[87] +#define OD_ENTRY_H2020_MCU_UniqueDeviceID &OD->list[88] +#define OD_ENTRY_H2021_MCU_Calibration &OD->list[89] +#define OD_ENTRY_H2022_MCU_Sensors &OD->list[90] +#define OD_ENTRY_H2100_errorStatusBits &OD->list[91] +#define OD_ENTRY_H6000_gyroscope &OD->list[92] +#define OD_ENTRY_H6001_acceleration &OD->list[93] +#define OD_ENTRY_H6002_IMU_Temperature &OD->list[94] +#define OD_ENTRY_H6003_magnetometerPZ1 &OD->list[95] +#define OD_ENTRY_H6004_magnetometerPZ2 &OD->list[96] +#define OD_ENTRY_H6005_magnetometerMZ1 &OD->list[97] +#define OD_ENTRY_H6006_magnetometerMZ2 &OD->list[98] + + +/******************************************************************************* + OD config structure +*******************************************************************************/ +#ifdef CO_MULTIPLE_OD +#define OD_INIT_CONFIG(config) {\ + (config).CNT_NMT = OD_CNT_NMT;\ + (config).ENTRY_H1017 = OD_ENTRY_H1017;\ + (config).CNT_HB_CONS = OD_CNT_HB_CONS;\ + (config).CNT_ARR_1016 = OD_CNT_ARR_1016;\ + (config).ENTRY_H1016 = OD_ENTRY_H1016;\ + (config).CNT_EM = OD_CNT_EM;\ + (config).ENTRY_H1001 = OD_ENTRY_H1001;\ + (config).ENTRY_H1014 = OD_ENTRY_H1014;\ + (config).ENTRY_H1015 = OD_ENTRY_H1015;\ + (config).CNT_ARR_1003 = OD_CNT_ARR_1003;\ + (config).ENTRY_H1003 = OD_ENTRY_H1003;\ + (config).CNT_SDO_SRV = OD_CNT_SDO_SRV;\ + (config).ENTRY_H1200 = OD_ENTRY_H1200;\ + (config).CNT_SDO_CLI = 0;\ + (config).ENTRY_H1280 = OD_ENTRY_H1280;\ + (config).CNT_TIME = 0;\ + (config).ENTRY_H1012 = NULL;\ + (config).CNT_SYNC = OD_CNT_SYNC;\ + (config).ENTRY_H1005 = OD_ENTRY_H1005;\ + (config).ENTRY_H1006 = OD_ENTRY_H1006;\ + (config).ENTRY_H1007 = OD_ENTRY_H1007;\ + (config).ENTRY_H1019 = OD_ENTRY_H1019;\ + (config).CNT_RPDO = OD_CNT_RPDO;\ + (config).ENTRY_H1400 = OD_ENTRY_H1400;\ + (config).ENTRY_H1600 = OD_ENTRY_H1600;\ + (config).CNT_TPDO = OD_CNT_TPDO;\ + (config).ENTRY_H1800 = OD_ENTRY_H1800;\ + (config).ENTRY_H1A00 = OD_ENTRY_H1A00;\ + (config).CNT_LEDS = 0;\ + (config).CNT_GFC = 0;\ + (config).ENTRY_H1300 = NULL;\ + (config).CNT_SRDO = 0;\ + (config).ENTRY_H1301 = NULL;\ + (config).ENTRY_H1381 = NULL;\ + (config).ENTRY_H13FE = NULL;\ + (config).ENTRY_H13FF = NULL;\ + (config).CNT_LSS_SLV = 0;\ + (config).CNT_LSS_MST = 0;\ + (config).CNT_GTWA = 0;\ + (config).CNT_TRACE = 0;\ +} +#endif + +#endif /* OD_H */ diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds new file mode 100644 index 00000000..e09dd54c --- /dev/null +++ b/src/f0/app_adcs/source/ObjDict/app.eds @@ -0,0 +1,5846 @@ +[FileInfo] +FileName=app.eds +FileVersion=0 +FileRevision=1 +LastEDS= +EDSVersion=4.0 +Description=OreSat IMU Application Object Dictionary +CreationTime=2:51PM +CreationDate=08-12-2019 +CreatedBy=Miles Simpson +ModificationTime=11:21AM +ModificationDate=11-28-2021 +ModifiedBy=Ryan Meidick + +[DeviceInfo] +VendorName=Portland State Aerospace Society +VendorNumber=0 +ProductName=OreSat IMU +ProductNumber=0 +RevisionNumber=0 +BaudRate_10=1 +BaudRate_20=1 +BaudRate_50=1 +BaudRate_125=1 +BaudRate_250=1 +BaudRate_500=1 +BaudRate_800=1 +BaudRate_1000=1 +SimpleBootUpMaster=0 +SimpleBootUpSlave=0 +Granularity=0 +DynamicChannelsSupported=0 +CompactPDO=0 +GroupMessaging=0 +NrOfRXPDO=16 +NrOfTXPDO=16 +LSS_Supported=0 + +[DummyUsage] +Dummy0001=0 +Dummy0002=0 +Dummy0003=0 +Dummy0004=0 +Dummy0005=0 +Dummy0006=0 +Dummy0007=0 + +[Comments] +Lines=0 + +[MandatoryObjects] +SupportedObjects=3 +1=0x1000 +2=0x1001 +3=0x1018 + +[1000] +ParameterName=Device type +ObjectType=0x7 +;StorageLocation=ROM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1001] +ParameterName=Error register +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x00 +PDOMapping=1 + +[1018] +ParameterName=Identity +ObjectType=0x9 +;StorageLocation=ROM +SubNumber=0x5 + +[1018sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x04 +PDOMapping=0 + +[1018sub1] +ParameterName=Vendor-ID +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1018sub2] +ParameterName=Product code +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1018sub3] +ParameterName=Revision number +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1018sub4] +ParameterName=Serial number +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[OptionalObjects] +SupportedObjects=89 +1=0x1002 +2=0x1003 +3=0x1005 +4=0x1006 +5=0x1007 +6=0x1008 +7=0x1009 +8=0x100A +9=0x1010 +10=0x1011 +11=0x1014 +12=0x1015 +13=0x1016 +14=0x1017 +15=0x1019 +16=0x1029 +17=0x1200 +18=0x1400 +19=0x1401 +20=0x1402 +21=0x1403 +22=0x1404 +23=0x1405 +24=0x1406 +25=0x1407 +26=0x1408 +27=0x1409 +28=0x140A +29=0x140B +30=0x140C +31=0x140D +32=0x140E +33=0x140F +34=0x1600 +35=0x1601 +36=0x1602 +37=0x1603 +38=0x1604 +39=0x1605 +40=0x1606 +41=0x1607 +42=0x1608 +43=0x1609 +44=0x160A +45=0x160B +46=0x160C +47=0x160D +48=0x160E +49=0x160F +50=0x1800 +51=0x1801 +52=0x1802 +53=0x1803 +54=0x1804 +55=0x1805 +56=0x1806 +57=0x1807 +58=0x1808 +59=0x1809 +60=0x180A +61=0x180B +62=0x180C +63=0x180D +64=0x180E +65=0x180F +66=0x1A00 +67=0x1A01 +68=0x1A02 +69=0x1A03 +70=0x1A04 +71=0x1A05 +72=0x1A06 +73=0x1A07 +74=0x1A08 +75=0x1A09 +76=0x1A0A +77=0x1A0B +78=0x1A0C +79=0x1A0D +80=0x1A0E +81=0x1A0F +82=0x1F80 +83=0x6000 +84=0x6001 +85=0x6002 +86=0x6003 +87=0x6004 +88=0x6005 +89=0x6006 + +[1002] +ParameterName=Manufacturer status register +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[1003] +ParameterName=Pre-defined error field +ObjectType=0x8 +;StorageLocation=RAM +SubNumber=0x9 + +[1003sub0] +ParameterName=Number of errors +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1003sub1] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub2] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub3] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub4] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub5] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub6] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub7] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1003sub8] +ParameterName=Standard error field +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0x00000000 +PDOMapping=0 + +[1005] +ParameterName=COB-ID SYNC message +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000080 +PDOMapping=0 + +[1006] +ParameterName=Communication cycle period +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0007 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1007] +ParameterName=Synchronous window length +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0007 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1008] +ParameterName=Manufacturer device name +ObjectType=0x7 +;StorageLocation=ROM +DataType=0x0009 +AccessType=ro +DefaultValue=OreSat Node +PDOMapping=0 + +[1009] +ParameterName=Manufacturer hardware version +ObjectType=0x7 +;StorageLocation=ROM +DataType=0x0009 +AccessType=ro +DefaultValue=0.0 +PDOMapping=0 + +[100A] +ParameterName=Manufacturer software version +ObjectType=0x7 +;StorageLocation=ROM +DataType=0x0009 +AccessType=ro +DefaultValue=0.0.0 +PDOMapping=0 + +[1010] +ParameterName=Store parameters +ObjectType=0x8 +;StorageLocation=RAM +SubNumber=0x5 + +[1010sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x04 +PDOMapping=0 + +[1010sub1] +ParameterName=Save all parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1010sub2] +ParameterName=Save communication parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1010sub3] +ParameterName=Save application parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1010sub4] +ParameterName=Save manufacturer defined parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1011] +ParameterName=Restore default parameters +ObjectType=0x8 +;StorageLocation=RAM +SubNumber=0x5 + +[1011sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x04 +PDOMapping=0 + +[1011sub1] +ParameterName=Restore all default parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1011sub2] +ParameterName=Restore communication default parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1011sub3] +ParameterName=Restore application default parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1011sub4] +ParameterName=Restore manufacturer defined default parameters +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000001 +PDOMapping=0 + +[1014] +ParameterName=COB-ID EMCY +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80+$NODEID +PDOMapping=0 + +[1015] +ParameterName=Inhibit time EMCY +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1016] +ParameterName=Consumer heartbeat time +ObjectType=0x8 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1016sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x08 +PDOMapping=0 + +[1016sub1] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub2] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub3] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub4] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub5] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub6] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub7] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1016sub8] +ParameterName=Consumer heartbeat time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1017] +ParameterName=Producer heartbeat time +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0006 +AccessType=rw +DefaultValue=1000 +PDOMapping=0 + +[1019] +ParameterName=Synchronous counter overflow value +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1029] +ParameterName=Error behavior +ObjectType=0x8 +;StorageLocation=ROM +SubNumber=0x7 + +[1029sub0] +ParameterName=max sub-index +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=6 +PDOMapping=0 + +[1029sub1] +ParameterName=Communication +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1029sub2] +ParameterName=Communication other +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1029sub3] +ParameterName=Communication passive +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1029sub4] +ParameterName=Generic +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1029sub5] +ParameterName=Device profile +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1029sub6] +ParameterName=Manufacturer specific +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1200] +ParameterName=SDO server parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1200sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[1200sub1] +ParameterName=COB-ID client to server +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000000 +PDOMapping=1 + +[1200sub2] +ParameterName=COB-ID server to client +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000000 +PDOMapping=1 + +[1200sub3] +ParameterName=Node-ID of the SDO client +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1400] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1400sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1400sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000200+$NODEID +PDOMapping=0 + +[1400sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1400sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1401] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1401sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1401sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000300+$NODEID +PDOMapping=0 + +[1401sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1401sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1402] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1402sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1402sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000400+$NODEID +PDOMapping=0 + +[1402sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1402sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1403] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1403sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1403sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000500+$NODEID +PDOMapping=0 + +[1403sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1403sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1404] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1404sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1404sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000200+$NODEID +PDOMapping=0 + +[1404sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1404sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1405] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1405sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1405sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000300+$NODEID +PDOMapping=0 + +[1405sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1405sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1406] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1406sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1406sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000400+$NODEID +PDOMapping=0 + +[1406sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1406sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1407] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1407sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1407sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000500+$NODEID +PDOMapping=0 + +[1407sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1407sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1408] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1408sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1408sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000200+$NODEID +PDOMapping=0 + +[1408sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1408sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1409] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[1409sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[1409sub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000300+$NODEID +PDOMapping=0 + +[1409sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1409sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[140A] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[140Asub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[140Asub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000400+$NODEID +PDOMapping=0 + +[140Asub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[140Asub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[140B] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[140Bsub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[140Bsub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000500+$NODEID +PDOMapping=0 + +[140Bsub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[140Bsub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[140C] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[140Csub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[140Csub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000200+$NODEID +PDOMapping=0 + +[140Csub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[140Csub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[140D] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[140Dsub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[140Dsub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000300+$NODEID +PDOMapping=0 + +[140Dsub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[140Dsub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[140E] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[140Esub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[140Esub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000400+$NODEID +PDOMapping=0 + +[140Esub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[140Esub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[140F] +ParameterName=RPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x4 + +[140Fsub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x05 +PDOMapping=0 + +[140Fsub1] +ParameterName=COB-ID used by RPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x80000500+$NODEID +PDOMapping=0 + +[140Fsub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[140Fsub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1600] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1600sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1600sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1600sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1601sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1601sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1601sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1602sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1602sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1602sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1603sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1603sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1603sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1604sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1604sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1604sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1605sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1605sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1605sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1606sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1606sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1606sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1607sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1607sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1607sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1608sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1608sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1608sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1609sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1609sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1609sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160A] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[160Asub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[160Asub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Asub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160B] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[160Bsub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[160Bsub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Bsub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160C] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[160Csub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[160Csub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Csub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160D] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[160Dsub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[160Dsub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Dsub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160E] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[160Esub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[160Esub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Esub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160F] +ParameterName=RPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[160Fsub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[160Fsub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[160Fsub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1800] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1800sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1800sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x40000180+$NODEID +PDOMapping=0 + +[1800sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1800sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1800sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1800sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=10000 +PDOMapping=0 + +[1800sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1801] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1801sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1801sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x40000280+$NODEID +PDOMapping=0 + +[1801sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1801sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1801sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1801sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=10000 +PDOMapping=0 + +[1801sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1802] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1802sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1802sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x40000380+$NODEID +PDOMapping=0 + +[1802sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1802sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1802sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1802sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=10000 +PDOMapping=0 + +[1802sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1803] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1803sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1803sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x40000480+$NODEID +PDOMapping=0 + +[1803sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1803sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1803sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1803sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1803sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1804] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1804sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1804sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x40000180+$NODEID +PDOMapping=0 + +[1804sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1804sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1804sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1804sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1804sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1805] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1805sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1805sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x40000280+$NODEID +PDOMapping=0 + +[1805sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1805sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1805sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1805sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1805sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1806] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1806sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1806sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000380+$NODEID +PDOMapping=0 + +[1806sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1806sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1806sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1806sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1806sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1807] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1807sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1807sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000480+$NODEID +PDOMapping=0 + +[1807sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1807sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1807sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1807sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1807sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1808] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1808sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1808sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000180+$NODEID +PDOMapping=0 + +[1808sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1808sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1808sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1808sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1808sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1809] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[1809sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[1809sub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000280+$NODEID +PDOMapping=0 + +[1809sub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[1809sub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1809sub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[1809sub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1809sub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180A] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[180Asub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[180Asub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000380+$NODEID +PDOMapping=0 + +[180Asub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[180Asub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Asub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[180Asub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Asub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180B] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[180Bsub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[180Bsub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000480+$NODEID +PDOMapping=0 + +[180Bsub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[180Bsub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Bsub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[180Bsub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Bsub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180C] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[180Csub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[180Csub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000180+$NODEID +PDOMapping=0 + +[180Csub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[180Csub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Csub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[180Csub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Csub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180D] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[180Dsub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[180Dsub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000280+$NODEID +PDOMapping=0 + +[180Dsub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[180Dsub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Dsub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[180Dsub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Dsub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180E] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[180Esub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[180Esub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000380+$NODEID +PDOMapping=0 + +[180Esub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[180Esub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Esub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[180Esub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Esub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180F] +ParameterName=TPDO communication parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x7 + +[180Fsub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[180Fsub1] +ParameterName=COB-ID used by TPDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0xC0000480+$NODEID +PDOMapping=0 + +[180Fsub2] +ParameterName=Transmission type +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=254 +PDOMapping=0 + +[180Fsub3] +ParameterName=Inhibit time +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Fsub4] +ParameterName=compatibility entry +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[180Fsub5] +ParameterName=Event timer +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[180Fsub6] +ParameterName=SYNC start value +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A00] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A00sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x03 +PDOMapping=0 + +[1A00sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60000110 +PDOMapping=0 + +[1A00sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60000210 +PDOMapping=0 + +[1A00sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60000310 +PDOMapping=0 + +[1A00sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A00sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A00sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A00sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A00sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A01] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A01sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x03 +PDOMapping=0 + +[1A01sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60010110 +PDOMapping=0 + +[1A01sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60010210 +PDOMapping=0 + +[1A01sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60010310 +PDOMapping=0 + +[1A01sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A01sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A01sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A01sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A01sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A02sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x01 +PDOMapping=0 + +[1A02sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60020008 +PDOMapping=0 + +[1A02sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A02sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A03] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A03sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x04 +PDOMapping=0 + +[1A03sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60030110 +PDOMapping=0 + +[1A03sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60030210 +PDOMapping=0 + +[1A03sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60030310 +PDOMapping=0 + +[1A03sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60040110 +PDOMapping=0 + +[1A03sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A03sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A03sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A03sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A04] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A04sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x04 +PDOMapping=0 + +[1A04sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60040210 +PDOMapping=0 + +[1A04sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60040310 +PDOMapping=0 + +[1A04sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60050110 +PDOMapping=0 + +[1A04sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60050210 +PDOMapping=0 + +[1A04sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A04sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A04sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A04sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A05] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A05sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0x04 +PDOMapping=0 + +[1A05sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60050310 +PDOMapping=0 + +[1A05sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60060110 +PDOMapping=0 + +[1A05sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60060210 +PDOMapping=0 + +[1A05sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x60060310 +PDOMapping=0 + +[1A05sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A05sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A05sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A05sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A06sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A06sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A06sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A07sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A07sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A07sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A08sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A08sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A08sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A09sub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A09sub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A09sub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0A] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A0Asub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A0Asub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Asub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0B] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A0Bsub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A0Bsub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Bsub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0C] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A0Csub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A0Csub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Csub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0D] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A0Dsub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A0Dsub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Dsub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0E] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A0Esub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A0Esub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Esub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0F] +ParameterName=TPDO mapping parameter +ObjectType=0x9 +;StorageLocation=PERSIST_COMM +SubNumber=0x9 + +[1A0Fsub0] +ParameterName=Number of mapped application objects in PDO +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[1A0Fsub1] +ParameterName=Application object 1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub2] +ParameterName=Application object 2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub3] +ParameterName=Application object 3 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub4] +ParameterName=Application object 4 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub5] +ParameterName=Application object 5 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub6] +ParameterName=Application object 6 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub7] +ParameterName=Application object 7 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1A0Fsub8] +ParameterName=Application object 8 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000000 +PDOMapping=0 + +[1F80] +ParameterName=NMTStartup +ObjectType=0x7 +;StorageLocation=PERSIST_COMM +DataType=0x0007 +AccessType=rw +DefaultValue=0x00000008 +PDOMapping=0 + +[6000] +ParameterName=Gyroscope +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x7 + +[6000sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[6000sub1] +ParameterName=Pitch rate +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6000sub2] +ParameterName=Yaw rate +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6000sub3] +ParameterName=Roll rate +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6000sub4] +ParameterName=Pitch rate raw +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6000sub5] +ParameterName=Yaw rate raw +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6000sub6] +ParameterName=Roll rate raw +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6001] +ParameterName=Acceleration +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x7 + +[6001sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x06 +PDOMapping=0 + +[6001sub1] +ParameterName=accX +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6001sub2] +ParameterName=accY +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6001sub3] +ParameterName=accZ +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6001sub4] +ParameterName=acc X raw +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6001sub5] +ParameterName=accY raw +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6001sub6] +ParameterName=accZ raw +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6002] +ParameterName=IMU Temperature +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0002 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6003] +ParameterName=Magnetometer PZ1 +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x4 + +[6003sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[6003sub1] +ParameterName=magX +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6003sub2] +ParameterName=magY +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6003sub3] +ParameterName=magZ +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6004] +ParameterName=Magnetometer PZ2 +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x4 + +[6004sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[6004sub1] +ParameterName=magX +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6004sub2] +ParameterName=magY +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6004sub3] +ParameterName=magZ +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6005] +ParameterName=Magnetometer MZ1 +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x4 + +[6005sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[6005sub1] +ParameterName=magX +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6005sub2] +ParameterName=magY +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6005sub3] +ParameterName=magZ +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6006] +ParameterName=Magnetometer MZ2 +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x4 + +[6006sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[6006sub1] +ParameterName=magX +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6006sub2] +ParameterName=magY +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6006sub3] +ParameterName=magZ +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[ManufacturerObjects] +SupportedObjects=7 +1=0x2000 +2=0x2010 +3=0x2011 +4=0x2020 +5=0x2021 +6=0x2022 +7=0x2100 + +[2000] +ParameterName=BUS Management +ObjectType=0x9 +;StorageLocation=PERSIST_MFR +SubNumber=0x5 + +[2000sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x04 +PDOMapping=0 + +[2000sub1] +ParameterName=Bdefault +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[2000sub2] +ParameterName=Ttoggle +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[2000sub3] +ParameterName=Ntoggle +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[2000sub4] +ParameterName=Ctoggle +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=rw +DefaultValue=0 +PDOMapping=0 + +[2010] +ParameterName=SCET +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x001B +AccessType=rw +DefaultValue=0 +PDOMapping=1 + +[2011] +ParameterName=UTC +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x001B +AccessType=rw +DefaultValue=0 +PDOMapping=1 + +[2020] +ParameterName=MCU Unique Device ID +ObjectType=0x8 +;StorageLocation=RAM +SubNumber=0x4 + +[2020sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[2020sub1] +ParameterName=UID +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[2020sub2] +ParameterName=UID +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[2020sub3] +ParameterName=UID +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0007 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[2021] +ParameterName=MCU Calibration +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x4 + +[2021sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x03 +PDOMapping=0 + +[2021sub1] +ParameterName=TS_CAL1 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[2021sub2] +ParameterName=TS_CAL2 +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[2021sub3] +ParameterName=VREFINT_CAL +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=0 + +[2022] +ParameterName=MCU Sensors +ObjectType=0x9 +;StorageLocation=RAM +SubNumber=0x9 + +[2022sub0] +ParameterName=Highest sub-index supported +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0x08 +PDOMapping=0 + +[2022sub1] +ParameterName=Temperature +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0002 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub2] +ParameterName=VREFINT +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub3] +ParameterName=VBAT +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub4] +ParameterName=VBUSP Current +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0005 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub5] +ParameterName=Temperature (Raw) +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub6] +ParameterName=VREFINT (Raw) +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub7] +ParameterName=VBAT (Raw) +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2022sub8] +ParameterName=VBUSP Current (Raw) +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x0006 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[2100] +ParameterName=Error Status Bits +ObjectType=0x7 +;StorageLocation=RAM +DataType=0x000A +AccessType=ro +DefaultValue=00000000000000000000 +PDOMapping=0 + diff --git a/src/f0/app_adcs/source/ObjDict/app.xdd b/src/f0/app_adcs/source/ObjDict/app.xdd new file mode 100644 index 00000000..2ae00683 --- /dev/null +++ b/src/f0/app_adcs/source/ObjDict/app.xdd @@ -0,0 +1,7005 @@ + + + + + + + CANopen device profile + 1.1 + + + Device + + 1 + 1 + CANopen + + + + + Portland State Aerospace Society + 0 + OreSat IMU + 0 + + OreSat IMU Application Object Dictionary + + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * bit 16-31: Additional information +* bit 0-15: Device profile number + + + + + + + * bit 7: manufacturer specific +* bit 6: Reserved (always 0) +* bit 5: device profile specific +* bit 4: communication error (overrun, error state) +* bit 3: temperature +* bit 2: voltage +* bit 1: current +* bit 0: generic error + + + + + + + + + + + * Sub Index 0: Contains number of actual errors. 0 can be written to clear error history. +* sub-index 1 and above: + * bit 16-31: Manufacturer specific additional information + * bit 0-15: Error code as transmited in the Emergency object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * bit 31: set to 0 +* bit 30: If set, CANopen device generates SYNC object +* bit 11-29: set to 0 +* bit 0-10: 11-bit CAN-ID + + + + + + + Period of SYNC transmission in µs (0 = transmission disabled). + + + + + + + Synchronous window leghth in µs (0 = not used). All synchronous PDOs must be transmitted within this time window. + + + + + + + + + + + + + + + + + + + + + + + + Sub-indexes 1 and above: +* Reading provides information about its storage functionality: + * bit 1: If set, CANopen device saves parameters autonomously + * bit 0: If set, CANopen device saves parameters on command +* Writing value 0x65766173 ('s','a','v','e' from LSB to MSB) stores corresponding data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sub-indexes 1 and above: +* Reading provides information about its restoring capability: + * bit 0: If set, CANopen device restores parameters +* Writing value 0x64616F6C ('l','o','a','d' from LSB to MSB) restores corresponding data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * bit 31: If set, EMCY does NOT exist / is NOT valid +* bit 11-30: set to 0 +* bit 0-10: 11-bit CAN-ID + + + + + + + Inhibit time of emergency message in multiples of 100µs. The value 0 disables the inhibit time. + + + + + + Consumer Heartbeat Time: + * bit 24-31: set to 0 + * bit 16-23: Node ID of the monitored node. If 0 or greater than 127, sub-entry is not used. + * bit 0-15: Heartbeat time in ms (if 0, sub-intry is not used). Value should be higher than the corresponding producer heartbeat time. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Heartbeat producer time in ms (0 = disable transmission). + + + + + + + * Vendor-ID, assigned by CiA +* Product code, manufacturer specific +* Revision number: + * bit 16-31: Major revision number (CANopen behavior has changed) + * bit 0-15: Minor revision num. (CANopen behavior has not changed) +* Serial number, manufacturer specific + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Value 0: SYNC message is transmitted with data length 0. +* Value 1: reserved. +* Value 2-240: SYNC message has one data byte, which contains the counter. +* Value 241-255: reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emergency consumer 1 to 127: +* bit 31: If set, EMCY consumer does NOT exist / is NOT valid +* bit 11-30: set to 0 +* bit 0-10: 11-bit CAN-ID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If error is detected and operating NMT state is NMT operational, this object defines behavior of the device. + +Value definition for all subindexes: + 0x00 - if operational, switch to NMT pre-operational + 0x01 - do nothing + 0x02 - switch to NMT stopped + +01 - Communication error - bus off or Heartbeat consumer error. +02 - Communication other error (critical errors - see 'Error status bits') except CAN bus passive but including bus off or Heartbeat consumer. +03 - Communication passive - any communication error including CAN bus passive. +04 - Generic error (critical errors - see 'Error status bits'). +05 - Device profile error - bit 5 in error register is set. +06 - Manufacturer specific error - bit 7 in error register is set. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Sub-indexes 1 and 2: + * bit 31: If set, SDO does NOT exist / is NOT valid + * bit 30: If set, value is assigned dynamically + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Node-ID of the SDO client, 0x01 to 0x7F + + + + + + + + + + + + + + + + + + + + + + + + + + * Sub-indexes 1 and 2: + * bit 31: If set, SDO does NOT exist / is NOT valid + * bit 30: If set, value is assigned dynamically + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Node-ID of the SDO client, 0x01 to 0x7F + + + + + + + + + + + + + + + + + + + + + + + + + + + * Sub-indexes 1 and 2: + * bit 31: If set, SDO does NOT exist / is NOT valid + * bit 30: If set, value is assigned dynamically + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Node-ID of the SDO server, 0x01 to 0x7F + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 11-30: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0-240: synchronous, processed after next reception of SYNC object + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Event timer in ms (0 = disabled) for deadline monitoring. + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * COB-ID used by RPDO: + * bit 31: If set, PDO does not exist / is not valid + * bit 30: If set, NO RTR is allowed on this PDO + * bit 11-29: set to 0 + * bit 0-10: 11-bit CAN-ID +* Transmission type: + * Value 0: synchronous (acyclic) + * Value 1-240: synchronous (cyclic every (1-240)-th sync) + * Value 241-253: not used + * Value 254: event-driven (manufacturer-specific) + * Value 255: event-driven (device profile and application profile specific) +* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). +* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). +* SYNC start value + * Value 0: Counter of the SYNC message shall not be processed. + * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * Number of mapped application objects in PDO: + * Value 0: mapping is disabled. + * Value 1: sub-index 0x01 is valid. + * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. +* Application object 1-8: + * bit 16-31: index + * bit 8-15: sub-index + * bit 0-7: data length in bits + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This object configures the start-up behavior of a device that is able to perform the NMT. + + + + + + CAN Bus redundancy management as defined in ECSS-E-ST-50-15C + + + + + + + + + + Bdefault specifies the bus to be considered active after a node power-on, node hardware reset. + + + + + Ttoggle specifies the number of Consumer Heartbeat times during which the node is required to be listeningfor an NMT HB message on a particular bus before switching to the other bus. + + + + + Ntoggle specifies the number of toggles between the Nominal and Redundant bus in case of no HB message being detected. If an even number is used the last toggle puts the system into Bdefault. + + + + + The counter of Ntoggles (bus toggles) shows the count of the number of toggles that have already been performed by the device. + + + + + CCSDS Unsegmented Time Code (CUC) object for Spacecraft Elapsed Time (SCET) get/set methods + + + + + CCSDS Day Segmented Time Code (CDS) object for UTC time get/set methods + + + + + Unique Device ID of MCU + + + + + + + + + + + + + + + + + + + + + + + + Calibration values as read from the MCU + + + + + + + + + Temperature Sensor Calibration 1 + + + + + Temperature Sensor Calibration 2 + + + + + Interal VREF calibration value + + + + + Common MCU sensors between all boards. This provides the calculated values based on calibration data as well as the raw values read from the sensors directly. + + + + + + + + + MCU temperature in 1°C. + + + + + MCU Internal VREF voltage in 0.02V. + + + + + MCU VBAT voltage in 0.02V. + + + + + VBUSP current draw in 0.02mA. + + + + + Raw MCU temperature sensor value. + + + + + Raw MCU Internal VREF sensor value. + + + + + Raw MCU VBAT sensor value. + + + + + Raw VBUSP Current sensor value. + + + + + Error Status Bits indicates error conditions inside stack or inside application. Specific bit is set by CO_errorReport() function, when error occurs in program. It can be reset by CO_errorReset() function, if error is solved. Emergency message is sent on each change of any Error Status Bit. If critical bits are set, node will not be able to stay in operational state. For more information see file CO_Emergency.h. + +Default error status bits are: + +Communication or protocol errors from driver (informative): +00 - ERROR_NO_ERROR - Error Reset or No Error. +01 - ERROR_CAN_BUS_WARNING - CAN bus warning. +02 - ERROR_RXMSG_WRONG_LENGTH - Wrong data length of received CAN message. +03 - ERROR_RXMSG_OVERFLOW - Previous received CAN message wasn't processed yet. +04 - ERROR_RPDO_WRONG_LENGTH - Wrong data length of received PDO. +05 - ERROR_RPDO_OVERFLOW - Previous received PDO wasn't processed yet. +06 - ERROR_CAN_RX_BUS_PASSIVE - CAN receive bus is passive. +07 - ERROR_CAN_TX_BUS_PASSIVE - CAN transmit bus is passive. + +Communication or protocol errors from driver (critical): +08 - ERROR_08_reserved - (reserved) +09 - ERROR_09_reserved - (reserved) +0A - ERROR_CAN_TX_BUS_OFF - CAN transmit bus is off. +0B - ERROR_CAN_RXB_OVERFLOW - CAN module receive buffer has overflowed. +0C - ERROR_CAN_TX_OVERFLOW - CAN transmit buffer has overflowed. +0D - ERROR_TPDO_OUTSIDE_WINDOW - TPDO is outside SYNC window. +0E - ERROR_CAN_CONFIGURATION_FAILED - Configuration of CAN module CAN failed (Rx or Tx). +0F - ERROR_0F_reserved - (reserved) + +Communication or protocol errors (informative): +10 - ERROR_NMT_WRONG_COMMAND - Wrong NMT command received. +11 - ERROR_SYNC_EARLY - SYNC message was too early. +12 - ERROR_12_reserved - (reserved) +13 - ERROR_13_reserved - (reserved) +14 - ERROR_14_reserved - (reserved) +15 - ERROR_15_reserved - (reserved) +16 - ERROR_16_reserved - (reserved) +17 - ERROR_17_reserved - (reserved) + +Communication or protocol errors (critical): +18 - ERROR_SYNC_TIME_OUT - SYNC message timeout. +19 - ERROR_SYNC_LENGTH - Unexpected SYNC data length +1A - ERROR_PDO_WRONG_MAPPING - Error with PDO mapping. +1B - ERROR_HEARTBEAT_CONSUMER - Heartbeat consumer timeout. +1C - ERROR_HEARTBEAT_CONSUMER_REMOTE_RESET - Heartbeat consumer detected remote node reset. +1D - ERROR_1D_reserved - (reserved) +1E - ERROR_1E_reserved - (reserved) +1F - ERROR_1F_reserved - (reserved) + +Generic errors (informative): +20 - ERROR_20_reserved - (reserved) +21 - ERROR_21_reserved - (reserved) +22 - ERROR_22_reserved - (reserved) +23 - ERROR_23_reserved - (reserved) +24 - ERROR_24_reserved - (reserved) +25 - ERROR_25_reserved - (reserved) +26 - ERROR_26_reserved - (reserved) +27 - ERROR_27_reserved - (reserved) + +Generic errors (critical): +28 - ERROR_WRONG_ERROR_REPORT - Wrong parameters to <CO_errorReport()> function. +29 - ERROR_ISR_TIMER_OVERFLOW - Timer task has overflowed. +2A - ERROR_MEMORY_ALLOCATION_ERROR - Unable to allocate memory for objects. +2B - ERROR_GENERIC_ERROR - Generic error, test usage. +2C - ERROR_MAIN_TIMER_OVERFLOW - Mainline function exceeded maximum execution time. +2D - ERROR_INTERNAL_STATE_APPL - Error in application software internal state. +2E - ERROR_2E_reserved - (reserved) +2F - ERROR_2F_reserved - (reserved) + +Manufacturer specific errors: +Manufacturer may define its own constants up to index 0xFF. Of course, he must then define large enough buffer for error status bits (up to 32 bytes). + + + + + + + + + + + + + + Hundredths of degrees per second (DDD.DD format) + + + + + Hundredths of degrees per second (DDD.DD format) + + + + + Hundredths of degrees per second (DDD.DD format) + + + + + ADC units, for debugging + + + + + ADC units, for debugging + + + + + ADC units, for debugging + + + + + + + + + + + + + + Thousandths of meters per second squared (DD.DDD format) + + + + + Thousandths of meters per second squared (DD.DDD format) + + + + + Thousandths of meters per second squared (DD.DDD format) + + + + + ADC units for debugging + + + + + ADC units for debugging + + + + + ADC units for debugging + + + + + Degrees Celsius + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CANopen communication network profile + 1.1 + + + CommunicationNetwork + + 1 + 1 + CANopen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/f0/app_adcs/source/README.md b/src/f0/app_adcs/source/README.md new file mode 100644 index 00000000..b6bc7530 --- /dev/null +++ b/src/f0/app_adcs/source/README.md @@ -0,0 +1,5 @@ +# App-specific Source + +Put any .h or .c files (besides main.c) you want to compile with your app in here. They will automatically build when you run make. + +If you don't want them to build, move them to another directory or the app's top level directory to effectively "disable" them. diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c new file mode 100644 index 00000000..6f4dd4f5 --- /dev/null +++ b/src/f0/app_adcs/source/adcs.c @@ -0,0 +1,701 @@ +#include "adcs.h" + +#include "bmi088.h" +#include "mmc5883ma.h" +#include "ltc4305.h" +#include "chprintf.h" +#include "CANopen.h" +#include "OD.h" + +#include "hal.h" +#include "hal_pal.h" + + +#define BMI088_GYRO_SADDR 0x68U +#define BMI088_ACC_SADDR 0x18U + +#define DEBUG_SD (BaseSequentialStream*) &SD2 + +#if 0 +#define dbgprintf(str, ...) chprintf((BaseSequentialStream*) &SD2, str, ##__VA_ARGS__) +#else +#define dbgprintf(str, ...) +#endif + + +//FIXME I believe MAX() is defined in some common C library??? +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) +#define MIN(a,b) (((a)<(b))?(a):(b)) + + +#define ADC_NUM_CHANNELS 4 +#define MY_SAMPLING_NUMBER 100 +#define ADC_BUFF_SIZE (ADC_NUM_CHANNELS * MY_SAMPLING_NUMBER) +static adcsample_t adc_sample_buff[ADC_BUFF_SIZE]; +static adcsample_t adc_temp_sample_buff[ADC_BUFF_SIZE]; + +static float measured_i_sense_voltage[ADC_NUM_CHANNELS];; + +//ADC_SMPR_SMP_1P5 +//ADC_SMPR_SMP_7P5 +//ADC_SMPR_SMP_13P5 +//ADC_SMPR_SMP_71P5 +//ADC_SMPR_SMP_239P5 + +static const ADCConversionGroup adcgrpcfg = { + TRUE, /* Enables the circular buffer mode for the group. */ + ADC_NUM_CHANNELS, + NULL, + NULL, + ADC_CFGR1_CONT | ADC_CFGR1_RES_12BIT, /* CFGR1 */ + ADC_TR(0, 0), /* TR */ + ADC_SMPR_SMP_71P5, /* SMPR */ + ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL7 /* CHSELR, note, for continuous conversion mode you must configure 1 or an even number of channels */ +}; + + + +static const DACConfig dac_config = { + .init = 2047u, + .datamode = DAC_DHRM_12BIT_RIGHT, + .cr = 0 +}; + + + +#define PWM_TIMER_FREQ 1000000 // Hz +#define PWM_FREQ 2500// periods per sec +#define PWM_PERIOD PWM_TIMER_FREQ/PWM_FREQ + +//PB13 +#define MT_X_PWM_PWM_CHANNEL (1 - 1) +//PB14 +#define MT_Y_PWM_PWM_CHANNEL (2 - 1) +//PB15 +#define MT_Z_PWM_PWM_CHANNEL (3 - 1) + + +static PWMConfig pwmcfg_1 = { + PWM_TIMER_FREQ, + PWM_PERIOD, + NULL, + { + {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, + {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, + {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, + {PWM_OUTPUT_ACTIVE_HIGH,NULL} + }, + 0,//CR2 + #if STM32_PWM_USE_ADVANCED + 0, //BDTR + #endif + 0,//DIER +}; + + + +typedef enum { + IMU_OD_ERROR_INFO_CODE_NONE = 0, + IMU_OD_ERROR_INFO_CODE_IMU_COMM_FAILURE, + IMU_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH, + IMU_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH, +} imu_od_error_info_code_t; + + +typedef enum { + EC_MAG_0_MZ_1 = 0, + EC_MAG_1_MZ_2, + EC_MAG_2_PZ_1, + EC_MAG_3_PZ_2, + EC_MAG_NONE, +} end_card_magnetometoer_t; + + +typedef struct { + uint32_t current_pwm_percent; //0-10000 + bool current_pwm_phase; + uint32_t target_pwm_percent; + bool target_pwm_phase; + + float current_feedback_min_V; + float current_feedback_max_V; + float current_feedback_measurement_V; //Volts, Note: this is the average voltage while the PWM output is high. + int32_t current_feedback_measurement_uA; //uA. Note: this is the average current flowing while the PWM output is high. It does not represent overall average current. + + uint8_t phase_gpio_pin_number; + uint8_t pwm_channel_number; + + systime_t last_update_time; +} pwm_phase_data_t; + +typedef struct { + MMC5883MADriver driver; + mmc5883ma_data_t data; + bool is_initialized; +} mag_data_struct_t; + +typedef struct { + pwm_phase_data_t pwm_data[3]; + + mag_data_struct_t mag_data[4]; +} magnetorquer_data_t; + + +magnetorquer_data_t g_magnetoqruer_data; + + +static const I2CConfig i2ccfg = { + STM32_TIMINGR_PRESC(0xBU) | + STM32_TIMINGR_SCLDEL(0x4U) | STM32_TIMINGR_SDADEL(0x2U) | + STM32_TIMINGR_SCLH(0xFU) | STM32_TIMINGR_SCLL(0x13U), + 0, + 0 +}; + +static const BMI088Config imucfg = { + .i2cp = &I2CD1, + .i2ccfg = &i2ccfg, + .gyro_saddr = BMI088_GYRO_SADDR, + .acc_saddr = BMI088_ACC_SADDR, +}; + +static BMI088Driver imudev; + +/** + * TODO more documentation + * @return true if update process successful, false otherwise + */ +bool update_imu_data(void) { + static systime_t last_imu_update_time = 0; + + systime_t now_time = chVTGetSystemTime(); + if( chTimeDiffX(last_imu_update_time, now_time) < 1000 ) { + return(true); + } + last_imu_update_time = now_time; + + + bool ret = true; + if( imudev.state != BMI088_READY ) { + return false; + } + + //TODO Power up out of suspend + //BMI088AccelerometerEnableOrSuspend(&imudev, BMI088_MODE_ACTIVE); + //chThdSleepMilliseconds(10); + + + bmi088_accelerometer_sample_t accl_data; + if( bmi088ReadAccelerometerXYZmG(&imudev, &accl_data ) == MSG_OK ) { + dbgprintf("Acc readings mG X = %d, Y = %d, Z = %d\r\n", accl_data.accl_x, accl_data.accl_y, accl_data.accl_z); + } else { + ret = false; + dbgprintf("Failed to read accelerometer readings\r\n"); + } + + bmi088_gyro_sample_t gyro_sample; + + if( bmi088ReadGyroXYZ(&imudev, &gyro_sample) == MSG_OK ) { + dbgprintf("Gyro readings X = %d, Y = %d, Z = %d\r\n", gyro_sample.gyro_x, gyro_sample.gyro_y, gyro_sample.gyro_z); + } else { + ret = false; + dbgprintf("Failed to read gyro readings\r\n"); + } + + int16_t temp_c = 0; + if( bmi088ReadTemp(&imudev, &temp_c) == MSG_OK ) { + dbgprintf("Accelerator temp_c = %d C\r\n", temp_c); + } else { + ret = false; + dbgprintf("Failed to read temperature data...\r\n"); + } + + dbgprintf("\r\n"); + + //TODO re-suspend to save power + //BMI088AccelerometerEnableOrSuspend(&imudev, BMI088_MODE_SUSPEND); + + + OD_RAM.x6000_gyroscope.pitchRate = gyro_sample.gyro_x; + OD_RAM.x6000_gyroscope.yawRate = gyro_sample.gyro_y; + OD_RAM.x6000_gyroscope.rollRate = gyro_sample.gyro_z; + OD_RAM.x6000_gyroscope.pitchRateRaw = gyro_sample.gyro_x_raw; + OD_RAM.x6000_gyroscope.yawRateRaw = gyro_sample.gyro_y_raw; + OD_RAM.x6000_gyroscope.rollRateRaw = gyro_sample.gyro_z_raw; + + OD_RAM.x6001_acceleration.accX = accl_data.accl_x; + OD_RAM.x6001_acceleration.accY = accl_data.accl_y; + OD_RAM.x6001_acceleration.accZ = accl_data.accl_z; + OD_RAM.x6001_acceleration.accXRaw = accl_data.accl_x_raw; + OD_RAM.x6001_acceleration.accYRaw = accl_data.accl_y_raw; + OD_RAM.x6001_acceleration.accZRaw = accl_data.accl_z_raw; + + OD_RAM.x6002_IMU_Temperature = temp_c; + + //TODO Implement magnetometer driver and populate this info + OD_RAM.x6003_magnetometerPZ1.magX = 0; + OD_RAM.x6003_magnetometerPZ1.magY = 0; + OD_RAM.x6003_magnetometerPZ1.magZ = 0; + + OD_RAM.x6004_magnetometerPZ2.magX = 0; + OD_RAM.x6004_magnetometerPZ2.magY = 0; + OD_RAM.x6004_magnetometerPZ2.magZ = 0; + + OD_RAM.x6005_magnetometerMZ1.magX = 0; + OD_RAM.x6005_magnetometerMZ1.magY = 0; + OD_RAM.x6005_magnetometerMZ1.magZ = 0; + + OD_RAM.x6006_magnetometerMZ2.magX = 0; + OD_RAM.x6006_magnetometerMZ2.magY = 0; + OD_RAM.x6006_magnetometerMZ2.magZ = 0; + + return ret; +} + + +bool connect_endcard_mmc4883ma(const uint8_t ltc4304_i2c_address, const bool conn_1_enable, const bool conn_2_enable) { + bool ret = true; + + I2CDriver *i2cp = &I2CD1; + + i2cStart(i2cp, &i2ccfg); + + if( conn_1_enable ) { + ret = ltc4305_set_connections(i2cp, ltc4304_i2c_address, true, false); + } else if( conn_2_enable ) { + ret = ltc4305_set_connections(i2cp, ltc4304_i2c_address, false, true); + } else { + ret = ltc4305_set_connections(i2cp, ltc4304_i2c_address, false, false); + } + + i2cStop(i2cp); + + if( ! ret ) { + chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections!\r\n"); + } + + return(ret); +} + + +static const I2CConfig mmc5883ma_i2ccfg = { + STM32_TIMINGR_PRESC(0xBU) | + STM32_TIMINGR_SCLDEL(0x4U) | STM32_TIMINGR_SDADEL(0x2U) | + STM32_TIMINGR_SCLH(0xFU) | STM32_TIMINGR_SCLL(0x13U), + 0, + 0 +}; + +static const MMC5883MAConfig mmc4883ma_generic_config = { + .i2cp = &I2CD1, + .i2ccfg = &mmc5883ma_i2ccfg, + .saddr = MMC5883MA_I2C_ADDRESS +}; + + +bool select_magnetometer(const end_card_magnetometoer_t ecm) { + chprintf(DEBUG_SD, "Selecting magnetometer %u\r\n", ecm); + chThdSleepMilliseconds(10); + + bool ret1 = false; + bool ret2 = false; + + switch(ecm) { + case EC_MAG_0_MZ_1: + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, true, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + break; + case EC_MAG_1_MZ_2: + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, false, true); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + break; + case EC_MAG_2_PZ_1: + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, false, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, true, false); + break; + case EC_MAG_3_PZ_2: + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, false, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, true); + break; + case EC_MAG_NONE: + ret1 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + break; + } + + + if( ! (ret1 && ret2) ) { + chprintf(DEBUG_SD, "ERROR: Failed to select magnetometers\r\n"); + } + + return(ret1 && ret2); +} + + +bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { + bool r = false; + + if( ecm >= EC_MAG_NONE ) { + return(false); + } + if( ! g_magnetoqruer_data.mag_data[ecm].is_initialized) { + return(false); + } + + if( ! select_magnetometer(ecm) ) { + return(false); + } + + r = mmc5883maReadData(&g_magnetoqruer_data.mag_data[ecm].driver, &g_magnetoqruer_data.mag_data[ecm].data); + + select_magnetometer(EC_MAG_NONE); + + return(r); +} + +bool update_endcard_magnetometer_readings(void) { + bool ret = true; + + for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { + if( g_magnetoqruer_data.mag_data[ecm].is_initialized) { + select_magnetometer(ecm); + //TODO read the mag readings + + } + } + + select_magnetometer(EC_MAG_NONE); + + return(ret); +} + + +bool init_end_cap_magnetometers(void) { + bool ret = true; + + for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { + chprintf(DEBUG_SD, "Initing MMC %u\r\n", ecm); + chThdSleepMilliseconds(20); + + mmc5883maObjectInit(&g_magnetoqruer_data.mag_data[ecm].driver); + + if( ! select_magnetometer(ecm) ) { + ret = false; + chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u due to selection error\r\n"); + } else { + if( mmc5883maStart(&g_magnetoqruer_data.mag_data[ecm].driver, &mmc4883ma_generic_config) ) { + chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u\r\n"); + g_magnetoqruer_data.mag_data[ecm].is_initialized = true; + } else { + chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u\r\n"); + } + } + } + + + select_magnetometer(EC_MAG_NONE); + + return(ret); +} + + + +void set_pwm_output(void) { + if( PWMD1.state == PWM_STOP ) { + pwmStart(&PWMD1, &pwmcfg_1); +#if 0 + chprintf(DEBUG_SD, "Turning on PWM output...\r\n"); + pwmEnableChannel(&PWMD1, MT_X_PWM_PWM_CHANNEL, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 1000)); + pwmEnableChannel(&PWMD1, MT_Y_PWM_PWM_CHANNEL, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 1000)); + pwmEnableChannel(&PWMD1, MT_Z_PWM_PWM_CHANNEL, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 1000)); +#endif + } + +#if 1 + for(int i = 0; i < 3; i++ ) { + const systime_t now_time = chVTGetSystemTime(); + + //Updates will come in periodically via CANOpen, this will apply those updates to the PWM outputs. + if( g_magnetoqruer_data.pwm_data[i].last_update_time == 0 || chTimeDiffX(g_magnetoqruer_data.pwm_data[i].last_update_time, now_time) > 5 ) { + if( g_magnetoqruer_data.pwm_data[i].current_pwm_percent != g_magnetoqruer_data.pwm_data[i].target_pwm_percent || g_magnetoqruer_data.pwm_data[i].current_pwm_phase != g_magnetoqruer_data.pwm_data[i].target_pwm_phase ) { + chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_magnetoqruer_data.pwm_data[i].target_pwm_percent); + + pwmEnableChannel(&PWMD1, g_magnetoqruer_data.pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, g_magnetoqruer_data.pwm_data[i].target_pwm_percent)); + + if( g_magnetoqruer_data.pwm_data[i].target_pwm_phase ) { + palSetPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); + } else { + palClearPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); + } + + g_magnetoqruer_data.pwm_data[i].current_pwm_percent = g_magnetoqruer_data.pwm_data[i].target_pwm_percent; + g_magnetoqruer_data.pwm_data[i].current_pwm_phase = g_magnetoqruer_data.pwm_data[i].target_pwm_phase; + g_magnetoqruer_data.pwm_data[i].last_update_time = now_time; + } + } + } +#endif +} + +void magnetorquer_handle_canopen(void) { + //TODO + //Publish output data + //Read/update target PWM outputs + //-- PWM duty cycle + //-- phase + + for(int i = 0; i < 3; i++ ) { +// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = chVTGetSystemTime() % 10000;//FIXME DELETE THIS +// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() % 10000) / 20;//FIXME DELETE THIS +// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() / 25) % 1500;//FIXME DELETE THIS +// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = 500 + ((chVTGetSystemTime() / 25) % 1000);//FIXME DELETE THIS + g_magnetoqruer_data.pwm_data[i].target_pwm_percent = 1700;//FIXME DELETE THIS + g_magnetoqruer_data.pwm_data[i].target_pwm_phase = 1; +// g_magnetoqruer_data.pwm_data[i].target_pwm_phase = (chVTGetSystemTime() / 10000) % 2;//FIXME DELETE THIS + } +} + + +int32_t current_feedback_convert_volts_to_microamps(const float volts) { + //Based on the circuit design, this should nominally be 3V/amp. + //This calculation seems to be within 5%-10% accurate when compared to in line bench DMM readings. + float microamps = (volts / 3.0) * 1000000.0; + + return(microamps); +} + +void read_adc_current(void) { + /** + * 12 bit ADC readings from 0-4096 + * Input voltage calculated as (/4096)*3.3 + */ + + /* Making mean of sampled values.*/ + memcpy(adc_temp_sample_buff, adc_sample_buff, sizeof(adc_sample_buff)); + +// for(int s = 0; s < MY_SAMPLING_NUMBER; s++) { +// chprintf(DEBUG_SD, " adc_sample_buff[%d] = [", s); +// for (int i = 0; i < ADC_NUM_CHANNELS; i++) { +// chprintf(DEBUG_SD, "%d, ", adc_temp_sample_buff[i]); +// } +// chprintf(DEBUG_SD, "]\r\n"); +// } + + + + +#if ADC_NUM_CHANNELS == 4 + //Skip the first channel cuz we don't care about the data, just need 4 channels so the underlying ADC driver would actually work. + int start_chan_idx = 1; +#else +#error "Handle this" +#endif + + for (int adc_chan_idx = start_chan_idx; adc_chan_idx < ADC_NUM_CHANNELS; adc_chan_idx++) { + const float low_threshold_volts = 0.08; + const uint32_t low_threshold_adc_reading = (4096.0 * low_threshold_volts); + + uint32_t number_samples_over_threshold = 0; + uint32_t adc_reading_sum = 0; + uint32_t min_adc_value = 4096; + uint32_t max_adc_value = 0; + for(int sample_num = 0; sample_num < MY_SAMPLING_NUMBER; sample_num++) { + const uint32_t array_index = (sample_num * ADC_NUM_CHANNELS) + adc_chan_idx; + const uint16_t adc_reading_value = adc_temp_sample_buff[array_index]; + + if( adc_reading_value > low_threshold_adc_reading ) { + number_samples_over_threshold++; + adc_reading_sum += adc_reading_value; + + min_adc_value = MIN(min_adc_value, adc_reading_value); + max_adc_value = MAX(max_adc_value, adc_reading_value); + } + } + + if( number_samples_over_threshold == 0 ) { + min_adc_value = 0; + } + + float adc_reading_mean_voltage = 0; + if( number_samples_over_threshold > 5 ) { + adc_reading_mean_voltage = 3.3 * ((float) adc_reading_sum / ((float) number_samples_over_threshold)) / 4096.0; + } + + const uint32_t min_mV = (1000.0 * 3.3 * ((float) min_adc_value) / 4096.0); + const uint32_t max_mV = (1000.0 * 3.3 * ((float) max_adc_value) / 4096.0); + + measured_i_sense_voltage[adc_chan_idx] = adc_reading_mean_voltage; +// const uint32_t millivolts = adc_reading_mean_voltage * 1000.0; + +// if( do_print ) { +// chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %u mV, %u, [%u - %u mV]\r\n", +// adc_chan_idx, millivolts, number_samples_over_threshold, min_mV, max_mV); +// } + + if( adc_chan_idx >= 1 && adc_chan_idx <= 3 ) { + g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; + g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); + g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; + g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; + } + } + + //Compute current sense data + static systime_t last_print_time = 0; + systime_t now_time = TIME_I2MS(chVTGetSystemTime()); + if (chTimeDiffX(last_print_time, now_time) > 500) { + last_print_time = now_time; + + chprintf(DEBUG_SD, "================\r\n"); + for(int i = 0; i < 3; i++ ) { + pwm_phase_data_t *data = &g_magnetoqruer_data.pwm_data[i]; + chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", + i, + data->current_feedback_measurement_uA, + (uint32_t) (data->current_feedback_measurement_V * 1000), + (uint32_t) (data->current_feedback_min_V * 1000), + (uint32_t) (data->current_feedback_max_V * 1000)); + } + + } +} + +void process_magnetorquer(void) { + magnetorquer_handle_canopen(); + set_pwm_output(); + read_adc_current(); +} + + +void init_magnetorquer(void) { + init_end_cap_magnetometers(); + + memset(&g_magnetoqruer_data, 0, sizeof(g_magnetoqruer_data)); + + g_magnetoqruer_data.pwm_data[0].phase_gpio_pin_number = GPIOB_MT_X_PHASE; + g_magnetoqruer_data.pwm_data[0].pwm_channel_number = MT_X_PWM_PWM_CHANNEL; + + g_magnetoqruer_data.pwm_data[1].phase_gpio_pin_number = GPIOB_MT_Y_PHASE; + g_magnetoqruer_data.pwm_data[1].pwm_channel_number = MT_Y_PWM_PWM_CHANNEL; + + g_magnetoqruer_data.pwm_data[2].phase_gpio_pin_number = GPIOB_MT_Z_PHASE; + g_magnetoqruer_data.pwm_data[2].pwm_channel_number = MT_Z_PWM_PWM_CHANNEL; + + for(int i = 0; i < 3; i++ ) { + palSetPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); +// palClearPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); + } + + + + palSetPadMode(GPIOA, GPIOA_MT_ILIM, PAL_MODE_INPUT_ANALOG); + dacStart(&DACD1, &dac_config); +// dacPutChannelX(&DACD1, 0, 650); //0.44V + dacPutChannelX(&DACD1, 0, 3600); //3V + +// palSetPad(GPIOA, GPIOA_MT_STBY_RST); +// palSetPad(GPIOB, GPIOB_MT_EN); + + + + palClearPad(GPIOB, GPIOB_MT_EN); + palSetPad(GPIOA, GPIOA_MT_STBY_RST); + + palClearPad(GPIOB, GPIOB_MT_X_PWM); + palClearPad(GPIOB, GPIOB_MT_Y_PWM); + palClearPad(GPIOB, GPIOB_MT_Z_PWM); + + palClearPad(GPIOB, GPIOB_MT_X_PHASE); + palClearPad(GPIOB, GPIOB_MT_Y_PHASE); + palClearPad(GPIOB, GPIOB_MT_Z_PHASE); + + + palClearPad(GPIOA, GPIOA_MT_STBY_RST); + chThdSleepMilliseconds(5); + palSetPad(GPIOB, GPIOB_MT_EN); + chThdSleepMilliseconds(5); + palSetPad(GPIOA, GPIOA_MT_STBY_RST); + chThdSleepMilliseconds(5); +} + + +THD_WORKING_AREA(adcs_wa, 0x800); +THD_FUNCTION(adcs, arg) +{ + (void) arg; + msg_t r; + + chprintf(DEBUG_SD, "Starting ADCS thread...\r\n"); + chThdSleepMilliseconds(50); + init_magnetorquer(); + + /* Activates the ADC1 driver. */ + adcStart(&ADCD1, NULL); + adcStartConversion(&ADCD1, &adcgrpcfg, adc_sample_buff, ADC_BUFF_SIZE);//Starts an ADC continuous conversion. + chprintf(DEBUG_SD, "done with adcStartConversion()...\r\n"); + + + bmi088ObjectInit(&imudev); + + chprintf(DEBUG_SD, "Starting BMI088...\r\n"); + chThdSleepMilliseconds(50); + bmi088Start(&imudev, &imucfg); + + chprintf(DEBUG_SD, "BMI088 state = %u, error_flags=0x%X\r\n", imudev.state, imudev.error_flags); + if( imudev.state != BMI088_READY ) { + chprintf(DEBUG_SD, "Failed to start IMU driver...\r\n"); + } else { + uint8_t bmi088_chip_id = 0; + if( (r = bmi088ReadAccelerometerChipId(&imudev, &bmi088_chip_id)) == MSG_OK ) { + chprintf(DEBUG_SD, "BMI088 accelerometer chip ID is 0x%X, expected to be 0x%X\r\n", bmi088_chip_id, BMI088_ACC_CHIP_ID_EXPECTED); + } else { + chprintf(DEBUG_SD, "Failed to read accl chip ID from BMI088, r = %d\r\n", r); + } + + if( bmi088_chip_id != BMI088_ACC_CHIP_ID_EXPECTED ) { + //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, IMU_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH); + } + + + uint8_t bmi088_gyro_chip_id = 0; + msg_t r = bmi088ReadGyroChipId(&imudev, &bmi088_gyro_chip_id); + if( r == MSG_OK ) { + chprintf(DEBUG_SD, "BMI088 gyroscope ID is 0x%X, expected to be 0x%X\r\n", bmi088_gyro_chip_id, BMI088_GYR_CHIP_ID_EXPECTED); + } else { + chprintf(DEBUG_SD, "Failed to read gyro chip ID from BMI088, r = %d\r\n", r); + } + + if( bmi088_gyro_chip_id != BMI088_GYR_CHIP_ID_EXPECTED ) { + //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, IMU_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH); + } + } + chprintf(DEBUG_SD, "Done initializing, starting loop...\r\n"); + + for (uint32_t iterations = 0; !chThdShouldTerminateX(); iterations++) { + dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); + + update_imu_data(); + process_magnetorquer(); + +/* + if( update_imu_data() ) { + + if( CO_isError(CO->em, CO_EM_GENERIC_ERROR) ) { + dbgprintf("Clearing CO error state...\r\n"); + //CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, IMU_OD_ERROR_INFO_CODE_NONE); + + } + } else { + dbgprintf("Setting CO error state...\r\n"); + //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, IMU_OD_ERROR_INFO_CODE_IMU_COMM_FAILURE); + + } +*/ + chThdSleepMilliseconds(5); + } + + /* Stop the BMI088 IMU sensor */ + bmi088Stop(&imudev); + + chThdExit(MSG_OK); +} diff --git a/src/f0/app_adcs/source/adcs.h b/src/f0/app_adcs/source/adcs.h new file mode 100644 index 00000000..02bdcf55 --- /dev/null +++ b/src/f0/app_adcs/source/adcs.h @@ -0,0 +1,10 @@ +#ifndef _IMU_H_ +#define _IMU_H_ + +#include "ch.h" +#include "hal.h" + +extern THD_WORKING_AREA(adcs_wa, 0x800); +extern THD_FUNCTION(adcs, arg); + +#endif diff --git a/src/f0/app_adcs/source/blink.c b/src/f0/app_adcs/source/blink.c new file mode 100644 index 00000000..93010401 --- /dev/null +++ b/src/f0/app_adcs/source/blink.c @@ -0,0 +1,18 @@ +#include "blink.h" + +/* Example blinker thread */ +THD_WORKING_AREA(blink_wa, 0x40); +THD_FUNCTION(blink, arg) +{ + (void)arg; + + palSetLineMode(LINE_LED,PAL_MODE_OUTPUT_PUSHPULL); + + while (!chThdShouldTerminateX()) { + palToggleLine(LINE_LED); + chThdSleepMilliseconds(500); + } + + palClearLine(LINE_LED); + chThdExit(MSG_OK); +} diff --git a/src/f0/app_adcs/source/blink.h b/src/f0/app_adcs/source/blink.h new file mode 100644 index 00000000..c9178eb2 --- /dev/null +++ b/src/f0/app_adcs/source/blink.h @@ -0,0 +1,11 @@ +#ifndef _BLINK_H_ +#define _BLINK_H_ + +#include "ch.h" +#include "hal.h" + +/* Example blinker thread prototypes */ +extern THD_WORKING_AREA(blink_wa, 0x40); +extern THD_FUNCTION(blink, arg); + +#endif From 028d5f711ec4134c790b2e98858f5498b26e15bd Mon Sep 17 00:00:00 2001 From: DC Date: Fri, 10 Feb 2023 20:06:17 -0800 Subject: [PATCH 02/20] Updates to ADCS firmware --- src/f0/app_adcs/source/adcs.c | 83 +++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 39 deletions(-) diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 6f4dd4f5..85bcbd34 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -83,7 +83,7 @@ static PWMConfig pwmcfg_1 = { {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, - {PWM_OUTPUT_ACTIVE_HIGH,NULL} + {PWM_OUTPUT_ACTIVE_HIGH, NULL} }, 0,//CR2 #if STM32_PWM_USE_ADVANCED @@ -141,7 +141,7 @@ typedef struct { } magnetorquer_data_t; -magnetorquer_data_t g_magnetoqruer_data; +magnetorquer_data_t g_magnetorquer_data; static const I2CConfig i2ccfg = { @@ -233,6 +233,11 @@ bool update_imu_data(void) { OD_RAM.x6002_IMU_Temperature = temp_c; //TODO Implement magnetometer driver and populate this info + + //FIXME publish g_magnetorquer_data.pwm_data[0].current_feedback_measurement_uA + //FIXME publish g_magnetorquer_data.pwm_data[1].current_feedback_measurement_uA + //FIXME publish g_magnetorquer_data.pwm_data[2].current_feedback_measurement_uA + OD_RAM.x6003_magnetometerPZ1.magX = 0; OD_RAM.x6003_magnetometerPZ1.magY = 0; OD_RAM.x6003_magnetometerPZ1.magZ = 0; @@ -338,7 +343,7 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { if( ecm >= EC_MAG_NONE ) { return(false); } - if( ! g_magnetoqruer_data.mag_data[ecm].is_initialized) { + if( ! g_magnetorquer_data.mag_data[ecm].is_initialized) { return(false); } @@ -346,7 +351,7 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { return(false); } - r = mmc5883maReadData(&g_magnetoqruer_data.mag_data[ecm].driver, &g_magnetoqruer_data.mag_data[ecm].data); + r = mmc5883maReadData(&g_magnetorquer_data.mag_data[ecm].driver, &g_magnetorquer_data.mag_data[ecm].data); select_magnetometer(EC_MAG_NONE); @@ -357,7 +362,7 @@ bool update_endcard_magnetometer_readings(void) { bool ret = true; for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { - if( g_magnetoqruer_data.mag_data[ecm].is_initialized) { + if( g_magnetorquer_data.mag_data[ecm].is_initialized) { select_magnetometer(ecm); //TODO read the mag readings @@ -377,15 +382,15 @@ bool init_end_cap_magnetometers(void) { chprintf(DEBUG_SD, "Initing MMC %u\r\n", ecm); chThdSleepMilliseconds(20); - mmc5883maObjectInit(&g_magnetoqruer_data.mag_data[ecm].driver); + mmc5883maObjectInit(&g_magnetorquer_data.mag_data[ecm].driver); if( ! select_magnetometer(ecm) ) { ret = false; chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u due to selection error\r\n"); } else { - if( mmc5883maStart(&g_magnetoqruer_data.mag_data[ecm].driver, &mmc4883ma_generic_config) ) { + if( mmc5883maStart(&g_magnetorquer_data.mag_data[ecm].driver, &mmc4883ma_generic_config) ) { chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u\r\n"); - g_magnetoqruer_data.mag_data[ecm].is_initialized = true; + g_magnetorquer_data.mag_data[ecm].is_initialized = true; } else { chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u\r\n"); } @@ -416,21 +421,21 @@ void set_pwm_output(void) { const systime_t now_time = chVTGetSystemTime(); //Updates will come in periodically via CANOpen, this will apply those updates to the PWM outputs. - if( g_magnetoqruer_data.pwm_data[i].last_update_time == 0 || chTimeDiffX(g_magnetoqruer_data.pwm_data[i].last_update_time, now_time) > 5 ) { - if( g_magnetoqruer_data.pwm_data[i].current_pwm_percent != g_magnetoqruer_data.pwm_data[i].target_pwm_percent || g_magnetoqruer_data.pwm_data[i].current_pwm_phase != g_magnetoqruer_data.pwm_data[i].target_pwm_phase ) { - chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_magnetoqruer_data.pwm_data[i].target_pwm_percent); + if( g_magnetorquer_data.pwm_data[i].last_update_time == 0 || chTimeDiffX(g_magnetorquer_data.pwm_data[i].last_update_time, now_time) > 5 ) { + if( g_magnetorquer_data.pwm_data[i].current_pwm_percent != g_magnetorquer_data.pwm_data[i].target_pwm_percent || g_magnetorquer_data.pwm_data[i].current_pwm_phase != g_magnetorquer_data.pwm_data[i].target_pwm_phase ) { + chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_magnetorquer_data.pwm_data[i].target_pwm_percent); - pwmEnableChannel(&PWMD1, g_magnetoqruer_data.pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, g_magnetoqruer_data.pwm_data[i].target_pwm_percent)); + pwmEnableChannel(&PWMD1, g_magnetorquer_data.pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, g_magnetorquer_data.pwm_data[i].target_pwm_percent)); - if( g_magnetoqruer_data.pwm_data[i].target_pwm_phase ) { - palSetPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); + if( g_magnetorquer_data.pwm_data[i].target_pwm_phase ) { + palSetPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); } else { - palClearPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); + palClearPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); } - g_magnetoqruer_data.pwm_data[i].current_pwm_percent = g_magnetoqruer_data.pwm_data[i].target_pwm_percent; - g_magnetoqruer_data.pwm_data[i].current_pwm_phase = g_magnetoqruer_data.pwm_data[i].target_pwm_phase; - g_magnetoqruer_data.pwm_data[i].last_update_time = now_time; + g_magnetorquer_data.pwm_data[i].current_pwm_percent = g_magnetorquer_data.pwm_data[i].target_pwm_percent; + g_magnetorquer_data.pwm_data[i].current_pwm_phase = g_magnetorquer_data.pwm_data[i].target_pwm_phase; + g_magnetorquer_data.pwm_data[i].last_update_time = now_time; } } } @@ -445,13 +450,13 @@ void magnetorquer_handle_canopen(void) { //-- phase for(int i = 0; i < 3; i++ ) { -// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = chVTGetSystemTime() % 10000;//FIXME DELETE THIS -// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() % 10000) / 20;//FIXME DELETE THIS -// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() / 25) % 1500;//FIXME DELETE THIS -// g_magnetoqruer_data.pwm_data[i].target_pwm_percent = 500 + ((chVTGetSystemTime() / 25) % 1000);//FIXME DELETE THIS - g_magnetoqruer_data.pwm_data[i].target_pwm_percent = 1700;//FIXME DELETE THIS - g_magnetoqruer_data.pwm_data[i].target_pwm_phase = 1; -// g_magnetoqruer_data.pwm_data[i].target_pwm_phase = (chVTGetSystemTime() / 10000) % 2;//FIXME DELETE THIS +// g_magnetorquer_data.pwm_data[i].target_pwm_percent = chVTGetSystemTime() % 10000;//FIXME DELETE THIS +// g_magnetorquer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() % 10000) / 20;//FIXME DELETE THIS +// g_magnetorquer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() / 25) % 1500;//FIXME DELETE THIS +// g_magnetorquer_data.pwm_data[i].target_pwm_percent = 500 + ((chVTGetSystemTime() / 25) % 1000);//FIXME DELETE THIS + g_magnetorquer_data.pwm_data[i].target_pwm_percent = 1700;//FIXME DELETE THIS + g_magnetorquer_data.pwm_data[i].target_pwm_phase = 1; +// g_magnetorquer_data.pwm_data[i].target_pwm_phase = (chVTGetSystemTime() / 10000) % 2;//FIXME DELETE THIS } } @@ -533,10 +538,10 @@ void read_adc_current(void) { // } if( adc_chan_idx >= 1 && adc_chan_idx <= 3 ) { - g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; - g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); - g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; - g_magnetoqruer_data.pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; + g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; + g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); + g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; + g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; } } @@ -548,7 +553,7 @@ void read_adc_current(void) { chprintf(DEBUG_SD, "================\r\n"); for(int i = 0; i < 3; i++ ) { - pwm_phase_data_t *data = &g_magnetoqruer_data.pwm_data[i]; + pwm_phase_data_t *data = &g_magnetorquer_data.pwm_data[i]; chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", i, data->current_feedback_measurement_uA, @@ -570,20 +575,20 @@ void process_magnetorquer(void) { void init_magnetorquer(void) { init_end_cap_magnetometers(); - memset(&g_magnetoqruer_data, 0, sizeof(g_magnetoqruer_data)); + memset(&g_magnetorquer_data, 0, sizeof(g_magnetorquer_data)); - g_magnetoqruer_data.pwm_data[0].phase_gpio_pin_number = GPIOB_MT_X_PHASE; - g_magnetoqruer_data.pwm_data[0].pwm_channel_number = MT_X_PWM_PWM_CHANNEL; + g_magnetorquer_data.pwm_data[0].phase_gpio_pin_number = GPIOB_MT_X_PHASE; + g_magnetorquer_data.pwm_data[0].pwm_channel_number = MT_X_PWM_PWM_CHANNEL; - g_magnetoqruer_data.pwm_data[1].phase_gpio_pin_number = GPIOB_MT_Y_PHASE; - g_magnetoqruer_data.pwm_data[1].pwm_channel_number = MT_Y_PWM_PWM_CHANNEL; + g_magnetorquer_data.pwm_data[1].phase_gpio_pin_number = GPIOB_MT_Y_PHASE; + g_magnetorquer_data.pwm_data[1].pwm_channel_number = MT_Y_PWM_PWM_CHANNEL; - g_magnetoqruer_data.pwm_data[2].phase_gpio_pin_number = GPIOB_MT_Z_PHASE; - g_magnetoqruer_data.pwm_data[2].pwm_channel_number = MT_Z_PWM_PWM_CHANNEL; + g_magnetorquer_data.pwm_data[2].phase_gpio_pin_number = GPIOB_MT_Z_PHASE; + g_magnetorquer_data.pwm_data[2].pwm_channel_number = MT_Z_PWM_PWM_CHANNEL; for(int i = 0; i < 3; i++ ) { - palSetPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); -// palClearPad(GPIOB, g_magnetoqruer_data.pwm_data[i].phase_gpio_pin_number); + palSetPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); +// palClearPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); } From 4e01f68319b872ef1f96d0dd584ad172bf4432fa Mon Sep 17 00:00:00 2001 From: DC Date: Fri, 10 Feb 2023 20:09:02 -0800 Subject: [PATCH 03/20] updates to app.eds for adcs card --- src/f0/app_adcs/source/ObjDict/OD.c | 2532 +++++++++--------- src/f0/app_adcs/source/ObjDict/OD.h | 609 ++--- src/f0/app_adcs/source/ObjDict/app.eds | 3365 ++++++++++-------------- 3 files changed, 2995 insertions(+), 3511 deletions(-) diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c index 156215ee..01fa77d6 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.c +++ b/src/f0/app_adcs/source/ObjDict/OD.c @@ -1,231 +1,226 @@ -/******************************************************************************* - CANopen Object Dictionary definition for CANopenNode V4 - - This file was automatically generated by CANopenEditor v4.0-51-g2d9b1ad - - https://github.com/CANopenNode/CANopenNode - https://github.com/CANopenNode/CANopenEditor - - DON'T EDIT THIS FILE MANUALLY, UNLESS YOU KNOW WHAT YOU ARE DOING !!!! -*******************************************************************************/ - #define OD_DEFINITION #include "301/CO_ODinterface.h" #include "OD.h" #if CO_VERSION_MAJOR < 4 -#error This Object dictionary is compatible with CANopenNode V4.0 and above! +#error This object dictionary is only comatible with CANopenNode v4 and above #endif -/******************************************************************************* - OD data initialization of all groups -*******************************************************************************/ OD_ATTR_ROM OD_ROM_t OD_ROM = { .x1000_deviceType = 0x00000000, - .x1008_manufacturerDeviceName = {'O', 'r', 'e', 'S', 'a', 't', ' ', 'N', 'o', 'd', 'e', 0}, - .x1009_manufacturerHardwareVersion = {'0', '.', '0', 0}, - .x100A_manufacturerSoftwareVersion = {'0', '.', '0', '.', '0', 0}, + .x1008_manufacturerDeviceName = "OreSat Node", + .x1009_manufacturerHardwareVersion = "0.0", + .x100A_manufacturerSoftwareVersion = "0.0.0", .x1018_identity = { - .highestSub_indexSupported = 0x04, - .vendor_ID = 0x00000000, + .highestSubIndexSupported = 0x04, + .vendorID = 0x00000000, .productCode = 0x00000000, .revisionNumber = 0x00000000, - .serialNumber = 0x00000000 + .serialNumber = 0x00000000, }, .x1029_errorBehavior_sub0 = 0x06, - .x1029_errorBehavior = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01} + .x1029_errorBehavior = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, }; OD_ATTR_RAM OD_RAM_t OD_RAM = { .x1001_errorRegister = 0x00, - .x1002_manufacturerStatusRegister = 0x00000000, - .x1003_pre_definedErrorField_sub0 = 0x00, - .x1003_pre_definedErrorField = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, + .x1002_manufacturerStatusRegister = 0, + .x1003_preDefinedErrorField_sub0 = 0x08, + .x1003_preDefinedErrorField = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, .x1010_storeParameters_sub0 = 0x04, .x1010_storeParameters = {0x00000001, 0x00000001, 0x00000001, 0x00000001}, .x1011_restoreDefaultParameters_sub0 = 0x04, .x1011_restoreDefaultParameters = {0x00000001, 0x00000001, 0x00000001, 0x00000001}, - .x2010_SCET = 0x0000000000000000, - .x2011_UTC = 0x0000000000000000, + .x2010_SCET = 0, + .x2011_UTC = 0, .x2020_MCU_UniqueDeviceID_sub0 = 0x03, - .x2020_MCU_UniqueDeviceID = {0x00000000, 0x00000000, 0x00000000}, + .x2020_MCU_UniqueDeviceID = {0, 0, 0}, .x2021_MCU_Calibration = { - .highestSub_indexSupported = 0x03, - .TS_CAL1 = 0x0000, - .TS_CAL2 = 0x0000, - .VREFINT_CAL = 0x0000 + .highestSubIndexSupported = 0x03, + .TS_CAL1 = 0, + .TS_CAL2 = 0, + .VREFINT_CAL = 0, }, .x2022_MCU_Sensors = { - .highestSub_indexSupported = 0x08, + .highestSubIndexSupported = 0x08, .temperature = 0, - .VREFINT = 0x00, - .VBAT = 0x00, - .VBUSP_Current = 0x00, - .temperatureRaw = 0x0000, - .VREFINT_Raw = 0x0000, - .VBAT_Raw = 0x0000, - .VBUSP_CurrentRaw = 0x0000 + .VREFINT = 0, + .VBAT = 0, + .VBUSP_Current = 0, + .temperatureRaw = 0, + .VREFINT_Raw = 0, + .VBAT_Raw = 0, + .VBUSP_CurrentRaw = 0, }, .x2100_errorStatusBits = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, .x6000_gyroscope = { - .highestSub_indexSupported = 0x06, + .highestSubIndexSupported = 0x06, .pitchRate = 0, .yawRate = 0, .rollRate = 0, - .pitchRateRaw = 0x0000, - .yawRateRaw = 0x0000, - .rollRateRaw = 0x0000 + .pitchRateRaw = 0, + .yawRateRaw = 0, + .rollRateRaw = 0, }, .x6001_acceleration = { - .highestSub_indexSupported = 0x06, - .accX = 0, - .accY = 0, - .accZ = 0, - .accXRaw = 0x0000, - .accYRaw = 0x0000, - .accZRaw = 0x0000 + .highestSubIndexSupported = 0x06, + .accx = 0, + .accy = 0, + .accz = 0, + .accXRaw = 0, + .accyRaw = 0, + .acczRaw = 0, }, .x6002_IMU_Temperature = 0, .x6003_magnetometerPZ1 = { - .highestSub_indexSupported = 0x03, - .magX = 0, - .magY = 0, - .magZ = 0 + .highestSubIndexSupported = 0x03, + .magx = 0, + .magy = 0, + .magz = 0, }, .x6004_magnetometerPZ2 = { - .highestSub_indexSupported = 0x03, - .magX = 0, - .magY = 0, - .magZ = 0 + .highestSubIndexSupported = 0x03, + .magx = 0, + .magy = 0, + .magz = 0, }, .x6005_magnetometerMZ1 = { - .highestSub_indexSupported = 0x03, - .magX = 0, - .magY = 0, - .magZ = 0 + .highestSubIndexSupported = 0x03, + .magx = 0, + .magy = 0, + .magz = 0, }, .x6006_magnetometerMZ2 = { - .highestSub_indexSupported = 0x03, - .magX = 0, - .magY = 0, - .magZ = 0 - } + .highestSubIndexSupported = 0x03, + .magx = 0, + .magy = 0, + .magz = 0, + }, + .x6007_magnetorquer = { + .highestSubIndexSupported = 0x06, + .magnetorquerXPWM_DutyCycle = 0, + .magnetorquerYPWM_DutyCycle = 0, + .magnetorquerZPWM_DutyCycle = 0, + .magnetorquerXCurrentUA = 0, + .magnetorquerYCurrentUA = 0, + .magnetorquerZCurrentUA = 0, + }, }; OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { - .x1005_COB_ID_SYNCMessage = 0x00000080, - .x1006_communicationCyclePeriod = 0x00000000, - .x1007_synchronousWindowLength = 0x00000000, - .x1014_COB_ID_EMCY = 0x00000080, - .x1015_inhibitTimeEMCY = 0x0000, + .x1005_COB_ID_SYNC_Message = 0x00000080, + .x1006_communicationCyclePeriod = 0, + .x1007_synchronousWindowLength = 0, + .x1014_COB_ID_EMCY = 0x80, + .x1015_inhibitTimeEMCY = 0, .x1016_consumerHeartbeatTime_sub0 = 0x08, .x1016_consumerHeartbeatTime = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, - .x1017_producerHeartbeatTime = 0x03E8, - .x1019_synchronousCounterOverflowValue = 0x00, - .x1200_SDOServerParameter = { - .highestSub_indexSupported = 0x03, - .COB_IDClientToServer = 0x80000000, - .COB_IDServerToClient = 0x80000000, - .node_IDOfTheSDOClient = 0x01 - }, - .x1400_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000200, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1401_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000300, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1402_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000400, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1403_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000500, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1404_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000200, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1405_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000300, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1406_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000400, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1407_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000500, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1408_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000200, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1409_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000300, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x140A_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000400, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x140B_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000500, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x140C_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000200, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x140D_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000300, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x140E_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000400, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x140F_RPDOCommunicationParameter = { - .highestSub_indexSupported = 0x05, - .COB_IDUsedByRPDO = 0x80000500, - .transmissionType = 0xFE, - .eventTimer = 0x0000 - }, - .x1600_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1017_producerHeartbeatTime = 1000, + .x1019_synchronousCounterOverflowValue = 0, + .x1200_SDO_ServerParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_ClientToServer = 0x80000000, + .COB_ID_ServerToClient = 0x80000000, + .nodeID_OfTheSDO_Client = 0x01, + }, + .x1400_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000200, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1401_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000300, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1402_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000400, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1403_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000500, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1404_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000200, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1405_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000300, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1406_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000400, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1407_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000500, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1408_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000200, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1409_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000300, + .transmissionType = 254, + .eventTimer = 0, + }, + .x140A_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000400, + .transmissionType = 254, + .eventTimer = 0, + }, + .x140B_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000500, + .transmissionType = 254, + .eventTimer = 0, + }, + .x140C_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000200, + .transmissionType = 254, + .eventTimer = 0, + }, + .x140D_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000300, + .transmissionType = 254, + .eventTimer = 0, + }, + .x140E_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000400, + .transmissionType = 254, + .eventTimer = 0, + }, + .x140F_RPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x03, + .COB_ID_UsedByRPDO = 0x80000500, + .transmissionType = 254, + .eventTimer = 0, + }, + .x1600_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -233,10 +228,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1601_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1601_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -244,10 +239,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1602_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1602_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -255,10 +250,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1603_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1603_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -266,10 +261,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1604_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1604_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -277,10 +272,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1605_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1605_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -288,10 +283,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1606_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1606_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -299,10 +294,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1607_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1607_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -310,10 +305,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1608_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1608_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -321,10 +316,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1609_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1609_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -332,10 +327,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x160A_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x160A_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -343,10 +338,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x160B_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x160B_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -354,10 +349,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x160C_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x160C_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -365,10 +360,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x160D_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x160D_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -376,10 +371,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x160E_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x160E_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -387,10 +382,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x160F_RPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x160F_RPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -398,154 +393,154 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 - }, - .x1800_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0x40000180, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x2710, - .SYNCStartValue = 0x00 - }, - .x1801_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0x40000280, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x2710, - .SYNCStartValue = 0x00 - }, - .x1802_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0x40000380, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x2710, - .SYNCStartValue = 0x00 - }, - .x1803_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0x40000480, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1804_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0x40000180, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1805_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0x40000280, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1806_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000380, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1807_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000480, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1808_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000180, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1809_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000280, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x180A_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000380, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x180B_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000480, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x180C_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000180, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x180D_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000280, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x180E_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000380, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x180F_TPDOCommunicationParameter = { - .highestSub_indexSupported = 0x06, - .COB_IDUsedByTPDO = 0xC0000480, - .transmissionType = 0xFE, - .inhibitTime = 0x0000, - .compatibilityEntry = 0x00, - .eventTimer = 0x0000, - .SYNCStartValue = 0x00 - }, - .x1A00_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x03, + .applicationObject_8 = 0x00000000, + }, + .x1800_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0x40000180, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 10000, + .SYNC_StartValue = 0, + }, + .x1801_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0x40000280, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 10000, + .SYNC_StartValue = 0, + }, + .x1802_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0x40000380, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 10000, + .SYNC_StartValue = 0, + }, + .x1803_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0x40000480, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1804_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0x40000180, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1805_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0x40000280, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1806_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000380, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1807_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000480, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1808_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000180, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1809_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000280, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x180A_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000380, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x180B_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000480, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x180C_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000180, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x180D_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000280, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x180E_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000380, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x180F_TPDO_CommunicationParameter = { + .highestSubIndexSupported = 0x06, + .COB_ID_UsedByTPDO = 0xC0000480, + .transmissionType = 254, + .inhibitTime = 0, + .compatibilityEntry = 0, + .eventTimer = 0, + .SYNC_StartValue = 0, + }, + .x1A00_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x60000110, .applicationObject_2 = 0x60000210, .applicationObject_3 = 0x60000310, @@ -553,10 +548,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A01_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x03, + .x1A01_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x60010110, .applicationObject_2 = 0x60010210, .applicationObject_3 = 0x60010310, @@ -564,10 +559,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A02_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x01, + .x1A02_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x60020008, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -575,10 +570,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A03_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x04, + .x1A03_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x60030110, .applicationObject_2 = 0x60030210, .applicationObject_3 = 0x60030310, @@ -586,10 +581,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A04_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x04, + .x1A04_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x60040210, .applicationObject_2 = 0x60040310, .applicationObject_3 = 0x60050110, @@ -597,10 +592,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A05_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x04, + .x1A05_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x60050310, .applicationObject_2 = 0x60060110, .applicationObject_3 = 0x60060210, @@ -608,10 +603,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A06_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A06_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -619,10 +614,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A07_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A07_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -630,10 +625,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A08_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A08_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -641,10 +636,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A09_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A09_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -652,10 +647,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A0A_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A0A_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -663,10 +658,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A0B_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A0B_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -674,10 +669,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A0C_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A0C_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -685,10 +680,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A0D_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A0D_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -696,10 +691,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A0E_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A0E_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -707,10 +702,10 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1A0F_TPDOMappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x00, + .x1A0F_TPDO_MappingParameter = { + .numberOfMappedApplicationObjectsInPDO = 0x08, .applicationObject_1 = 0x00000000, .applicationObject_2 = 0x00000000, .applicationObject_3 = 0x00000000, @@ -718,32 +713,27 @@ OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { .applicationObject_5 = 0x00000000, .applicationObject_6 = 0x00000000, .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000 + .applicationObject_8 = 0x00000000, }, - .x1F80_NMTStartup = 0x00000008 + .x1F80_nmtstartup = 0x00000008, }; OD_ATTR_PERSIST_MFR OD_PERSIST_MFR_t OD_PERSIST_MFR = { .x2000_BUS_Management = { - .highestSub_indexSupported = 0x04, - .bdefault = 0x00, - .ttoggle = 0x00, - .ntoggle = 0x00, - .ctoggle = 0x00 - } + .highestSubIndexSupported = 0x04, + .bdefault = 0, + .ttoggle = 0, + .ntoggle = 0, + .ctoggle = 0, + }, }; - - -/******************************************************************************* - All OD objects (constant definitions) -*******************************************************************************/ typedef struct { OD_obj_var_t o_1000_deviceType; OD_obj_var_t o_1001_errorRegister; OD_obj_var_t o_1002_manufacturerStatusRegister; - OD_obj_array_t o_1003_pre_definedErrorField; - OD_obj_var_t o_1005_COB_ID_SYNCMessage; + OD_obj_array_t o_1003_preDefinedErrorField; + OD_obj_var_t o_1005_COB_ID_SYNC_Message; OD_obj_var_t o_1006_communicationCyclePeriod; OD_obj_var_t o_1007_synchronousWindowLength; OD_obj_var_t o_1008_manufacturerDeviceName; @@ -758,72 +748,72 @@ typedef struct { OD_obj_record_t o_1018_identity[5]; OD_obj_var_t o_1019_synchronousCounterOverflowValue; OD_obj_array_t o_1029_errorBehavior; - OD_obj_record_t o_1200_SDOServerParameter[4]; - OD_obj_record_t o_1400_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1401_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1402_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1403_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1404_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1405_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1406_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1407_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1408_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1409_RPDOCommunicationParameter[4]; - OD_obj_record_t o_140A_RPDOCommunicationParameter[4]; - OD_obj_record_t o_140B_RPDOCommunicationParameter[4]; - OD_obj_record_t o_140C_RPDOCommunicationParameter[4]; - OD_obj_record_t o_140D_RPDOCommunicationParameter[4]; - OD_obj_record_t o_140E_RPDOCommunicationParameter[4]; - OD_obj_record_t o_140F_RPDOCommunicationParameter[4]; - OD_obj_record_t o_1600_RPDOMappingParameter[9]; - OD_obj_record_t o_1601_RPDOMappingParameter[9]; - OD_obj_record_t o_1602_RPDOMappingParameter[9]; - OD_obj_record_t o_1603_RPDOMappingParameter[9]; - OD_obj_record_t o_1604_RPDOMappingParameter[9]; - OD_obj_record_t o_1605_RPDOMappingParameter[9]; - OD_obj_record_t o_1606_RPDOMappingParameter[9]; - OD_obj_record_t o_1607_RPDOMappingParameter[9]; - OD_obj_record_t o_1608_RPDOMappingParameter[9]; - OD_obj_record_t o_1609_RPDOMappingParameter[9]; - OD_obj_record_t o_160A_RPDOMappingParameter[9]; - OD_obj_record_t o_160B_RPDOMappingParameter[9]; - OD_obj_record_t o_160C_RPDOMappingParameter[9]; - OD_obj_record_t o_160D_RPDOMappingParameter[9]; - OD_obj_record_t o_160E_RPDOMappingParameter[9]; - OD_obj_record_t o_160F_RPDOMappingParameter[9]; - OD_obj_record_t o_1800_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1801_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1802_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1803_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1804_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1805_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1806_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1807_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1808_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1809_TPDOCommunicationParameter[7]; - OD_obj_record_t o_180A_TPDOCommunicationParameter[7]; - OD_obj_record_t o_180B_TPDOCommunicationParameter[7]; - OD_obj_record_t o_180C_TPDOCommunicationParameter[7]; - OD_obj_record_t o_180D_TPDOCommunicationParameter[7]; - OD_obj_record_t o_180E_TPDOCommunicationParameter[7]; - OD_obj_record_t o_180F_TPDOCommunicationParameter[7]; - OD_obj_record_t o_1A00_TPDOMappingParameter[9]; - OD_obj_record_t o_1A01_TPDOMappingParameter[9]; - OD_obj_record_t o_1A02_TPDOMappingParameter[9]; - OD_obj_record_t o_1A03_TPDOMappingParameter[9]; - OD_obj_record_t o_1A04_TPDOMappingParameter[9]; - OD_obj_record_t o_1A05_TPDOMappingParameter[9]; - OD_obj_record_t o_1A06_TPDOMappingParameter[9]; - OD_obj_record_t o_1A07_TPDOMappingParameter[9]; - OD_obj_record_t o_1A08_TPDOMappingParameter[9]; - OD_obj_record_t o_1A09_TPDOMappingParameter[9]; - OD_obj_record_t o_1A0A_TPDOMappingParameter[9]; - OD_obj_record_t o_1A0B_TPDOMappingParameter[9]; - OD_obj_record_t o_1A0C_TPDOMappingParameter[9]; - OD_obj_record_t o_1A0D_TPDOMappingParameter[9]; - OD_obj_record_t o_1A0E_TPDOMappingParameter[9]; - OD_obj_record_t o_1A0F_TPDOMappingParameter[9]; - OD_obj_var_t o_1F80_NMTStartup; + OD_obj_record_t o_1200_SDO_ServerParameter[4]; + OD_obj_record_t o_1400_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1401_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1402_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1403_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1404_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1405_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1406_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1407_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1408_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1409_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_140A_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_140B_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_140C_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_140D_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_140E_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_140F_RPDO_CommunicationParameter[4]; + OD_obj_record_t o_1600_RPDO_MappingParameter[9]; + OD_obj_record_t o_1601_RPDO_MappingParameter[9]; + OD_obj_record_t o_1602_RPDO_MappingParameter[9]; + OD_obj_record_t o_1603_RPDO_MappingParameter[9]; + OD_obj_record_t o_1604_RPDO_MappingParameter[9]; + OD_obj_record_t o_1605_RPDO_MappingParameter[9]; + OD_obj_record_t o_1606_RPDO_MappingParameter[9]; + OD_obj_record_t o_1607_RPDO_MappingParameter[9]; + OD_obj_record_t o_1608_RPDO_MappingParameter[9]; + OD_obj_record_t o_1609_RPDO_MappingParameter[9]; + OD_obj_record_t o_160A_RPDO_MappingParameter[9]; + OD_obj_record_t o_160B_RPDO_MappingParameter[9]; + OD_obj_record_t o_160C_RPDO_MappingParameter[9]; + OD_obj_record_t o_160D_RPDO_MappingParameter[9]; + OD_obj_record_t o_160E_RPDO_MappingParameter[9]; + OD_obj_record_t o_160F_RPDO_MappingParameter[9]; + OD_obj_record_t o_1800_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1801_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1802_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1803_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1804_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1805_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1806_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1807_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1808_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1809_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_180A_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_180B_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_180C_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_180D_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_180E_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_180F_TPDO_CommunicationParameter[7]; + OD_obj_record_t o_1A00_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A01_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A02_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A03_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A04_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A05_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A06_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A07_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A08_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A09_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A0A_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A0B_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A0C_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A0D_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A0E_TPDO_MappingParameter[9]; + OD_obj_record_t o_1A0F_TPDO_MappingParameter[9]; + OD_obj_var_t o_1F80_nmtstartup; OD_obj_record_t o_2000_BUS_Management[5]; OD_obj_var_t o_2010_SCET; OD_obj_var_t o_2011_UTC; @@ -838,6 +828,7 @@ typedef struct { OD_obj_record_t o_6004_magnetometerPZ2[4]; OD_obj_record_t o_6005_magnetometerMZ1[4]; OD_obj_record_t o_6006_magnetometerMZ2[4]; + OD_obj_record_t o_6007_magnetorquer[7]; } ODObjs_t; static CO_PROGMEM ODObjs_t ODObjs = { @@ -848,24 +839,24 @@ static CO_PROGMEM ODObjs_t ODObjs = { }, .o_1001_errorRegister = { .dataOrig = &OD_RAM.x1001_errorRegister, - .attribute = ODA_SDO_R | ODA_TRPDO, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 1 }, .o_1002_manufacturerStatusRegister = { .dataOrig = &OD_RAM.x1002_manufacturerStatusRegister, - .attribute = ODA_SDO_R | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 4 }, - .o_1003_pre_definedErrorField = { - .dataOrig0 = &OD_RAM.x1003_pre_definedErrorField_sub0, - .dataOrig = &OD_RAM.x1003_pre_definedErrorField[0], - .attribute0 = ODA_SDO_RW, + .o_1003_preDefinedErrorField = { + .dataOrig0 = &OD_RAM.x1003_preDefinedErrorField_sub0, + .dataOrig = &OD_RAM.x1003_preDefinedErrorField[0], + .attribute0 = ODA_SDO_R, .attribute = ODA_SDO_R | ODA_MB, .dataElementLength = 4, .dataElementSizeof = sizeof(uint32_t) }, - .o_1005_COB_ID_SYNCMessage = { - .dataOrig = &OD_PERSIST_COMM.x1005_COB_ID_SYNCMessage, + .o_1005_COB_ID_SYNC_Message = { + .dataOrig = &OD_PERSIST_COMM.x1005_COB_ID_SYNC_Message, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, @@ -935,13 +926,13 @@ static CO_PROGMEM ODObjs_t ODObjs = { }, .o_1018_identity = { { - .dataOrig = &OD_ROM.x1018_identity.highestSub_indexSupported, + .dataOrig = &OD_ROM.x1018_identity.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_ROM.x1018_identity.vendor_ID, + .dataOrig = &OD_ROM.x1018_identity.vendorID, .subIndex = 1, .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 @@ -963,7 +954,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { .subIndex = 4, .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 - } + }, }, .o_1019_synchronousCounterOverflowValue = { .dataOrig = &OD_PERSIST_COMM.x1019_synchronousCounterOverflowValue, @@ -978,2952 +969,2952 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataElementLength = 1, .dataElementSizeof = sizeof(uint8_t) }, - .o_1200_SDOServerParameter = { + .o_1200_SDO_ServerParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.COB_IDClientToServer, + .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ClientToServer, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.COB_IDServerToClient, + .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ServerToClient, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1200_SDOServerParameter.node_IDOfTheSDOClient, + .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.nodeID_OfTheSDO_Client, .subIndex = 3, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1400_RPDOCommunicationParameter = { + .o_1400_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1401_RPDOCommunicationParameter = { + .o_1401_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1402_RPDOCommunicationParameter = { + .o_1402_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1403_RPDOCommunicationParameter = { + .o_1403_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1404_RPDOCommunicationParameter = { + .o_1404_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1405_RPDOCommunicationParameter = { + .o_1405_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1406_RPDOCommunicationParameter = { + .o_1406_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1407_RPDOCommunicationParameter = { + .o_1407_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1408_RPDOCommunicationParameter = { + .o_1408_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1409_RPDOCommunicationParameter = { + .o_1409_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_140A_RPDOCommunicationParameter = { + .o_140A_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_140B_RPDOCommunicationParameter = { + .o_140B_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_140C_RPDOCommunicationParameter = { + .o_140C_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_140D_RPDOCommunicationParameter = { + .o_140D_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_140E_RPDOCommunicationParameter = { + .o_140E_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_140F_RPDOCommunicationParameter = { + .o_140F_RPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.COB_IDUsedByRPDO, + .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 - } + }, }, - .o_1600_RPDOMappingParameter = { + .o_1600_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1601_RPDOMappingParameter = { + .o_1601_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1602_RPDOMappingParameter = { + .o_1602_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1603_RPDOMappingParameter = { + .o_1603_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1604_RPDOMappingParameter = { + .o_1604_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1605_RPDOMappingParameter = { + .o_1605_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1606_RPDOMappingParameter = { + .o_1606_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1607_RPDOMappingParameter = { + .o_1607_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1608_RPDOMappingParameter = { + .o_1608_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1609_RPDOMappingParameter = { + .o_1609_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_160A_RPDOMappingParameter = { + .o_160A_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_160B_RPDOMappingParameter = { + .o_160B_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_160C_RPDOMappingParameter = { + .o_160C_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_160D_RPDOMappingParameter = { + .o_160D_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_160E_RPDOMappingParameter = { + .o_160E_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_160F_RPDOMappingParameter = { + .o_160F_RPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1800_TPDOCommunicationParameter = { + .o_1800_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1801_TPDOCommunicationParameter = { + .o_1801_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1802_TPDOCommunicationParameter = { + .o_1802_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1803_TPDOCommunicationParameter = { + .o_1803_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1804_TPDOCommunicationParameter = { + .o_1804_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1805_TPDOCommunicationParameter = { + .o_1805_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1806_TPDOCommunicationParameter = { + .o_1806_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1807_TPDOCommunicationParameter = { + .o_1807_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1808_TPDOCommunicationParameter = { + .o_1808_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1809_TPDOCommunicationParameter = { + .o_1809_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_180A_TPDOCommunicationParameter = { + .o_180A_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_180B_TPDOCommunicationParameter = { + .o_180B_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_180C_TPDOCommunicationParameter = { + .o_180C_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_180D_TPDOCommunicationParameter = { + .o_180D_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_180E_TPDOCommunicationParameter = { + .o_180E_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_180F_TPDOCommunicationParameter = { + .o_180F_TPDO_CommunicationParameter = { { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.COB_IDUsedByTPDO, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.transmissionType, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.transmissionType, .subIndex = 2, .attribute = ODA_SDO_RW, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.inhibitTime, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.compatibilityEntry, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.compatibilityEntry, .subIndex = 4, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.eventTimer, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDOCommunicationParameter.SYNCStartValue, + .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.SYNC_StartValue, .subIndex = 6, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, - .o_1A00_TPDOMappingParameter = { + .o_1A00_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A01_TPDOMappingParameter = { + .o_1A01_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A02_TPDOMappingParameter = { + .o_1A02_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A03_TPDOMappingParameter = { + .o_1A03_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A04_TPDOMappingParameter = { + .o_1A04_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A05_TPDOMappingParameter = { + .o_1A05_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A06_TPDOMappingParameter = { + .o_1A06_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A07_TPDOMappingParameter = { + .o_1A07_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A08_TPDOMappingParameter = { + .o_1A08_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A09_TPDOMappingParameter = { + .o_1A09_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A0A_TPDOMappingParameter = { + .o_1A0A_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A0B_TPDOMappingParameter = { + .o_1A0B_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A0C_TPDOMappingParameter = { + .o_1A0C_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A0D_TPDOMappingParameter = { + .o_1A0D_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A0E_TPDOMappingParameter = { + .o_1A0E_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1A0F_TPDOMappingParameter = { + .o_1A0F_TPDO_MappingParameter = { { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.numberOfMappedApplicationObjectsInPDO, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, .subIndex = 0, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_1, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_2, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_3, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_4, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_5, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_6, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_7, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDOMappingParameter.applicationObject_8, + .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 - } + }, }, - .o_1F80_NMTStartup = { - .dataOrig = &OD_PERSIST_COMM.x1F80_NMTStartup, + .o_1F80_nmtstartup = { + .dataOrig = &OD_PERSIST_COMM.x1F80_nmtstartup, .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, .o_2000_BUS_Management = { { - .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.highestSub_indexSupported, + .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 @@ -3951,7 +3942,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { .subIndex = 4, .attribute = ODA_SDO_RW, .dataLength = 1 - } + }, }, .o_2010_SCET = { .dataOrig = &OD_RAM.x2010_SCET, @@ -3973,7 +3964,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { }, .o_2021_MCU_Calibration = { { - .dataOrig = &OD_RAM.x2021_MCU_Calibration.highestSub_indexSupported, + .dataOrig = &OD_RAM.x2021_MCU_Calibration.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 @@ -3995,11 +3986,11 @@ static CO_PROGMEM ODObjs_t ODObjs = { .subIndex = 3, .attribute = ODA_SDO_R | ODA_MB, .dataLength = 2 - } + }, }, .o_2022_MCU_Sensors = { { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.highestSub_indexSupported, + .dataOrig = &OD_RAM.x2022_MCU_Sensors.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 @@ -4051,16 +4042,16 @@ static CO_PROGMEM ODObjs_t ODObjs = { .subIndex = 8, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } + }, }, .o_2100_errorStatusBits = { .dataOrig = &OD_RAM.x2100_errorStatusBits[0], .attribute = ODA_SDO_R, - .dataLength = 10 + .dataLength = 0 }, .o_6000_gyroscope = { { - .dataOrig = &OD_RAM.x6000_gyroscope.highestSub_indexSupported, + .dataOrig = &OD_RAM.x6000_gyroscope.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 @@ -4100,29 +4091,29 @@ static CO_PROGMEM ODObjs_t ODObjs = { .subIndex = 6, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } + }, }, .o_6001_acceleration = { { - .dataOrig = &OD_RAM.x6001_acceleration.highestSub_indexSupported, + .dataOrig = &OD_RAM.x6001_acceleration.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x6001_acceleration.accX, + .dataOrig = &OD_RAM.x6001_acceleration.accx, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6001_acceleration.accY, + .dataOrig = &OD_RAM.x6001_acceleration.accy, .subIndex = 2, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6001_acceleration.accZ, + .dataOrig = &OD_RAM.x6001_acceleration.accz, .subIndex = 3, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 @@ -4134,17 +4125,17 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6001_acceleration.accYRaw, + .dataOrig = &OD_RAM.x6001_acceleration.accyRaw, .subIndex = 5, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6001_acceleration.accZRaw, + .dataOrig = &OD_RAM.x6001_acceleration.acczRaw, .subIndex = 6, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } + }, }, .o_6002_IMU_Temperature = { .dataOrig = &OD_RAM.x6002_IMU_Temperature, @@ -4153,120 +4144,160 @@ static CO_PROGMEM ODObjs_t ODObjs = { }, .o_6003_magnetometerPZ1 = { { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.highestSub_indexSupported, + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magX, + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magx, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magY, + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magy, .subIndex = 2, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magZ, + .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magz, .subIndex = 3, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } + }, }, .o_6004_magnetometerPZ2 = { { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.highestSub_indexSupported, + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magX, + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magx, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magY, + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magy, .subIndex = 2, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magZ, + .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magz, .subIndex = 3, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } + }, }, .o_6005_magnetometerMZ1 = { { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.highestSub_indexSupported, + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magX, + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magx, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magY, + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magy, .subIndex = 2, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magZ, + .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magz, .subIndex = 3, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } + }, }, .o_6006_magnetometerMZ2 = { { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.highestSub_indexSupported, + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.highestSubIndexSupported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magX, + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magx, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magY, + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magy, .subIndex = 2, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magZ, + .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magz, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_6007_magnetorquer = { + { + .dataOrig = &OD_RAM.x6007_magnetorquer.highestSubIndexSupported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle, .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrentUA, + .subIndex = 4, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 - } - } + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrentUA, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrentUA, + .subIndex = 6, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, }; - -/******************************************************************************* - Object dictionary -*******************************************************************************/ static OD_ATTR_OD OD_entry_t ODList[] = { {0x1000, 0x01, ODT_VAR, &ODObjs.o_1000_deviceType, NULL}, {0x1001, 0x01, ODT_VAR, &ODObjs.o_1001_errorRegister, NULL}, {0x1002, 0x01, ODT_VAR, &ODObjs.o_1002_manufacturerStatusRegister, NULL}, - {0x1003, 0x09, ODT_ARR, &ODObjs.o_1003_pre_definedErrorField, NULL}, - {0x1005, 0x01, ODT_VAR, &ODObjs.o_1005_COB_ID_SYNCMessage, NULL}, + {0x1003, 0x09, ODT_ARR, &ODObjs.o_1003_preDefinedErrorField, NULL}, + {0x1005, 0x01, ODT_VAR, &ODObjs.o_1005_COB_ID_SYNC_Message, NULL}, {0x1006, 0x01, ODT_VAR, &ODObjs.o_1006_communicationCyclePeriod, NULL}, {0x1007, 0x01, ODT_VAR, &ODObjs.o_1007_synchronousWindowLength, NULL}, {0x1008, 0x01, ODT_VAR, &ODObjs.o_1008_manufacturerDeviceName, NULL}, @@ -4281,72 +4312,72 @@ static OD_ATTR_OD OD_entry_t ODList[] = { {0x1018, 0x05, ODT_REC, &ODObjs.o_1018_identity, NULL}, {0x1019, 0x01, ODT_VAR, &ODObjs.o_1019_synchronousCounterOverflowValue, NULL}, {0x1029, 0x07, ODT_ARR, &ODObjs.o_1029_errorBehavior, NULL}, - {0x1200, 0x04, ODT_REC, &ODObjs.o_1200_SDOServerParameter, NULL}, - {0x1400, 0x04, ODT_REC, &ODObjs.o_1400_RPDOCommunicationParameter, NULL}, - {0x1401, 0x04, ODT_REC, &ODObjs.o_1401_RPDOCommunicationParameter, NULL}, - {0x1402, 0x04, ODT_REC, &ODObjs.o_1402_RPDOCommunicationParameter, NULL}, - {0x1403, 0x04, ODT_REC, &ODObjs.o_1403_RPDOCommunicationParameter, NULL}, - {0x1404, 0x04, ODT_REC, &ODObjs.o_1404_RPDOCommunicationParameter, NULL}, - {0x1405, 0x04, ODT_REC, &ODObjs.o_1405_RPDOCommunicationParameter, NULL}, - {0x1406, 0x04, ODT_REC, &ODObjs.o_1406_RPDOCommunicationParameter, NULL}, - {0x1407, 0x04, ODT_REC, &ODObjs.o_1407_RPDOCommunicationParameter, NULL}, - {0x1408, 0x04, ODT_REC, &ODObjs.o_1408_RPDOCommunicationParameter, NULL}, - {0x1409, 0x04, ODT_REC, &ODObjs.o_1409_RPDOCommunicationParameter, NULL}, - {0x140A, 0x04, ODT_REC, &ODObjs.o_140A_RPDOCommunicationParameter, NULL}, - {0x140B, 0x04, ODT_REC, &ODObjs.o_140B_RPDOCommunicationParameter, NULL}, - {0x140C, 0x04, ODT_REC, &ODObjs.o_140C_RPDOCommunicationParameter, NULL}, - {0x140D, 0x04, ODT_REC, &ODObjs.o_140D_RPDOCommunicationParameter, NULL}, - {0x140E, 0x04, ODT_REC, &ODObjs.o_140E_RPDOCommunicationParameter, NULL}, - {0x140F, 0x04, ODT_REC, &ODObjs.o_140F_RPDOCommunicationParameter, NULL}, - {0x1600, 0x09, ODT_REC, &ODObjs.o_1600_RPDOMappingParameter, NULL}, - {0x1601, 0x09, ODT_REC, &ODObjs.o_1601_RPDOMappingParameter, NULL}, - {0x1602, 0x09, ODT_REC, &ODObjs.o_1602_RPDOMappingParameter, NULL}, - {0x1603, 0x09, ODT_REC, &ODObjs.o_1603_RPDOMappingParameter, NULL}, - {0x1604, 0x09, ODT_REC, &ODObjs.o_1604_RPDOMappingParameter, NULL}, - {0x1605, 0x09, ODT_REC, &ODObjs.o_1605_RPDOMappingParameter, NULL}, - {0x1606, 0x09, ODT_REC, &ODObjs.o_1606_RPDOMappingParameter, NULL}, - {0x1607, 0x09, ODT_REC, &ODObjs.o_1607_RPDOMappingParameter, NULL}, - {0x1608, 0x09, ODT_REC, &ODObjs.o_1608_RPDOMappingParameter, NULL}, - {0x1609, 0x09, ODT_REC, &ODObjs.o_1609_RPDOMappingParameter, NULL}, - {0x160A, 0x09, ODT_REC, &ODObjs.o_160A_RPDOMappingParameter, NULL}, - {0x160B, 0x09, ODT_REC, &ODObjs.o_160B_RPDOMappingParameter, NULL}, - {0x160C, 0x09, ODT_REC, &ODObjs.o_160C_RPDOMappingParameter, NULL}, - {0x160D, 0x09, ODT_REC, &ODObjs.o_160D_RPDOMappingParameter, NULL}, - {0x160E, 0x09, ODT_REC, &ODObjs.o_160E_RPDOMappingParameter, NULL}, - {0x160F, 0x09, ODT_REC, &ODObjs.o_160F_RPDOMappingParameter, NULL}, - {0x1800, 0x07, ODT_REC, &ODObjs.o_1800_TPDOCommunicationParameter, NULL}, - {0x1801, 0x07, ODT_REC, &ODObjs.o_1801_TPDOCommunicationParameter, NULL}, - {0x1802, 0x07, ODT_REC, &ODObjs.o_1802_TPDOCommunicationParameter, NULL}, - {0x1803, 0x07, ODT_REC, &ODObjs.o_1803_TPDOCommunicationParameter, NULL}, - {0x1804, 0x07, ODT_REC, &ODObjs.o_1804_TPDOCommunicationParameter, NULL}, - {0x1805, 0x07, ODT_REC, &ODObjs.o_1805_TPDOCommunicationParameter, NULL}, - {0x1806, 0x07, ODT_REC, &ODObjs.o_1806_TPDOCommunicationParameter, NULL}, - {0x1807, 0x07, ODT_REC, &ODObjs.o_1807_TPDOCommunicationParameter, NULL}, - {0x1808, 0x07, ODT_REC, &ODObjs.o_1808_TPDOCommunicationParameter, NULL}, - {0x1809, 0x07, ODT_REC, &ODObjs.o_1809_TPDOCommunicationParameter, NULL}, - {0x180A, 0x07, ODT_REC, &ODObjs.o_180A_TPDOCommunicationParameter, NULL}, - {0x180B, 0x07, ODT_REC, &ODObjs.o_180B_TPDOCommunicationParameter, NULL}, - {0x180C, 0x07, ODT_REC, &ODObjs.o_180C_TPDOCommunicationParameter, NULL}, - {0x180D, 0x07, ODT_REC, &ODObjs.o_180D_TPDOCommunicationParameter, NULL}, - {0x180E, 0x07, ODT_REC, &ODObjs.o_180E_TPDOCommunicationParameter, NULL}, - {0x180F, 0x07, ODT_REC, &ODObjs.o_180F_TPDOCommunicationParameter, NULL}, - {0x1A00, 0x09, ODT_REC, &ODObjs.o_1A00_TPDOMappingParameter, NULL}, - {0x1A01, 0x09, ODT_REC, &ODObjs.o_1A01_TPDOMappingParameter, NULL}, - {0x1A02, 0x09, ODT_REC, &ODObjs.o_1A02_TPDOMappingParameter, NULL}, - {0x1A03, 0x09, ODT_REC, &ODObjs.o_1A03_TPDOMappingParameter, NULL}, - {0x1A04, 0x09, ODT_REC, &ODObjs.o_1A04_TPDOMappingParameter, NULL}, - {0x1A05, 0x09, ODT_REC, &ODObjs.o_1A05_TPDOMappingParameter, NULL}, - {0x1A06, 0x09, ODT_REC, &ODObjs.o_1A06_TPDOMappingParameter, NULL}, - {0x1A07, 0x09, ODT_REC, &ODObjs.o_1A07_TPDOMappingParameter, NULL}, - {0x1A08, 0x09, ODT_REC, &ODObjs.o_1A08_TPDOMappingParameter, NULL}, - {0x1A09, 0x09, ODT_REC, &ODObjs.o_1A09_TPDOMappingParameter, NULL}, - {0x1A0A, 0x09, ODT_REC, &ODObjs.o_1A0A_TPDOMappingParameter, NULL}, - {0x1A0B, 0x09, ODT_REC, &ODObjs.o_1A0B_TPDOMappingParameter, NULL}, - {0x1A0C, 0x09, ODT_REC, &ODObjs.o_1A0C_TPDOMappingParameter, NULL}, - {0x1A0D, 0x09, ODT_REC, &ODObjs.o_1A0D_TPDOMappingParameter, NULL}, - {0x1A0E, 0x09, ODT_REC, &ODObjs.o_1A0E_TPDOMappingParameter, NULL}, - {0x1A0F, 0x09, ODT_REC, &ODObjs.o_1A0F_TPDOMappingParameter, NULL}, - {0x1F80, 0x01, ODT_VAR, &ODObjs.o_1F80_NMTStartup, NULL}, + {0x1200, 0x04, ODT_REC, &ODObjs.o_1200_SDO_ServerParameter, NULL}, + {0x1400, 0x04, ODT_REC, &ODObjs.o_1400_RPDO_CommunicationParameter, NULL}, + {0x1401, 0x04, ODT_REC, &ODObjs.o_1401_RPDO_CommunicationParameter, NULL}, + {0x1402, 0x04, ODT_REC, &ODObjs.o_1402_RPDO_CommunicationParameter, NULL}, + {0x1403, 0x04, ODT_REC, &ODObjs.o_1403_RPDO_CommunicationParameter, NULL}, + {0x1404, 0x04, ODT_REC, &ODObjs.o_1404_RPDO_CommunicationParameter, NULL}, + {0x1405, 0x04, ODT_REC, &ODObjs.o_1405_RPDO_CommunicationParameter, NULL}, + {0x1406, 0x04, ODT_REC, &ODObjs.o_1406_RPDO_CommunicationParameter, NULL}, + {0x1407, 0x04, ODT_REC, &ODObjs.o_1407_RPDO_CommunicationParameter, NULL}, + {0x1408, 0x04, ODT_REC, &ODObjs.o_1408_RPDO_CommunicationParameter, NULL}, + {0x1409, 0x04, ODT_REC, &ODObjs.o_1409_RPDO_CommunicationParameter, NULL}, + {0x140A, 0x04, ODT_REC, &ODObjs.o_140A_RPDO_CommunicationParameter, NULL}, + {0x140B, 0x04, ODT_REC, &ODObjs.o_140B_RPDO_CommunicationParameter, NULL}, + {0x140C, 0x04, ODT_REC, &ODObjs.o_140C_RPDO_CommunicationParameter, NULL}, + {0x140D, 0x04, ODT_REC, &ODObjs.o_140D_RPDO_CommunicationParameter, NULL}, + {0x140E, 0x04, ODT_REC, &ODObjs.o_140E_RPDO_CommunicationParameter, NULL}, + {0x140F, 0x04, ODT_REC, &ODObjs.o_140F_RPDO_CommunicationParameter, NULL}, + {0x1600, 0x09, ODT_REC, &ODObjs.o_1600_RPDO_MappingParameter, NULL}, + {0x1601, 0x09, ODT_REC, &ODObjs.o_1601_RPDO_MappingParameter, NULL}, + {0x1602, 0x09, ODT_REC, &ODObjs.o_1602_RPDO_MappingParameter, NULL}, + {0x1603, 0x09, ODT_REC, &ODObjs.o_1603_RPDO_MappingParameter, NULL}, + {0x1604, 0x09, ODT_REC, &ODObjs.o_1604_RPDO_MappingParameter, NULL}, + {0x1605, 0x09, ODT_REC, &ODObjs.o_1605_RPDO_MappingParameter, NULL}, + {0x1606, 0x09, ODT_REC, &ODObjs.o_1606_RPDO_MappingParameter, NULL}, + {0x1607, 0x09, ODT_REC, &ODObjs.o_1607_RPDO_MappingParameter, NULL}, + {0x1608, 0x09, ODT_REC, &ODObjs.o_1608_RPDO_MappingParameter, NULL}, + {0x1609, 0x09, ODT_REC, &ODObjs.o_1609_RPDO_MappingParameter, NULL}, + {0x160A, 0x09, ODT_REC, &ODObjs.o_160A_RPDO_MappingParameter, NULL}, + {0x160B, 0x09, ODT_REC, &ODObjs.o_160B_RPDO_MappingParameter, NULL}, + {0x160C, 0x09, ODT_REC, &ODObjs.o_160C_RPDO_MappingParameter, NULL}, + {0x160D, 0x09, ODT_REC, &ODObjs.o_160D_RPDO_MappingParameter, NULL}, + {0x160E, 0x09, ODT_REC, &ODObjs.o_160E_RPDO_MappingParameter, NULL}, + {0x160F, 0x09, ODT_REC, &ODObjs.o_160F_RPDO_MappingParameter, NULL}, + {0x1800, 0x07, ODT_REC, &ODObjs.o_1800_TPDO_CommunicationParameter, NULL}, + {0x1801, 0x07, ODT_REC, &ODObjs.o_1801_TPDO_CommunicationParameter, NULL}, + {0x1802, 0x07, ODT_REC, &ODObjs.o_1802_TPDO_CommunicationParameter, NULL}, + {0x1803, 0x07, ODT_REC, &ODObjs.o_1803_TPDO_CommunicationParameter, NULL}, + {0x1804, 0x07, ODT_REC, &ODObjs.o_1804_TPDO_CommunicationParameter, NULL}, + {0x1805, 0x07, ODT_REC, &ODObjs.o_1805_TPDO_CommunicationParameter, NULL}, + {0x1806, 0x07, ODT_REC, &ODObjs.o_1806_TPDO_CommunicationParameter, NULL}, + {0x1807, 0x07, ODT_REC, &ODObjs.o_1807_TPDO_CommunicationParameter, NULL}, + {0x1808, 0x07, ODT_REC, &ODObjs.o_1808_TPDO_CommunicationParameter, NULL}, + {0x1809, 0x07, ODT_REC, &ODObjs.o_1809_TPDO_CommunicationParameter, NULL}, + {0x180A, 0x07, ODT_REC, &ODObjs.o_180A_TPDO_CommunicationParameter, NULL}, + {0x180B, 0x07, ODT_REC, &ODObjs.o_180B_TPDO_CommunicationParameter, NULL}, + {0x180C, 0x07, ODT_REC, &ODObjs.o_180C_TPDO_CommunicationParameter, NULL}, + {0x180D, 0x07, ODT_REC, &ODObjs.o_180D_TPDO_CommunicationParameter, NULL}, + {0x180E, 0x07, ODT_REC, &ODObjs.o_180E_TPDO_CommunicationParameter, NULL}, + {0x180F, 0x07, ODT_REC, &ODObjs.o_180F_TPDO_CommunicationParameter, NULL}, + {0x1A00, 0x09, ODT_REC, &ODObjs.o_1A00_TPDO_MappingParameter, NULL}, + {0x1A01, 0x09, ODT_REC, &ODObjs.o_1A01_TPDO_MappingParameter, NULL}, + {0x1A02, 0x09, ODT_REC, &ODObjs.o_1A02_TPDO_MappingParameter, NULL}, + {0x1A03, 0x09, ODT_REC, &ODObjs.o_1A03_TPDO_MappingParameter, NULL}, + {0x1A04, 0x09, ODT_REC, &ODObjs.o_1A04_TPDO_MappingParameter, NULL}, + {0x1A05, 0x09, ODT_REC, &ODObjs.o_1A05_TPDO_MappingParameter, NULL}, + {0x1A06, 0x09, ODT_REC, &ODObjs.o_1A06_TPDO_MappingParameter, NULL}, + {0x1A07, 0x09, ODT_REC, &ODObjs.o_1A07_TPDO_MappingParameter, NULL}, + {0x1A08, 0x09, ODT_REC, &ODObjs.o_1A08_TPDO_MappingParameter, NULL}, + {0x1A09, 0x09, ODT_REC, &ODObjs.o_1A09_TPDO_MappingParameter, NULL}, + {0x1A0A, 0x09, ODT_REC, &ODObjs.o_1A0A_TPDO_MappingParameter, NULL}, + {0x1A0B, 0x09, ODT_REC, &ODObjs.o_1A0B_TPDO_MappingParameter, NULL}, + {0x1A0C, 0x09, ODT_REC, &ODObjs.o_1A0C_TPDO_MappingParameter, NULL}, + {0x1A0D, 0x09, ODT_REC, &ODObjs.o_1A0D_TPDO_MappingParameter, NULL}, + {0x1A0E, 0x09, ODT_REC, &ODObjs.o_1A0E_TPDO_MappingParameter, NULL}, + {0x1A0F, 0x09, ODT_REC, &ODObjs.o_1A0F_TPDO_MappingParameter, NULL}, + {0x1F80, 0x01, ODT_VAR, &ODObjs.o_1F80_nmtstartup, NULL}, {0x2000, 0x05, ODT_REC, &ODObjs.o_2000_BUS_Management, NULL}, {0x2010, 0x01, ODT_VAR, &ODObjs.o_2010_SCET, NULL}, {0x2011, 0x01, ODT_VAR, &ODObjs.o_2011_UTC, NULL}, @@ -4361,6 +4392,7 @@ static OD_ATTR_OD OD_entry_t ODList[] = { {0x6004, 0x04, ODT_REC, &ODObjs.o_6004_magnetometerPZ2, NULL}, {0x6005, 0x04, ODT_REC, &ODObjs.o_6005_magnetometerMZ1, NULL}, {0x6006, 0x04, ODT_REC, &ODObjs.o_6006_magnetometerMZ2, NULL}, + {0x6007, 0x07, ODT_REC, &ODObjs.o_6007_magnetorquer, NULL}, {0x0000, 0x00, 0, NULL, NULL} }; diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h index 665be0d2..61d2bf1d 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.h +++ b/src/f0/app_adcs/source/ObjDict/OD.h @@ -1,38 +1,6 @@ -/******************************************************************************* - CANopen Object Dictionary definition for CANopenNode V4 - - This file was automatically generated by CANopenEditor v4.0-51-g2d9b1ad - - https://github.com/CANopenNode/CANopenNode - https://github.com/CANopenNode/CANopenEditor - - DON'T EDIT THIS FILE MANUALLY !!!! -******************************************************************************** - - File info: - File Names: OD.h; OD.c - Project File: app.xdd - File Version: 0 - - Created: 8/12/2019 2:51:00 PM - Created By: Miles Simpson - Modified: 11/28/2021 11:21:02 AM - Modified By: Ryan Meidick - - Device Info: - Vendor Name: Portland State Aerospace Society - Vendor ID: 0 - Product Name: OreSat IMU - Product ID: 0 - - Description: OreSat IMU Application Object Dictionary -*******************************************************************************/ - #ifndef OD_H #define OD_H -/******************************************************************************* - Counters of OD objects -*******************************************************************************/ + #define OD_CNT_NMT 1 #define OD_CNT_EM 1 #define OD_CNT_SYNC 1 @@ -42,13 +10,10 @@ #define OD_CNT_HB_CONS 1 #define OD_CNT_HB_PROD 1 #define OD_CNT_SDO_SRV 1 +#define OD_CNT_SDO_CLI 1 #define OD_CNT_RPDO 16 #define OD_CNT_TPDO 16 - -/******************************************************************************* - Sizes of OD arrays -*******************************************************************************/ #define OD_CNT_ARR_1003 8 #define OD_CNT_ARR_1010 4 #define OD_CNT_ARR_1011 4 @@ -56,18 +21,14 @@ #define OD_CNT_ARR_1029 6 #define OD_CNT_ARR_2020 3 - -/******************************************************************************* - OD data declaration of all groups -*******************************************************************************/ typedef struct { uint32_t x1000_deviceType; char x1008_manufacturerDeviceName[12]; char x1009_manufacturerHardwareVersion[4]; char x100A_manufacturerSoftwareVersion[6]; struct { - uint8_t highestSub_indexSupported; - uint32_t vendor_ID; + uint8_t highestSubIndexSupported; + uint32_t vendorID; uint32_t productCode; uint32_t revisionNumber; uint32_t serialNumber; @@ -79,8 +40,8 @@ typedef struct { typedef struct { uint8_t x1001_errorRegister; uint32_t x1002_manufacturerStatusRegister; - uint8_t x1003_pre_definedErrorField_sub0; - uint32_t x1003_pre_definedErrorField[OD_CNT_ARR_1003]; + uint8_t x1003_preDefinedErrorField_sub0; + uint32_t x1003_preDefinedErrorField[OD_CNT_ARR_1003]; uint8_t x1010_storeParameters_sub0; uint32_t x1010_storeParameters[OD_CNT_ARR_1010]; uint8_t x1011_restoreDefaultParameters_sub0; @@ -90,13 +51,13 @@ typedef struct { uint8_t x2020_MCU_UniqueDeviceID_sub0; uint32_t x2020_MCU_UniqueDeviceID[OD_CNT_ARR_2020]; struct { - uint8_t highestSub_indexSupported; + uint8_t highestSubIndexSupported; uint16_t TS_CAL1; uint16_t TS_CAL2; uint16_t VREFINT_CAL; } x2021_MCU_Calibration; struct { - uint8_t highestSub_indexSupported; + uint8_t highestSubIndexSupported; int8_t temperature; uint8_t VREFINT; uint8_t VBAT; @@ -108,7 +69,7 @@ typedef struct { } x2022_MCU_Sensors; uint8_t x2100_errorStatusBits[10]; struct { - uint8_t highestSub_indexSupported; + uint8_t highestSubIndexSupported; int16_t pitchRate; int16_t yawRate; int16_t rollRate; @@ -117,43 +78,52 @@ typedef struct { uint16_t rollRateRaw; } x6000_gyroscope; struct { - uint8_t highestSub_indexSupported; - int16_t accX; - int16_t accY; - int16_t accZ; + uint8_t highestSubIndexSupported; + int16_t accx; + int16_t accy; + int16_t accz; uint16_t accXRaw; - uint16_t accYRaw; - uint16_t accZRaw; + uint16_t accyRaw; + uint16_t acczRaw; } x6001_acceleration; int8_t x6002_IMU_Temperature; struct { - uint8_t highestSub_indexSupported; - int16_t magX; - int16_t magY; - int16_t magZ; + uint8_t highestSubIndexSupported; + int16_t magx; + int16_t magy; + int16_t magz; } x6003_magnetometerPZ1; struct { - uint8_t highestSub_indexSupported; - int16_t magX; - int16_t magY; - int16_t magZ; + uint8_t highestSubIndexSupported; + int16_t magx; + int16_t magy; + int16_t magz; } x6004_magnetometerPZ2; struct { - uint8_t highestSub_indexSupported; - int16_t magX; - int16_t magY; - int16_t magZ; + uint8_t highestSubIndexSupported; + int16_t magx; + int16_t magy; + int16_t magz; } x6005_magnetometerMZ1; struct { - uint8_t highestSub_indexSupported; - int16_t magX; - int16_t magY; - int16_t magZ; + uint8_t highestSubIndexSupported; + int16_t magx; + int16_t magy; + int16_t magz; } x6006_magnetometerMZ2; + struct { + uint8_t highestSubIndexSupported; + int16_t magnetorquerXPWM_DutyCycle; + int16_t magnetorquerYPWM_DutyCycle; + int16_t magnetorquerZPWM_DutyCycle; + int16_t magnetorquerXCurrentUA; + int16_t magnetorquerYCurrentUA; + int16_t magnetorquerZCurrentUA; + } x6007_magnetorquer; } OD_RAM_t; typedef struct { - uint32_t x1005_COB_ID_SYNCMessage; + uint32_t x1005_COB_ID_SYNC_Message; uint32_t x1006_communicationCyclePeriod; uint32_t x1007_synchronousWindowLength; uint32_t x1014_COB_ID_EMCY; @@ -163,107 +133,107 @@ typedef struct { uint16_t x1017_producerHeartbeatTime; uint8_t x1019_synchronousCounterOverflowValue; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDClientToServer; - uint32_t COB_IDServerToClient; - uint8_t node_IDOfTheSDOClient; - } x1200_SDOServerParameter; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_ClientToServer; + uint32_t COB_ID_ServerToClient; + uint8_t nodeID_OfTheSDO_Client; + } x1200_SDO_ServerParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1400_RPDOCommunicationParameter; + } x1400_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1401_RPDOCommunicationParameter; + } x1401_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1402_RPDOCommunicationParameter; + } x1402_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1403_RPDOCommunicationParameter; + } x1403_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1404_RPDOCommunicationParameter; + } x1404_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1405_RPDOCommunicationParameter; + } x1405_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1406_RPDOCommunicationParameter; + } x1406_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1407_RPDOCommunicationParameter; + } x1407_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1408_RPDOCommunicationParameter; + } x1408_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x1409_RPDOCommunicationParameter; + } x1409_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x140A_RPDOCommunicationParameter; + } x140A_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x140B_RPDOCommunicationParameter; + } x140B_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x140C_RPDOCommunicationParameter; + } x140C_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x140D_RPDOCommunicationParameter; + } x140D_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x140E_RPDOCommunicationParameter; + } x140E_RPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByRPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByRPDO; uint8_t transmissionType; uint16_t eventTimer; - } x140F_RPDOCommunicationParameter; + } x140F_RPDO_CommunicationParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -274,7 +244,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1600_RPDOMappingParameter; + } x1600_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -285,7 +255,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1601_RPDOMappingParameter; + } x1601_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -296,7 +266,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1602_RPDOMappingParameter; + } x1602_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -307,7 +277,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1603_RPDOMappingParameter; + } x1603_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -318,7 +288,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1604_RPDOMappingParameter; + } x1604_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -329,7 +299,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1605_RPDOMappingParameter; + } x1605_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -340,7 +310,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1606_RPDOMappingParameter; + } x1606_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -351,7 +321,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1607_RPDOMappingParameter; + } x1607_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -362,7 +332,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1608_RPDOMappingParameter; + } x1608_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -373,7 +343,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1609_RPDOMappingParameter; + } x1609_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -384,7 +354,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x160A_RPDOMappingParameter; + } x160A_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -395,7 +365,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x160B_RPDOMappingParameter; + } x160B_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -406,7 +376,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x160C_RPDOMappingParameter; + } x160C_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -417,7 +387,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x160D_RPDOMappingParameter; + } x160D_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -428,7 +398,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x160E_RPDOMappingParameter; + } x160E_RPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -439,151 +409,151 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x160F_RPDOMappingParameter; + } x160F_RPDO_MappingParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1800_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1800_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1801_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1801_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1802_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1802_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1803_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1803_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1804_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1804_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1805_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1805_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1806_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1806_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1807_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1807_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1808_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1808_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x1809_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x1809_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x180A_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x180A_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x180B_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x180B_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x180C_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x180C_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x180D_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x180D_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x180E_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x180E_TPDO_CommunicationParameter; struct { - uint8_t highestSub_indexSupported; - uint32_t COB_IDUsedByTPDO; + uint8_t highestSubIndexSupported; + uint32_t COB_ID_UsedByTPDO; uint8_t transmissionType; uint16_t inhibitTime; uint8_t compatibilityEntry; uint16_t eventTimer; - uint8_t SYNCStartValue; - } x180F_TPDOCommunicationParameter; + uint8_t SYNC_StartValue; + } x180F_TPDO_CommunicationParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -594,7 +564,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A00_TPDOMappingParameter; + } x1A00_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -605,7 +575,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A01_TPDOMappingParameter; + } x1A01_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -616,7 +586,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A02_TPDOMappingParameter; + } x1A02_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -627,7 +597,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A03_TPDOMappingParameter; + } x1A03_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -638,7 +608,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A04_TPDOMappingParameter; + } x1A04_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -649,7 +619,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A05_TPDOMappingParameter; + } x1A05_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -660,7 +630,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A06_TPDOMappingParameter; + } x1A06_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -671,7 +641,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A07_TPDOMappingParameter; + } x1A07_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -682,7 +652,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A08_TPDOMappingParameter; + } x1A08_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -693,7 +663,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A09_TPDOMappingParameter; + } x1A09_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -704,7 +674,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A0A_TPDOMappingParameter; + } x1A0A_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -715,7 +685,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A0B_TPDOMappingParameter; + } x1A0B_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -726,7 +696,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A0C_TPDOMappingParameter; + } x1A0C_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -737,7 +707,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A0D_TPDOMappingParameter; + } x1A0D_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -748,7 +718,7 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A0E_TPDOMappingParameter; + } x1A0E_TPDO_MappingParameter; struct { uint8_t numberOfMappedApplicationObjectsInPDO; uint32_t applicationObject_1; @@ -759,13 +729,13 @@ typedef struct { uint32_t applicationObject_6; uint32_t applicationObject_7; uint32_t applicationObject_8; - } x1A0F_TPDOMappingParameter; - uint32_t x1F80_NMTStartup; + } x1A0F_TPDO_MappingParameter; + uint32_t x1F80_nmtstartup; } OD_PERSIST_COMM_t; typedef struct { struct { - uint8_t highestSub_indexSupported; + uint8_t highestSubIndexSupported; uint8_t bdefault; uint8_t ttoggle; uint8_t ntoggle; @@ -798,10 +768,6 @@ extern OD_ATTR_PERSIST_MFR OD_PERSIST_MFR_t OD_PERSIST_MFR; #endif extern OD_ATTR_OD OD_t *OD; - -/******************************************************************************* - Object dictionary entries - shortcuts -*******************************************************************************/ #define OD_ENTRY_H1000 &OD->list[0] #define OD_ENTRY_H1001 &OD->list[1] #define OD_ENTRY_H1002 &OD->list[2] @@ -901,16 +867,13 @@ extern OD_ATTR_OD OD_t *OD; #define OD_ENTRY_H6004 &OD->list[96] #define OD_ENTRY_H6005 &OD->list[97] #define OD_ENTRY_H6006 &OD->list[98] +#define OD_ENTRY_H6007 &OD->list[99] - -/******************************************************************************* - Object dictionary entries - shortcuts with names -*******************************************************************************/ #define OD_ENTRY_H1000_deviceType &OD->list[0] #define OD_ENTRY_H1001_errorRegister &OD->list[1] #define OD_ENTRY_H1002_manufacturerStatusRegister &OD->list[2] -#define OD_ENTRY_H1003_pre_definedErrorField &OD->list[3] -#define OD_ENTRY_H1005_COB_ID_SYNCMessage &OD->list[4] +#define OD_ENTRY_H1003_preDefinedErrorField &OD->list[3] +#define OD_ENTRY_H1005_COB_ID_SYNC_Message &OD->list[4] #define OD_ENTRY_H1006_communicationCyclePeriod &OD->list[5] #define OD_ENTRY_H1007_synchronousWindowLength &OD->list[6] #define OD_ENTRY_H1008_manufacturerDeviceName &OD->list[7] @@ -925,72 +888,72 @@ extern OD_ATTR_OD OD_t *OD; #define OD_ENTRY_H1018_identity &OD->list[16] #define OD_ENTRY_H1019_synchronousCounterOverflowValue &OD->list[17] #define OD_ENTRY_H1029_errorBehavior &OD->list[18] -#define OD_ENTRY_H1200_SDOServerParameter &OD->list[19] -#define OD_ENTRY_H1400_RPDOCommunicationParameter &OD->list[20] -#define OD_ENTRY_H1401_RPDOCommunicationParameter &OD->list[21] -#define OD_ENTRY_H1402_RPDOCommunicationParameter &OD->list[22] -#define OD_ENTRY_H1403_RPDOCommunicationParameter &OD->list[23] -#define OD_ENTRY_H1404_RPDOCommunicationParameter &OD->list[24] -#define OD_ENTRY_H1405_RPDOCommunicationParameter &OD->list[25] -#define OD_ENTRY_H1406_RPDOCommunicationParameter &OD->list[26] -#define OD_ENTRY_H1407_RPDOCommunicationParameter &OD->list[27] -#define OD_ENTRY_H1408_RPDOCommunicationParameter &OD->list[28] -#define OD_ENTRY_H1409_RPDOCommunicationParameter &OD->list[29] -#define OD_ENTRY_H140A_RPDOCommunicationParameter &OD->list[30] -#define OD_ENTRY_H140B_RPDOCommunicationParameter &OD->list[31] -#define OD_ENTRY_H140C_RPDOCommunicationParameter &OD->list[32] -#define OD_ENTRY_H140D_RPDOCommunicationParameter &OD->list[33] -#define OD_ENTRY_H140E_RPDOCommunicationParameter &OD->list[34] -#define OD_ENTRY_H140F_RPDOCommunicationParameter &OD->list[35] -#define OD_ENTRY_H1600_RPDOMappingParameter &OD->list[36] -#define OD_ENTRY_H1601_RPDOMappingParameter &OD->list[37] -#define OD_ENTRY_H1602_RPDOMappingParameter &OD->list[38] -#define OD_ENTRY_H1603_RPDOMappingParameter &OD->list[39] -#define OD_ENTRY_H1604_RPDOMappingParameter &OD->list[40] -#define OD_ENTRY_H1605_RPDOMappingParameter &OD->list[41] -#define OD_ENTRY_H1606_RPDOMappingParameter &OD->list[42] -#define OD_ENTRY_H1607_RPDOMappingParameter &OD->list[43] -#define OD_ENTRY_H1608_RPDOMappingParameter &OD->list[44] -#define OD_ENTRY_H1609_RPDOMappingParameter &OD->list[45] -#define OD_ENTRY_H160A_RPDOMappingParameter &OD->list[46] -#define OD_ENTRY_H160B_RPDOMappingParameter &OD->list[47] -#define OD_ENTRY_H160C_RPDOMappingParameter &OD->list[48] -#define OD_ENTRY_H160D_RPDOMappingParameter &OD->list[49] -#define OD_ENTRY_H160E_RPDOMappingParameter &OD->list[50] -#define OD_ENTRY_H160F_RPDOMappingParameter &OD->list[51] -#define OD_ENTRY_H1800_TPDOCommunicationParameter &OD->list[52] -#define OD_ENTRY_H1801_TPDOCommunicationParameter &OD->list[53] -#define OD_ENTRY_H1802_TPDOCommunicationParameter &OD->list[54] -#define OD_ENTRY_H1803_TPDOCommunicationParameter &OD->list[55] -#define OD_ENTRY_H1804_TPDOCommunicationParameter &OD->list[56] -#define OD_ENTRY_H1805_TPDOCommunicationParameter &OD->list[57] -#define OD_ENTRY_H1806_TPDOCommunicationParameter &OD->list[58] -#define OD_ENTRY_H1807_TPDOCommunicationParameter &OD->list[59] -#define OD_ENTRY_H1808_TPDOCommunicationParameter &OD->list[60] -#define OD_ENTRY_H1809_TPDOCommunicationParameter &OD->list[61] -#define OD_ENTRY_H180A_TPDOCommunicationParameter &OD->list[62] -#define OD_ENTRY_H180B_TPDOCommunicationParameter &OD->list[63] -#define OD_ENTRY_H180C_TPDOCommunicationParameter &OD->list[64] -#define OD_ENTRY_H180D_TPDOCommunicationParameter &OD->list[65] -#define OD_ENTRY_H180E_TPDOCommunicationParameter &OD->list[66] -#define OD_ENTRY_H180F_TPDOCommunicationParameter &OD->list[67] -#define OD_ENTRY_H1A00_TPDOMappingParameter &OD->list[68] -#define OD_ENTRY_H1A01_TPDOMappingParameter &OD->list[69] -#define OD_ENTRY_H1A02_TPDOMappingParameter &OD->list[70] -#define OD_ENTRY_H1A03_TPDOMappingParameter &OD->list[71] -#define OD_ENTRY_H1A04_TPDOMappingParameter &OD->list[72] -#define OD_ENTRY_H1A05_TPDOMappingParameter &OD->list[73] -#define OD_ENTRY_H1A06_TPDOMappingParameter &OD->list[74] -#define OD_ENTRY_H1A07_TPDOMappingParameter &OD->list[75] -#define OD_ENTRY_H1A08_TPDOMappingParameter &OD->list[76] -#define OD_ENTRY_H1A09_TPDOMappingParameter &OD->list[77] -#define OD_ENTRY_H1A0A_TPDOMappingParameter &OD->list[78] -#define OD_ENTRY_H1A0B_TPDOMappingParameter &OD->list[79] -#define OD_ENTRY_H1A0C_TPDOMappingParameter &OD->list[80] -#define OD_ENTRY_H1A0D_TPDOMappingParameter &OD->list[81] -#define OD_ENTRY_H1A0E_TPDOMappingParameter &OD->list[82] -#define OD_ENTRY_H1A0F_TPDOMappingParameter &OD->list[83] -#define OD_ENTRY_H1F80_NMTStartup &OD->list[84] +#define OD_ENTRY_H1200_SDO_ServerParameter &OD->list[19] +#define OD_ENTRY_H1400_RPDO_CommunicationParameter &OD->list[20] +#define OD_ENTRY_H1401_RPDO_CommunicationParameter &OD->list[21] +#define OD_ENTRY_H1402_RPDO_CommunicationParameter &OD->list[22] +#define OD_ENTRY_H1403_RPDO_CommunicationParameter &OD->list[23] +#define OD_ENTRY_H1404_RPDO_CommunicationParameter &OD->list[24] +#define OD_ENTRY_H1405_RPDO_CommunicationParameter &OD->list[25] +#define OD_ENTRY_H1406_RPDO_CommunicationParameter &OD->list[26] +#define OD_ENTRY_H1407_RPDO_CommunicationParameter &OD->list[27] +#define OD_ENTRY_H1408_RPDO_CommunicationParameter &OD->list[28] +#define OD_ENTRY_H1409_RPDO_CommunicationParameter &OD->list[29] +#define OD_ENTRY_H140A_RPDO_CommunicationParameter &OD->list[30] +#define OD_ENTRY_H140B_RPDO_CommunicationParameter &OD->list[31] +#define OD_ENTRY_H140C_RPDO_CommunicationParameter &OD->list[32] +#define OD_ENTRY_H140D_RPDO_CommunicationParameter &OD->list[33] +#define OD_ENTRY_H140E_RPDO_CommunicationParameter &OD->list[34] +#define OD_ENTRY_H140F_RPDO_CommunicationParameter &OD->list[35] +#define OD_ENTRY_H1600_RPDO_MappingParameter &OD->list[36] +#define OD_ENTRY_H1601_RPDO_MappingParameter &OD->list[37] +#define OD_ENTRY_H1602_RPDO_MappingParameter &OD->list[38] +#define OD_ENTRY_H1603_RPDO_MappingParameter &OD->list[39] +#define OD_ENTRY_H1604_RPDO_MappingParameter &OD->list[40] +#define OD_ENTRY_H1605_RPDO_MappingParameter &OD->list[41] +#define OD_ENTRY_H1606_RPDO_MappingParameter &OD->list[42] +#define OD_ENTRY_H1607_RPDO_MappingParameter &OD->list[43] +#define OD_ENTRY_H1608_RPDO_MappingParameter &OD->list[44] +#define OD_ENTRY_H1609_RPDO_MappingParameter &OD->list[45] +#define OD_ENTRY_H160A_RPDO_MappingParameter &OD->list[46] +#define OD_ENTRY_H160B_RPDO_MappingParameter &OD->list[47] +#define OD_ENTRY_H160C_RPDO_MappingParameter &OD->list[48] +#define OD_ENTRY_H160D_RPDO_MappingParameter &OD->list[49] +#define OD_ENTRY_H160E_RPDO_MappingParameter &OD->list[50] +#define OD_ENTRY_H160F_RPDO_MappingParameter &OD->list[51] +#define OD_ENTRY_H1800_TPDO_CommunicationParameter &OD->list[52] +#define OD_ENTRY_H1801_TPDO_CommunicationParameter &OD->list[53] +#define OD_ENTRY_H1802_TPDO_CommunicationParameter &OD->list[54] +#define OD_ENTRY_H1803_TPDO_CommunicationParameter &OD->list[55] +#define OD_ENTRY_H1804_TPDO_CommunicationParameter &OD->list[56] +#define OD_ENTRY_H1805_TPDO_CommunicationParameter &OD->list[57] +#define OD_ENTRY_H1806_TPDO_CommunicationParameter &OD->list[58] +#define OD_ENTRY_H1807_TPDO_CommunicationParameter &OD->list[59] +#define OD_ENTRY_H1808_TPDO_CommunicationParameter &OD->list[60] +#define OD_ENTRY_H1809_TPDO_CommunicationParameter &OD->list[61] +#define OD_ENTRY_H180A_TPDO_CommunicationParameter &OD->list[62] +#define OD_ENTRY_H180B_TPDO_CommunicationParameter &OD->list[63] +#define OD_ENTRY_H180C_TPDO_CommunicationParameter &OD->list[64] +#define OD_ENTRY_H180D_TPDO_CommunicationParameter &OD->list[65] +#define OD_ENTRY_H180E_TPDO_CommunicationParameter &OD->list[66] +#define OD_ENTRY_H180F_TPDO_CommunicationParameter &OD->list[67] +#define OD_ENTRY_H1A00_TPDO_MappingParameter &OD->list[68] +#define OD_ENTRY_H1A01_TPDO_MappingParameter &OD->list[69] +#define OD_ENTRY_H1A02_TPDO_MappingParameter &OD->list[70] +#define OD_ENTRY_H1A03_TPDO_MappingParameter &OD->list[71] +#define OD_ENTRY_H1A04_TPDO_MappingParameter &OD->list[72] +#define OD_ENTRY_H1A05_TPDO_MappingParameter &OD->list[73] +#define OD_ENTRY_H1A06_TPDO_MappingParameter &OD->list[74] +#define OD_ENTRY_H1A07_TPDO_MappingParameter &OD->list[75] +#define OD_ENTRY_H1A08_TPDO_MappingParameter &OD->list[76] +#define OD_ENTRY_H1A09_TPDO_MappingParameter &OD->list[77] +#define OD_ENTRY_H1A0A_TPDO_MappingParameter &OD->list[78] +#define OD_ENTRY_H1A0B_TPDO_MappingParameter &OD->list[79] +#define OD_ENTRY_H1A0C_TPDO_MappingParameter &OD->list[80] +#define OD_ENTRY_H1A0D_TPDO_MappingParameter &OD->list[81] +#define OD_ENTRY_H1A0E_TPDO_MappingParameter &OD->list[82] +#define OD_ENTRY_H1A0F_TPDO_MappingParameter &OD->list[83] +#define OD_ENTRY_H1F80_nmtstartup &OD->list[84] #define OD_ENTRY_H2000_BUS_Management &OD->list[85] #define OD_ENTRY_H2010_SCET &OD->list[86] #define OD_ENTRY_H2011_UTC &OD->list[87] @@ -1005,54 +968,6 @@ extern OD_ATTR_OD OD_t *OD; #define OD_ENTRY_H6004_magnetometerPZ2 &OD->list[96] #define OD_ENTRY_H6005_magnetometerMZ1 &OD->list[97] #define OD_ENTRY_H6006_magnetometerMZ2 &OD->list[98] - - -/******************************************************************************* - OD config structure -*******************************************************************************/ -#ifdef CO_MULTIPLE_OD -#define OD_INIT_CONFIG(config) {\ - (config).CNT_NMT = OD_CNT_NMT;\ - (config).ENTRY_H1017 = OD_ENTRY_H1017;\ - (config).CNT_HB_CONS = OD_CNT_HB_CONS;\ - (config).CNT_ARR_1016 = OD_CNT_ARR_1016;\ - (config).ENTRY_H1016 = OD_ENTRY_H1016;\ - (config).CNT_EM = OD_CNT_EM;\ - (config).ENTRY_H1001 = OD_ENTRY_H1001;\ - (config).ENTRY_H1014 = OD_ENTRY_H1014;\ - (config).ENTRY_H1015 = OD_ENTRY_H1015;\ - (config).CNT_ARR_1003 = OD_CNT_ARR_1003;\ - (config).ENTRY_H1003 = OD_ENTRY_H1003;\ - (config).CNT_SDO_SRV = OD_CNT_SDO_SRV;\ - (config).ENTRY_H1200 = OD_ENTRY_H1200;\ - (config).CNT_SDO_CLI = 0;\ - (config).ENTRY_H1280 = OD_ENTRY_H1280;\ - (config).CNT_TIME = 0;\ - (config).ENTRY_H1012 = NULL;\ - (config).CNT_SYNC = OD_CNT_SYNC;\ - (config).ENTRY_H1005 = OD_ENTRY_H1005;\ - (config).ENTRY_H1006 = OD_ENTRY_H1006;\ - (config).ENTRY_H1007 = OD_ENTRY_H1007;\ - (config).ENTRY_H1019 = OD_ENTRY_H1019;\ - (config).CNT_RPDO = OD_CNT_RPDO;\ - (config).ENTRY_H1400 = OD_ENTRY_H1400;\ - (config).ENTRY_H1600 = OD_ENTRY_H1600;\ - (config).CNT_TPDO = OD_CNT_TPDO;\ - (config).ENTRY_H1800 = OD_ENTRY_H1800;\ - (config).ENTRY_H1A00 = OD_ENTRY_H1A00;\ - (config).CNT_LEDS = 0;\ - (config).CNT_GFC = 0;\ - (config).ENTRY_H1300 = NULL;\ - (config).CNT_SRDO = 0;\ - (config).ENTRY_H1301 = NULL;\ - (config).ENTRY_H1381 = NULL;\ - (config).ENTRY_H13FE = NULL;\ - (config).ENTRY_H13FF = NULL;\ - (config).CNT_LSS_SLV = 0;\ - (config).CNT_LSS_MST = 0;\ - (config).CNT_GTWA = 0;\ - (config).CNT_TRACE = 0;\ -} -#endif +#define OD_ENTRY_H6007_magnetorquer &OD->list[99] #endif /* OD_H */ diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds index e09dd54c..d1597b54 100644 --- a/src/f0/app_adcs/source/ObjDict/app.eds +++ b/src/f0/app_adcs/source/ObjDict/app.eds @@ -2,10 +2,9 @@ FileName=app.eds FileVersion=0 FileRevision=1 -LastEDS= EDSVersion=4.0 Description=OreSat IMU Application Object Dictionary -CreationTime=2:51PM +CreationTime=02:51PM CreationDate=08-12-2019 CreatedBy=Miles Simpson ModificationTime=11:21AM @@ -18,6 +17,7 @@ VendorNumber=0 ProductName=OreSat IMU ProductNumber=0 RevisionNumber=0 +OrderCode= BaudRate_10=1 BaudRate_20=1 BaudRate_50=1 @@ -30,20 +30,20 @@ SimpleBootUpMaster=0 SimpleBootUpSlave=0 Granularity=0 DynamicChannelsSupported=0 -CompactPDO=0 GroupMessaging=0 NrOfRXPDO=16 NrOfTXPDO=16 LSS_Supported=0 [DummyUsage] -Dummy0001=0 -Dummy0002=0 -Dummy0003=0 -Dummy0004=0 -Dummy0005=0 -Dummy0006=0 -Dummy0007=0 +Dummy0000=1 +Dummy0001=1 +Dummy0002=1 +Dummy0003=1 +Dummy0004=1 +Dummy0005=1 +Dummy0006=1 +Dummy0007=1 [Comments] Lines=0 @@ -56,16 +56,15 @@ SupportedObjects=3 [1000] ParameterName=Device type -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=ROM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1001] ParameterName=Error register -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 AccessType=ro @@ -74,54 +73,49 @@ PDOMapping=1 [1018] ParameterName=Identity -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=ROM -SubNumber=0x5 +SubNumber=5 [1018sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x04 -PDOMapping=0 [1018sub1] ParameterName=Vendor-ID -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1018sub2] ParameterName=Product code -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1018sub3] ParameterName=Revision number -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1018sub4] ParameterName=Serial number -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [OptionalObjects] SupportedObjects=89 @@ -217,7 +211,7 @@ SupportedObjects=89 [1002] ParameterName=Manufacturer status register -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro @@ -226,458 +220,412 @@ PDOMapping=1 [1003] ParameterName=Pre-defined error field -ObjectType=0x8 +ObjectType=0x08 ;StorageLocation=RAM -SubNumber=0x9 +SubNumber=9 [1003sub0] ParameterName=Number of errors -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1003sub1] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub2] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub3] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub4] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub5] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub6] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub7] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1003sub8] ParameterName=Standard error field -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0x00000000 -PDOMapping=0 [1005] ParameterName=COB-ID SYNC message -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000080 -PDOMapping=0 [1006] ParameterName=Communication cycle period -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0 -PDOMapping=0 [1007] ParameterName=Synchronous window length -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0 -PDOMapping=0 [1008] ParameterName=Manufacturer device name -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=ROM DataType=0x0009 AccessType=ro DefaultValue=OreSat Node -PDOMapping=0 [1009] ParameterName=Manufacturer hardware version -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=ROM DataType=0x0009 AccessType=ro DefaultValue=0.0 -PDOMapping=0 [100A] ParameterName=Manufacturer software version -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=ROM DataType=0x0009 AccessType=ro DefaultValue=0.0.0 -PDOMapping=0 [1010] ParameterName=Store parameters -ObjectType=0x8 +ObjectType=0x08 ;StorageLocation=RAM -SubNumber=0x5 +SubNumber=5 [1010sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x04 -PDOMapping=0 [1010sub1] ParameterName=Save all parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1010sub2] ParameterName=Save communication parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1010sub3] ParameterName=Save application parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1010sub4] ParameterName=Save manufacturer defined parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1011] ParameterName=Restore default parameters -ObjectType=0x8 +ObjectType=0x08 ;StorageLocation=RAM -SubNumber=0x5 +SubNumber=5 [1011sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x04 -PDOMapping=0 [1011sub1] ParameterName=Restore all default parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1011sub2] ParameterName=Restore communication default parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1011sub3] ParameterName=Restore application default parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1011sub4] ParameterName=Restore manufacturer defined default parameters -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=rw DefaultValue=0x00000001 -PDOMapping=0 [1014] ParameterName=COB-ID EMCY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80+$NODEID -PDOMapping=0 [1015] ParameterName=Inhibit time EMCY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1016] ParameterName=Consumer heartbeat time -ObjectType=0x8 +ObjectType=0x08 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1016sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x08 -PDOMapping=0 [1016sub1] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub2] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub3] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub4] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub5] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub6] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub7] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1016sub8] ParameterName=Consumer heartbeat time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1017] ParameterName=Producer heartbeat time -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=1000 -PDOMapping=0 [1019] ParameterName=Synchronous counter overflow value -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1029] ParameterName=Error behavior -ObjectType=0x8 +ObjectType=0x08 ;StorageLocation=ROM -SubNumber=0x7 +SubNumber=7 [1029sub0] ParameterName=max sub-index -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 -AccessType=ro -DefaultValue=6 -PDOMapping=0 +AccessType=const +DefaultValue=0x06 [1029sub1] ParameterName=Communication -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1029sub2] ParameterName=Communication other -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1029sub3] ParameterName=Communication passive -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1029sub4] ParameterName=Generic -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1029sub5] ParameterName=Device profile -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1029sub6] ParameterName=Manufacturer specific -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=ROM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1200] ParameterName=SDO server parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1200sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [1200sub1] ParameterName=COB-ID client to server -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000000 @@ -685,8 +633,8 @@ PDOMapping=1 [1200sub2] ParameterName=COB-ID server to client -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000000 @@ -694,4600 +642,4133 @@ PDOMapping=1 [1200sub3] ParameterName=Node-ID of the SDO client -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0x01 -PDOMapping=0 [1400] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1400sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1400sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000200+$NODEID -PDOMapping=0 [1400sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1400sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1401] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1401sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1401sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000300+$NODEID -PDOMapping=0 [1401sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1401sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1402] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1402sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1402sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000400+$NODEID -PDOMapping=0 [1402sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1402sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1403] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1403sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1403sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000500+$NODEID -PDOMapping=0 [1403sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1403sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1404] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1404sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1404sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000200+$NODEID -PDOMapping=0 [1404sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1404sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1405] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1405sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1405sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000300+$NODEID -PDOMapping=0 [1405sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1405sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1406] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1406sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1406sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000400+$NODEID -PDOMapping=0 [1406sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1406sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1407] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1407sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1407sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000500+$NODEID -PDOMapping=0 [1407sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1407sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1408] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1408sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1408sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000200+$NODEID -PDOMapping=0 [1408sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1408sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1409] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [1409sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [1409sub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000300+$NODEID -PDOMapping=0 [1409sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1409sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [140A] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [140Asub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [140Asub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000400+$NODEID -PDOMapping=0 [140Asub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [140Asub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [140B] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [140Bsub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [140Bsub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000500+$NODEID -PDOMapping=0 [140Bsub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [140Bsub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [140C] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [140Csub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [140Csub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000200+$NODEID -PDOMapping=0 [140Csub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [140Csub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [140D] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [140Dsub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [140Dsub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000300+$NODEID -PDOMapping=0 [140Dsub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [140Dsub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [140E] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [140Esub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [140Esub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000400+$NODEID -PDOMapping=0 [140Esub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [140Esub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [140F] ParameterName=RPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x4 +SubNumber=4 [140Fsub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro -DefaultValue=0x05 -PDOMapping=0 +AccessType=const +DefaultValue=0x03 [140Fsub1] ParameterName=COB-ID used by RPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x80000500+$NODEID -PDOMapping=0 [140Fsub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [140Fsub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1600] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1600sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1600sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1600sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1601sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1601sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1601sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1602sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1602sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1602sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1603sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1603sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1603sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1604sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1604sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1604sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1605sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1605sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1605sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1606sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1606sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1606sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1607sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1607sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1607sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1608sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1608sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1608sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1609sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1609sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1609sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160A] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [160Asub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [160Asub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Asub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160B] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [160Bsub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [160Bsub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Bsub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160C] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [160Csub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [160Csub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Csub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160D] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [160Dsub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [160Dsub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Dsub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160E] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [160Esub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [160Esub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Esub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160F] ParameterName=RPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [160Fsub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [160Fsub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [160Fsub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1800] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1800sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1800sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x40000180+$NODEID -PDOMapping=0 [1800sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1800sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1800sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1800sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=10000 -PDOMapping=0 [1800sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1801] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1801sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1801sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x40000280+$NODEID -PDOMapping=0 [1801sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1801sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1801sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1801sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=10000 -PDOMapping=0 [1801sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1802] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1802sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1802sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x40000380+$NODEID -PDOMapping=0 [1802sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1802sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1802sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1802sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=10000 -PDOMapping=0 [1802sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1803] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1803sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1803sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x40000480+$NODEID -PDOMapping=0 [1803sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1803sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1803sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1803sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1803sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1804] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1804sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1804sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x40000180+$NODEID -PDOMapping=0 [1804sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1804sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1804sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1804sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1804sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1805] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1805sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1805sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x40000280+$NODEID -PDOMapping=0 [1805sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1805sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1805sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1805sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1805sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1806] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1806sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1806sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000380+$NODEID -PDOMapping=0 [1806sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1806sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1806sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1806sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1806sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1807] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1807sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1807sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000480+$NODEID -PDOMapping=0 [1807sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1807sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1807sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1807sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1807sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1808] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1808sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1808sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000180+$NODEID -PDOMapping=0 [1808sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1808sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1808sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1808sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1808sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1809] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [1809sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [1809sub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000280+$NODEID -PDOMapping=0 [1809sub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [1809sub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1809sub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [1809sub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [1809sub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [180A] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [180Asub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [180Asub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000380+$NODEID -PDOMapping=0 [180Asub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [180Asub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Asub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [180Asub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Asub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [180B] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [180Bsub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [180Bsub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000480+$NODEID -PDOMapping=0 [180Bsub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [180Bsub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Bsub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [180Bsub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Bsub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [180C] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [180Csub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [180Csub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000180+$NODEID -PDOMapping=0 [180Csub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [180Csub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Csub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [180Csub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Csub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [180D] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [180Dsub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [180Dsub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000280+$NODEID -PDOMapping=0 [180Dsub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [180Dsub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Dsub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [180Dsub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Dsub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [180E] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [180Esub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [180Esub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000380+$NODEID -PDOMapping=0 [180Esub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [180Esub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Esub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [180Esub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Esub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [180F] ParameterName=TPDO communication parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x7 +SubNumber=7 [180Fsub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [180Fsub1] ParameterName=COB-ID used by TPDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0xC0000480+$NODEID -PDOMapping=0 [180Fsub2] ParameterName=Transmission type -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=254 -PDOMapping=0 [180Fsub3] ParameterName=Inhibit time -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Fsub4] ParameterName=compatibility entry -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=ro DefaultValue=0 -PDOMapping=0 [180Fsub5] ParameterName=Event timer -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0006 AccessType=rw DefaultValue=0 -PDOMapping=0 [180Fsub6] ParameterName=SYNC start value -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [1A00] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A00sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0x03 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A00sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60000110 -PDOMapping=0 [1A00sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60000210 -PDOMapping=0 [1A00sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60000310 -PDOMapping=0 [1A00sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A00sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A00sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A00sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A00sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A01] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A01sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0x03 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A01sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60010110 -PDOMapping=0 [1A01sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60010210 -PDOMapping=0 [1A01sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60010310 -PDOMapping=0 [1A01sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A01sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A01sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A01sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A01sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A02sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0x01 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A02sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60020008 -PDOMapping=0 [1A02sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A02sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A03] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A03sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0x04 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A03sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60030110 -PDOMapping=0 [1A03sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60030210 -PDOMapping=0 [1A03sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60030310 -PDOMapping=0 [1A03sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60040110 -PDOMapping=0 [1A03sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A03sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A03sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A03sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A04] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A04sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0x04 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A04sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60040210 -PDOMapping=0 [1A04sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60040310 -PDOMapping=0 [1A04sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60050110 -PDOMapping=0 [1A04sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60050210 -PDOMapping=0 [1A04sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A04sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A04sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A04sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A05] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A05sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0x04 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A05sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60050310 -PDOMapping=0 [1A05sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60060110 -PDOMapping=0 [1A05sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60060210 -PDOMapping=0 [1A05sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x60060310 -PDOMapping=0 [1A05sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A05sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A05sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A05sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A06sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A06sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A06sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A07sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A07sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A07sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A08sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A08sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A08sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A09sub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A09sub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A09sub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0A] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A0Asub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A0Asub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Asub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0B] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A0Bsub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A0Bsub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Bsub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0C] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A0Csub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A0Csub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Csub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0D] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A0Dsub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A0Dsub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Dsub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0E] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A0Esub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A0Esub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Esub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0F] ParameterName=TPDO mapping parameter -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_COMM -SubNumber=0x9 +SubNumber=9 [1A0Fsub0] ParameterName=Number of mapped application objects in PDO -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0005 -AccessType=rw -DefaultValue=0 -PDOMapping=0 +AccessType=const +DefaultValue=0x08 [1A0Fsub1] ParameterName=Application object 1 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub2] ParameterName=Application object 2 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub3] ParameterName=Application object 3 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub4] ParameterName=Application object 4 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub5] ParameterName=Application object 5 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub6] ParameterName=Application object 6 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub7] ParameterName=Application object 7 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1A0Fsub8] ParameterName=Application object 8 -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000000 -PDOMapping=0 [1F80] ParameterName=NMTStartup -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=PERSIST_COMM DataType=0x0007 AccessType=rw DefaultValue=0x00000008 -PDOMapping=0 [6000] ParameterName=Gyroscope -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x7 +SubNumber=7 [6000sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [6000sub1] ParameterName=Pitch rate -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5296,7 +4777,7 @@ PDOMapping=1 [6000sub2] ParameterName=Yaw rate -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5305,7 +4786,7 @@ PDOMapping=1 [6000sub3] ParameterName=Roll rate -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5314,7 +4795,7 @@ PDOMapping=1 [6000sub4] ParameterName=Pitch rate raw -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5323,7 +4804,7 @@ PDOMapping=1 [6000sub5] ParameterName=Yaw rate raw -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5332,7 +4813,7 @@ PDOMapping=1 [6000sub6] ParameterName=Roll rate raw -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5341,22 +4822,21 @@ PDOMapping=1 [6001] ParameterName=Acceleration -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x7 +SubNumber=7 [6001sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x06 -PDOMapping=0 [6001sub1] ParameterName=accX -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5365,7 +4845,7 @@ PDOMapping=1 [6001sub2] ParameterName=accY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5374,7 +4854,7 @@ PDOMapping=1 [6001sub3] ParameterName=accZ -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5383,7 +4863,7 @@ PDOMapping=1 [6001sub4] ParameterName=acc X raw -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5392,7 +4872,7 @@ PDOMapping=1 [6001sub5] ParameterName=accY raw -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5401,7 +4881,7 @@ PDOMapping=1 [6001sub6] ParameterName=accZ raw -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5410,7 +4890,7 @@ PDOMapping=1 [6002] ParameterName=IMU Temperature -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0002 AccessType=ro @@ -5419,22 +4899,21 @@ PDOMapping=1 [6003] ParameterName=Magnetometer PZ1 -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x4 +SubNumber=4 [6003sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [6003sub1] ParameterName=magX -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5443,7 +4922,7 @@ PDOMapping=1 [6003sub2] ParameterName=magY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5452,7 +4931,7 @@ PDOMapping=1 [6003sub3] ParameterName=magZ -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5461,22 +4940,21 @@ PDOMapping=1 [6004] ParameterName=Magnetometer PZ2 -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x4 +SubNumber=4 [6004sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [6004sub1] ParameterName=magX -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5485,7 +4963,7 @@ PDOMapping=1 [6004sub2] ParameterName=magY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5494,7 +4972,7 @@ PDOMapping=1 [6004sub3] ParameterName=magZ -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5503,22 +4981,21 @@ PDOMapping=1 [6005] ParameterName=Magnetometer MZ1 -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x4 +SubNumber=4 [6005sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [6005sub1] ParameterName=magX -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5527,7 +5004,7 @@ PDOMapping=1 [6005sub2] ParameterName=magY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5536,7 +5013,7 @@ PDOMapping=1 [6005sub3] ParameterName=magZ -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5545,22 +5022,21 @@ PDOMapping=1 [6006] ParameterName=Magnetometer MZ2 -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x4 +SubNumber=4 [6006sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [6006sub1] ParameterName=magX -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5569,7 +5045,7 @@ PDOMapping=1 [6006sub2] ParameterName=magY -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro @@ -5578,13 +5054,89 @@ PDOMapping=1 [6006sub3] ParameterName=magZ -ObjectType=0x7 +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + + + + +[6007] +ParameterName=Magnetorquer +ObjectType=0x09 +;StorageLocation=RAM +SubNumber=7 + +[6007sub0] +ParameterName=Highest sub-index supported +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0005 +AccessType=const +DefaultValue=0x03 + +[6007sub1] +ParameterName=magnetorquer X PWM Duty Cycle +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=rw +DefaultValue=0 +PDOMapping=1 + +[6007sub2] +ParameterName=magnetorquer Y PWM duty Cycle +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=rw +DefaultValue=0 +PDOMapping=1 + +[6007sub3] +ParameterName=magnetorquer Z PWM duty Cycle +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=rw +DefaultValue=0 +PDOMapping=1 + +[6007sub4] +ParameterName=magnetorquer X Current u A +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6007sub5] +ParameterName=magnetorquer Y Current u A +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=ro +DefaultValue=0 +PDOMapping=1 + +[6007sub6] +ParameterName=magnetorquer Z Current u A +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 AccessType=ro DefaultValue=0 PDOMapping=1 + + + + + [ManufacturerObjects] SupportedObjects=7 1=0x2000 @@ -5597,58 +5149,53 @@ SupportedObjects=7 [2000] ParameterName=BUS Management -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=PERSIST_MFR -SubNumber=0x5 +SubNumber=5 [2000sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_MFR DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x04 -PDOMapping=0 [2000sub1] ParameterName=Bdefault -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_MFR DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [2000sub2] ParameterName=Ttoggle -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_MFR DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [2000sub3] ParameterName=Ntoggle -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_MFR DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [2000sub4] ParameterName=Ctoggle -ObjectType=0x7 -;StorageLocation=RAM +ObjectType=0x07 +;StorageLocation=PERSIST_MFR DataType=0x0005 AccessType=rw DefaultValue=0 -PDOMapping=0 [2010] ParameterName=SCET -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x001B AccessType=rw @@ -5657,7 +5204,7 @@ PDOMapping=1 [2011] ParameterName=UTC -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x001B AccessType=rw @@ -5666,106 +5213,97 @@ PDOMapping=1 [2020] ParameterName=MCU Unique Device ID -ObjectType=0x8 +ObjectType=0x08 ;StorageLocation=RAM -SubNumber=0x4 +SubNumber=4 [2020sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [2020sub1] ParameterName=UID -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0 -PDOMapping=0 [2020sub2] ParameterName=UID -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0 -PDOMapping=0 [2020sub3] ParameterName=UID -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0007 AccessType=ro DefaultValue=0 -PDOMapping=0 [2021] ParameterName=MCU Calibration -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x4 +SubNumber=4 [2021sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x03 -PDOMapping=0 [2021sub1] ParameterName=TS_CAL1 -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro DefaultValue=0 -PDOMapping=0 [2021sub2] ParameterName=TS_CAL2 -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro DefaultValue=0 -PDOMapping=0 [2021sub3] ParameterName=VREFINT_CAL -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro DefaultValue=0 -PDOMapping=0 [2022] ParameterName=MCU Sensors -ObjectType=0x9 +ObjectType=0x09 ;StorageLocation=RAM -SubNumber=0x9 +SubNumber=9 [2022sub0] ParameterName=Highest sub-index supported -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 -AccessType=ro +AccessType=const DefaultValue=0x08 -PDOMapping=0 [2022sub1] ParameterName=Temperature -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0002 AccessType=ro @@ -5774,7 +5312,7 @@ PDOMapping=1 [2022sub2] ParameterName=VREFINT -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 AccessType=ro @@ -5783,7 +5321,7 @@ PDOMapping=1 [2022sub3] ParameterName=VBAT -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 AccessType=ro @@ -5792,7 +5330,7 @@ PDOMapping=1 [2022sub4] ParameterName=VBUSP Current -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0005 AccessType=ro @@ -5801,7 +5339,7 @@ PDOMapping=1 [2022sub5] ParameterName=Temperature (Raw) -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5810,7 +5348,7 @@ PDOMapping=1 [2022sub6] ParameterName=VREFINT (Raw) -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5819,7 +5357,7 @@ PDOMapping=1 [2022sub7] ParameterName=VBAT (Raw) -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5828,7 +5366,7 @@ PDOMapping=1 [2022sub8] ParameterName=VBUSP Current (Raw) -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x0006 AccessType=ro @@ -5837,10 +5375,9 @@ PDOMapping=1 [2100] ParameterName=Error Status Bits -ObjectType=0x7 +ObjectType=0x07 ;StorageLocation=RAM DataType=0x000A AccessType=ro DefaultValue=00000000000000000000 -PDOMapping=0 From 6008a075721d0c947387c061ae8e70935d70876e Mon Sep 17 00:00:00 2001 From: DC Date: Fri, 10 Feb 2023 20:47:46 -0800 Subject: [PATCH 04/20] Updates to OD based on latest version of eds-utils --- src/f0/app_adcs/source/ObjDict/OD.c | 786 ++++++++++++++-------------- src/f0/app_adcs/source/ObjDict/OD.h | 1 - 2 files changed, 393 insertions(+), 394 deletions(-) diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c index 01fa77d6..94ca2422 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.c +++ b/src/f0/app_adcs/source/ObjDict/OD.c @@ -834,7 +834,7 @@ typedef struct { static CO_PROGMEM ODObjs_t ODObjs = { .o_1000_deviceType = { .dataOrig = &OD_ROM.x1000_deviceType, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 4 }, .o_1001_errorRegister = { @@ -844,30 +844,30 @@ static CO_PROGMEM ODObjs_t ODObjs = { }, .o_1002_manufacturerStatusRegister = { .dataOrig = &OD_RAM.x1002_manufacturerStatusRegister, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 4 }, .o_1003_preDefinedErrorField = { .dataOrig0 = &OD_RAM.x1003_preDefinedErrorField_sub0, .dataOrig = &OD_RAM.x1003_preDefinedErrorField[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataElementLength = 4, .dataElementSizeof = sizeof(uint32_t) }, .o_1005_COB_ID_SYNC_Message = { .dataOrig = &OD_PERSIST_COMM.x1005_COB_ID_SYNC_Message, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, .o_1006_communicationCyclePeriod = { .dataOrig = &OD_PERSIST_COMM.x1006_communicationCyclePeriod, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, .o_1007_synchronousWindowLength = { .dataOrig = &OD_PERSIST_COMM.x1007_synchronousWindowLength, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, .o_1008_manufacturerDeviceName = { @@ -889,7 +889,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataOrig0 = &OD_RAM.x1010_storeParameters_sub0, .dataOrig = &OD_RAM.x1010_storeParameters[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataElementLength = 4, .dataElementSizeof = sizeof(uint32_t) }, @@ -897,31 +897,31 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataOrig0 = &OD_RAM.x1011_restoreDefaultParameters_sub0, .dataOrig = &OD_RAM.x1011_restoreDefaultParameters[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataElementLength = 4, .dataElementSizeof = sizeof(uint32_t) }, .o_1014_COB_ID_EMCY = { .dataOrig = &OD_PERSIST_COMM.x1014_COB_ID_EMCY, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, .o_1015_inhibitTimeEMCY = { .dataOrig = &OD_PERSIST_COMM.x1015_inhibitTimeEMCY, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, .o_1016_consumerHeartbeatTime = { .dataOrig0 = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime_sub0, .dataOrig = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataElementLength = 4, .dataElementSizeof = sizeof(uint32_t) }, .o_1017_producerHeartbeatTime = { .dataOrig = &OD_PERSIST_COMM.x1017_producerHeartbeatTime, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, .o_1018_identity = { @@ -934,25 +934,25 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_ROM.x1018_identity.vendorID, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 4 }, { .dataOrig = &OD_ROM.x1018_identity.productCode, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 4 }, { .dataOrig = &OD_ROM.x1018_identity.revisionNumber, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 4 }, { .dataOrig = &OD_ROM.x1018_identity.serialNumber, .subIndex = 4, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 4 }, }, @@ -979,13 +979,13 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ClientToServer, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ServerToClient, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 4 }, { @@ -1005,7 +1005,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1017,7 +1017,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1031,7 +1031,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1043,7 +1043,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1057,7 +1057,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1069,7 +1069,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1083,7 +1083,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1095,7 +1095,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1109,7 +1109,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1121,7 +1121,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1135,7 +1135,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1147,7 +1147,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1161,7 +1161,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1173,7 +1173,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1187,7 +1187,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1199,7 +1199,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1213,7 +1213,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1225,7 +1225,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1239,7 +1239,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1251,7 +1251,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1265,7 +1265,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1277,7 +1277,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1291,7 +1291,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1303,7 +1303,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1317,7 +1317,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1329,7 +1329,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1343,7 +1343,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1355,7 +1355,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1369,7 +1369,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1381,7 +1381,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1395,7 +1395,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -1407,7 +1407,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, }, @@ -1421,49 +1421,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1477,49 +1477,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1533,49 +1533,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1589,49 +1589,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1645,49 +1645,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1701,49 +1701,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1757,49 +1757,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1813,49 +1813,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1869,49 +1869,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1925,49 +1925,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -1981,49 +1981,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -2037,49 +2037,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -2093,49 +2093,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -2149,49 +2149,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -2205,49 +2205,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -2261,49 +2261,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -2317,7 +2317,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2329,7 +2329,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2341,7 +2341,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2361,7 +2361,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2373,7 +2373,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2385,7 +2385,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2405,7 +2405,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2417,7 +2417,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2429,7 +2429,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2449,7 +2449,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2461,7 +2461,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2473,7 +2473,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2493,7 +2493,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2505,7 +2505,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2517,7 +2517,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2537,7 +2537,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2549,7 +2549,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2561,7 +2561,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2581,7 +2581,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2593,7 +2593,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2605,7 +2605,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2625,7 +2625,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2637,7 +2637,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2649,7 +2649,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2669,7 +2669,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2681,7 +2681,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2693,7 +2693,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2713,7 +2713,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2725,7 +2725,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2737,7 +2737,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2757,7 +2757,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2769,7 +2769,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2781,7 +2781,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2801,7 +2801,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2813,7 +2813,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2825,7 +2825,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2845,7 +2845,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2857,7 +2857,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2869,7 +2869,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2889,7 +2889,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2901,7 +2901,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2913,7 +2913,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2933,7 +2933,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2945,7 +2945,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2957,7 +2957,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -2977,7 +2977,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { @@ -2989,7 +2989,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -3001,7 +3001,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 2 }, { @@ -3021,49 +3021,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3077,49 +3077,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3133,49 +3133,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3189,49 +3189,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3245,49 +3245,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3301,49 +3301,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3357,49 +3357,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3413,49 +3413,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3469,49 +3469,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3525,49 +3525,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3581,49 +3581,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3637,49 +3637,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3693,49 +3693,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3749,49 +3749,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3805,49 +3805,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, @@ -3861,55 +3861,55 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, }, .o_1F80_nmtstartup = { .dataOrig = &OD_PERSIST_COMM.x1F80_nmtstartup, - .attribute = ODA_SDO_RW | ODA_MB, + .attribute = ODA_SDO_RW, .dataLength = 4 }, .o_2000_BUS_Management = { @@ -3958,7 +3958,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataOrig0 = &OD_RAM.x2020_MCU_UniqueDeviceID_sub0, .dataOrig = &OD_RAM.x2020_MCU_UniqueDeviceID[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataElementLength = 4, .dataElementSizeof = sizeof(uint32_t) }, @@ -3972,19 +3972,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL1, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL2, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2021_MCU_Calibration.VREFINT_CAL, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, + .attribute = ODA_SDO_R, .dataLength = 2 }, }, @@ -4022,25 +4022,25 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x2022_MCU_Sensors.temperatureRaw, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2022_MCU_Sensors.VREFINT_Raw, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBAT_Raw, .subIndex = 7, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBUSP_CurrentRaw, .subIndex = 8, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4059,37 +4059,37 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6000_gyroscope.pitchRate, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.yawRate, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.rollRate, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.pitchRateRaw, .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.yawRateRaw, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.rollRateRaw, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4103,37 +4103,37 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6001_acceleration.accx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accXRaw, .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accyRaw, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.acczRaw, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4152,19 +4152,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4178,19 +4178,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4204,19 +4204,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4230,19 +4230,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, @@ -4256,37 +4256,37 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrentUA, .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrentUA, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrentUA, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, }, diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h index 61d2bf1d..60b44423 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.h +++ b/src/f0/app_adcs/source/ObjDict/OD.h @@ -10,7 +10,6 @@ #define OD_CNT_HB_CONS 1 #define OD_CNT_HB_PROD 1 #define OD_CNT_SDO_SRV 1 -#define OD_CNT_SDO_CLI 1 #define OD_CNT_RPDO 16 #define OD_CNT_TPDO 16 From 417ba7a8aa9916f87d64241ecf46e3ddc5c2c8f1 Mon Sep 17 00:00:00 2001 From: DC Date: Fri, 10 Feb 2023 21:15:59 -0800 Subject: [PATCH 05/20] Updates to adcs firmware to use new eds files and publish feedback values --- src/f0/app_adcs/source/ObjDict/OD.c | 12 ++++---- src/f0/app_adcs/source/ObjDict/OD.h | 6 ++-- src/f0/app_adcs/source/ObjDict/app.eds | 7 +++-- src/f0/app_adcs/source/adcs.c | 42 +++++++++++++------------- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c index 94ca2422..e6bc1116 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.c +++ b/src/f0/app_adcs/source/ObjDict/OD.c @@ -101,9 +101,9 @@ OD_ATTR_RAM OD_RAM_t OD_RAM = { .magnetorquerXPWM_DutyCycle = 0, .magnetorquerYPWM_DutyCycle = 0, .magnetorquerZPWM_DutyCycle = 0, - .magnetorquerXCurrentUA = 0, - .magnetorquerYCurrentUA = 0, - .magnetorquerZCurrentUA = 0, + .magnetorquerXCurrent = 0, + .magnetorquerYCurrent = 0, + .magnetorquerZCurrent = 0, }, }; @@ -4272,19 +4272,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrentUA, + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrent, .subIndex = 4, .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrentUA, + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrent, .subIndex = 5, .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrentUA, + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrent, .subIndex = 6, .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h index 60b44423..71f458d0 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.h +++ b/src/f0/app_adcs/source/ObjDict/OD.h @@ -115,9 +115,9 @@ typedef struct { int16_t magnetorquerXPWM_DutyCycle; int16_t magnetorquerYPWM_DutyCycle; int16_t magnetorquerZPWM_DutyCycle; - int16_t magnetorquerXCurrentUA; - int16_t magnetorquerYCurrentUA; - int16_t magnetorquerZCurrentUA; + int16_t magnetorquerXCurrent; + int16_t magnetorquerYCurrent; + int16_t magnetorquerZCurrent; } x6007_magnetorquer; } OD_RAM_t; diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds index d1597b54..e8c0cd42 100644 --- a/src/f0/app_adcs/source/ObjDict/app.eds +++ b/src/f0/app_adcs/source/ObjDict/app.eds @@ -208,6 +208,7 @@ SupportedObjects=89 87=0x6004 88=0x6005 89=0x6006 +90=0x6007 [1002] ParameterName=Manufacturer status register @@ -5106,7 +5107,7 @@ DefaultValue=0 PDOMapping=1 [6007sub4] -ParameterName=magnetorquer X Current u A +ParameterName=magnetorquer X Current ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 @@ -5115,7 +5116,7 @@ DefaultValue=0 PDOMapping=1 [6007sub5] -ParameterName=magnetorquer Y Current u A +ParameterName=magnetorquer Y Current ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 @@ -5124,7 +5125,7 @@ DefaultValue=0 PDOMapping=1 [6007sub6] -ParameterName=magnetorquer Z Current u A +ParameterName=magnetorquer Z Current ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 85bcbd34..c69e8d82 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -223,36 +223,36 @@ bool update_imu_data(void) { OD_RAM.x6000_gyroscope.yawRateRaw = gyro_sample.gyro_y_raw; OD_RAM.x6000_gyroscope.rollRateRaw = gyro_sample.gyro_z_raw; - OD_RAM.x6001_acceleration.accX = accl_data.accl_x; - OD_RAM.x6001_acceleration.accY = accl_data.accl_y; - OD_RAM.x6001_acceleration.accZ = accl_data.accl_z; + OD_RAM.x6001_acceleration.accx = accl_data.accl_x; + OD_RAM.x6001_acceleration.accy = accl_data.accl_y; + OD_RAM.x6001_acceleration.accz = accl_data.accl_z; OD_RAM.x6001_acceleration.accXRaw = accl_data.accl_x_raw; - OD_RAM.x6001_acceleration.accYRaw = accl_data.accl_y_raw; - OD_RAM.x6001_acceleration.accZRaw = accl_data.accl_z_raw; + OD_RAM.x6001_acceleration.accyRaw = accl_data.accl_y_raw; + OD_RAM.x6001_acceleration.acczRaw = accl_data.accl_z_raw; OD_RAM.x6002_IMU_Temperature = temp_c; - //TODO Implement magnetometer driver and populate this info - //FIXME publish g_magnetorquer_data.pwm_data[0].current_feedback_measurement_uA - //FIXME publish g_magnetorquer_data.pwm_data[1].current_feedback_measurement_uA - //FIXME publish g_magnetorquer_data.pwm_data[2].current_feedback_measurement_uA + OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = g_magnetorquer_data.pwm_data[0].current_feedback_measurement_uA;//FIXME scale this to output units, uA is too small of a unit + OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = g_magnetorquer_data.pwm_data[1].current_feedback_measurement_uA;//FIXME scale this to output units, uA is too small of a unit + OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = g_magnetorquer_data.pwm_data[2].current_feedback_measurement_uA;//FIXME scale this to output units, uA is too small of a unit - OD_RAM.x6003_magnetometerPZ1.magX = 0; - OD_RAM.x6003_magnetometerPZ1.magY = 0; - OD_RAM.x6003_magnetometerPZ1.magZ = 0; - OD_RAM.x6004_magnetometerPZ2.magX = 0; - OD_RAM.x6004_magnetometerPZ2.magY = 0; - OD_RAM.x6004_magnetometerPZ2.magZ = 0; + OD_RAM.x6003_magnetometerPZ1.magx = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.mx; + OD_RAM.x6003_magnetometerPZ1.magy = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.my; + OD_RAM.x6003_magnetometerPZ1.magz = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.mz; - OD_RAM.x6005_magnetometerMZ1.magX = 0; - OD_RAM.x6005_magnetometerMZ1.magY = 0; - OD_RAM.x6005_magnetometerMZ1.magZ = 0; + OD_RAM.x6004_magnetometerPZ2.magx = g_magnetorquer_data.mag_data[EC_MAG_3_PZ_2].data.mx; + OD_RAM.x6004_magnetometerPZ2.magy = g_magnetorquer_data.mag_data[EC_MAG_3_PZ_2].data.my; + OD_RAM.x6004_magnetometerPZ2.magz = g_magnetorquer_data.mag_data[EC_MAG_3_PZ_2].data.mz; - OD_RAM.x6006_magnetometerMZ2.magX = 0; - OD_RAM.x6006_magnetometerMZ2.magY = 0; - OD_RAM.x6006_magnetometerMZ2.magZ = 0; + OD_RAM.x6005_magnetometerMZ1.magx = g_magnetorquer_data.mag_data[EC_MAG_0_MZ_1].data.mx; + OD_RAM.x6005_magnetometerMZ1.magy = g_magnetorquer_data.mag_data[EC_MAG_0_MZ_1].data.my; + OD_RAM.x6005_magnetometerMZ1.magz = g_magnetorquer_data.mag_data[EC_MAG_0_MZ_1].data.mz; + + OD_RAM.x6006_magnetometerMZ2.magx = g_magnetorquer_data.mag_data[EC_MAG_1_MZ_2].data.mx; + OD_RAM.x6006_magnetometerMZ2.magy = g_magnetorquer_data.mag_data[EC_MAG_1_MZ_2].data.my; + OD_RAM.x6006_magnetometerMZ2.magz = g_magnetorquer_data.mag_data[EC_MAG_1_MZ_2].data.mz; return ret; } From 0f5e2b148f4f395c7364814b6eb1b7734316f4aa Mon Sep 17 00:00:00 2001 From: DC Date: Sat, 11 Feb 2023 22:01:26 -0800 Subject: [PATCH 06/20] Updates to ADCS code to specify output current via CANOpen --- src/f0/app_adcs/source/ObjDict/OD.c | 39 +++-- src/f0/app_adcs/source/ObjDict/OD.h | 3 + src/f0/app_adcs/source/ObjDict/app.eds | 43 +++++- src/f0/app_adcs/source/adcs.c | 194 ++++++++++++++++++++----- 4 files changed, 227 insertions(+), 52 deletions(-) diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c index e6bc1116..4297cbe4 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.c +++ b/src/f0/app_adcs/source/ObjDict/OD.c @@ -97,7 +97,10 @@ OD_ATTR_RAM OD_RAM_t OD_RAM = { .magz = 0, }, .x6007_magnetorquer = { - .highestSubIndexSupported = 0x06, + .highestSubIndexSupported = 0x09, + .setMagnetorquerXCurrent = 0, + .setMagnetorquerYCurrent = 0, + .setMagnetorquerZCurrent = 0, .magnetorquerXPWM_DutyCycle = 0, .magnetorquerYPWM_DutyCycle = 0, .magnetorquerZPWM_DutyCycle = 0, @@ -828,7 +831,7 @@ typedef struct { OD_obj_record_t o_6004_magnetometerPZ2[4]; OD_obj_record_t o_6005_magnetometerMZ1[4]; OD_obj_record_t o_6006_magnetometerMZ2[4]; - OD_obj_record_t o_6007_magnetorquer[7]; + OD_obj_record_t o_6007_magnetorquer[10]; } ODObjs_t; static CO_PROGMEM ODObjs_t ODObjs = { @@ -4254,38 +4257,56 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataLength = 1 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle, + .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent, .subIndex = 1, .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle, + .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle, + .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent, .subIndex = 3, .attribute = ODA_SDO_RW | ODA_TRPDO, .dataLength = 2 }, { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrent, + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle, .subIndex = 4, + .attribute = ODA_SDO_RW | ODA_TRPDO, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle, + .subIndex = 5, + .attribute = ODA_SDO_RW | ODA_TRPDO, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle, + .subIndex = 6, + .attribute = ODA_SDO_RW | ODA_TRPDO, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrent, + .subIndex = 7, .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrent, - .subIndex = 5, + .subIndex = 8, .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrent, - .subIndex = 6, + .subIndex = 9, .attribute = ODA_SDO_R | ODA_TPDO, .dataLength = 2 }, @@ -4392,7 +4413,7 @@ static OD_ATTR_OD OD_entry_t ODList[] = { {0x6004, 0x04, ODT_REC, &ODObjs.o_6004_magnetometerPZ2, NULL}, {0x6005, 0x04, ODT_REC, &ODObjs.o_6005_magnetometerMZ1, NULL}, {0x6006, 0x04, ODT_REC, &ODObjs.o_6006_magnetometerMZ2, NULL}, - {0x6007, 0x07, ODT_REC, &ODObjs.o_6007_magnetorquer, NULL}, + {0x6007, 0x0A, ODT_REC, &ODObjs.o_6007_magnetorquer, NULL}, {0x0000, 0x00, 0, NULL, NULL} }; diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h index 71f458d0..b46bdc36 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.h +++ b/src/f0/app_adcs/source/ObjDict/OD.h @@ -112,6 +112,9 @@ typedef struct { } x6006_magnetometerMZ2; struct { uint8_t highestSubIndexSupported; + int16_t setMagnetorquerXCurrent; + int16_t setMagnetorquerYCurrent; + int16_t setMagnetorquerZCurrent; int16_t magnetorquerXPWM_DutyCycle; int16_t magnetorquerYPWM_DutyCycle; int16_t magnetorquerZPWM_DutyCycle; diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds index e8c0cd42..804a452b 100644 --- a/src/f0/app_adcs/source/ObjDict/app.eds +++ b/src/f0/app_adcs/source/ObjDict/app.eds @@ -5069,7 +5069,7 @@ PDOMapping=1 ParameterName=Magnetorquer ObjectType=0x09 ;StorageLocation=RAM -SubNumber=7 +SubNumber=10 [6007sub0] ParameterName=Highest sub-index supported @@ -5080,7 +5080,7 @@ AccessType=const DefaultValue=0x03 [6007sub1] -ParameterName=magnetorquer X PWM Duty Cycle +ParameterName=set magnetorquer X Current ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 @@ -5089,7 +5089,7 @@ DefaultValue=0 PDOMapping=1 [6007sub2] -ParameterName=magnetorquer Y PWM duty Cycle +ParameterName=set magnetorquer Y Current ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 @@ -5098,7 +5098,7 @@ DefaultValue=0 PDOMapping=1 [6007sub3] -ParameterName=magnetorquer Z PWM duty Cycle +ParameterName=set magnetorquer Z Current ObjectType=0x07 ;StorageLocation=RAM DataType=0x0003 @@ -5107,6 +5107,33 @@ DefaultValue=0 PDOMapping=1 [6007sub4] +ParameterName=magnetorquer X PWM Duty Cycle +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=r +DefaultValue=0 +PDOMapping=1 + +[6007sub5] +ParameterName=magnetorquer Y PWM duty Cycle +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=r +DefaultValue=0 +PDOMapping=1 + +[6007sub6] +ParameterName=magnetorquer Z PWM duty Cycle +ObjectType=0x07 +;StorageLocation=RAM +DataType=0x0003 +AccessType=r +DefaultValue=0 +PDOMapping=1 + +[6007sub7] ParameterName=magnetorquer X Current ObjectType=0x07 ;StorageLocation=RAM @@ -5115,7 +5142,7 @@ AccessType=ro DefaultValue=0 PDOMapping=1 -[6007sub5] +[6007sub8] ParameterName=magnetorquer Y Current ObjectType=0x07 ;StorageLocation=RAM @@ -5124,7 +5151,7 @@ AccessType=ro DefaultValue=0 PDOMapping=1 -[6007sub6] +[6007sub9] ParameterName=magnetorquer Z Current ObjectType=0x07 ;StorageLocation=RAM @@ -5138,6 +5165,10 @@ PDOMapping=1 + + + + [ManufacturerObjects] SupportedObjects=7 1=0x2000 diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index c69e8d82..d2b83d77 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -10,6 +10,10 @@ #include "hal.h" #include "hal_pal.h" +#include "stdint.h" +#include "inttypes.h" + + #define BMI088_GYRO_SADDR 0x68U #define BMI088_ACC_SADDR 0x18U @@ -27,6 +31,11 @@ #define MAX(x, y) (((x) > (y)) ? (x) : (y)) #define MIN(a,b) (((a)<(b))?(a):(b)) +#ifndef ABS +/// Returns the absolute value of a. +#define ABS(a) ((a) < 0 ? -(a) : (a)) +#endif + #define ADC_NUM_CHANNELS 4 #define MY_SAMPLING_NUMBER 100 @@ -112,10 +121,11 @@ typedef enum { typedef struct { - uint32_t current_pwm_percent; //0-10000 - bool current_pwm_phase; - uint32_t target_pwm_percent; - bool target_pwm_phase; + int32_t current_pwm_percent; //0-10000 +// bool current_pwm_phase; + int32_t target_pwm_percent; //Negative values indicate the phase should be inverted +// int32_t target_pwm_current_uA; //Negative values indicate the phase should be inverted +// bool target_pwm_phase; float current_feedback_min_V; float current_feedback_max_V; @@ -161,6 +171,27 @@ static const BMI088Config imucfg = { static BMI088Driver imudev; + +int32_t saturate_int32_t(const int32_t v, const int32_t min, const int32_t max) { + if (v >= max) + return (max); + + else if (v <= min) + return (min); + + return (v); +} + +int16_t saturate_int16_t(const int32_t v) { + if (v >= INT16_MAX) + return (INT16_MAX); + + else if (v <= INT16_MIN) + return (INT16_MIN); + + return (v); +} + /** * TODO more documentation * @return true if update process successful, false otherwise @@ -233,9 +264,15 @@ bool update_imu_data(void) { OD_RAM.x6002_IMU_Temperature = temp_c; - OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = g_magnetorquer_data.pwm_data[0].current_feedback_measurement_uA;//FIXME scale this to output units, uA is too small of a unit - OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = g_magnetorquer_data.pwm_data[1].current_feedback_measurement_uA;//FIXME scale this to output units, uA is too small of a unit - OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = g_magnetorquer_data.pwm_data[2].current_feedback_measurement_uA;//FIXME scale this to output units, uA is too small of a unit + //FIXME confirm these units are usable and reasonable for higher level applications + //Output current units are 100uA per LSB. int16 is +/- 32768. Yields a min/max representation of 3.2 amps + OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = saturate_int16_t(g_magnetorquer_data.pwm_data[0].current_feedback_measurement_uA / 100); + OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = saturate_int16_t(g_magnetorquer_data.pwm_data[1].current_feedback_measurement_uA / 100); + OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = saturate_int16_t(g_magnetorquer_data.pwm_data[2].current_feedback_measurement_uA / 100); + + OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = g_magnetorquer_data.pwm_data[0].current_pwm_percent; + OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = g_magnetorquer_data.pwm_data[1].current_pwm_percent; + OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = g_magnetorquer_data.pwm_data[2].current_pwm_percent; OD_RAM.x6003_magnetometerPZ1.magx = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.mx; @@ -421,20 +458,20 @@ void set_pwm_output(void) { const systime_t now_time = chVTGetSystemTime(); //Updates will come in periodically via CANOpen, this will apply those updates to the PWM outputs. - if( g_magnetorquer_data.pwm_data[i].last_update_time == 0 || chTimeDiffX(g_magnetorquer_data.pwm_data[i].last_update_time, now_time) > 5 ) { - if( g_magnetorquer_data.pwm_data[i].current_pwm_percent != g_magnetorquer_data.pwm_data[i].target_pwm_percent || g_magnetorquer_data.pwm_data[i].current_pwm_phase != g_magnetorquer_data.pwm_data[i].target_pwm_phase ) { + if( g_magnetorquer_data.pwm_data[i].last_update_time == 0 || chTimeDiffX(g_magnetorquer_data.pwm_data[i].last_update_time, now_time) > 10 ) { + if( g_magnetorquer_data.pwm_data[i].current_pwm_percent != g_magnetorquer_data.pwm_data[i].target_pwm_percent ) { chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_magnetorquer_data.pwm_data[i].target_pwm_percent); - pwmEnableChannel(&PWMD1, g_magnetorquer_data.pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, g_magnetorquer_data.pwm_data[i].target_pwm_percent)); + const int32_t pwm_val = ABS(g_magnetorquer_data.pwm_data[i].target_pwm_percent); + pwmEnableChannel(&PWMD1, g_magnetorquer_data.pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, pwm_val)); - if( g_magnetorquer_data.pwm_data[i].target_pwm_phase ) { + if( g_magnetorquer_data.pwm_data[i].target_pwm_percent < 0 ) { palSetPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); } else { palClearPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); } g_magnetorquer_data.pwm_data[i].current_pwm_percent = g_magnetorquer_data.pwm_data[i].target_pwm_percent; - g_magnetorquer_data.pwm_data[i].current_pwm_phase = g_magnetorquer_data.pwm_data[i].target_pwm_phase; g_magnetorquer_data.pwm_data[i].last_update_time = now_time; } } @@ -442,21 +479,52 @@ void set_pwm_output(void) { #endif } +int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t axis) { + int32_t ret = 0; + if( axis <= 1 ) { + //X and Y axes + //1700 => 1000000 uA + //500 => 295000 uA (this is hard/impossible to measure using the ADC + //0 => 0 uA + ret = current_uA / (988000.0 / 1700.0); + const int32_t pwm_duty_max_value = 1700; + ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); + } else { + //Z axis + //1700 => 344000 uA + //500 => 102000 uA (this is hard/impossible to measure using the ADC + ret = current_uA / (344000.0 / 1700.0); + const int32_t pwm_duty_max_value = 4940; + ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); + } + + + return(ret); +} + void magnetorquer_handle_canopen(void) { - //TODO - //Publish output data - //Read/update target PWM outputs - //-- PWM duty cycle - //-- phase + //FIXME what is the maximum duty cycle / current draw that the power bus will support +// const int32_t pwm_duty_max_value = 3000; //Don't allow 100% duty cycle as we will short out the power bus +// g_magnetorquer_data.pwm_data[0].target_pwm_percent = saturate_int32_t(OD_RAM.x6007_magnetorquer.setMagnetorquerXPWM_DutyCycle, -pwm_duty_max_value, pwm_duty_max_value); +// g_magnetorquer_data.pwm_data[1].target_pwm_percent = saturate_int32_t(OD_RAM.x6007_magnetorquer.setMagnetorquerYPWM_DutyCycle, -pwm_duty_max_value, pwm_duty_max_value); +// g_magnetorquer_data.pwm_data[2].target_pwm_percent = saturate_int32_t(OD_RAM.x6007_magnetorquer.setMagnetorquerYPWM_DutyCycle, -pwm_duty_max_value, pwm_duty_max_value); + + + OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 5000;//FIXME remove this, this is just for testing + OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = 5000; + OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = 5000; + g_magnetorquer_data.pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent * 100, 0); + g_magnetorquer_data.pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent * 100, 1); + g_magnetorquer_data.pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); + for(int i = 0; i < 3; i++ ) { // g_magnetorquer_data.pwm_data[i].target_pwm_percent = chVTGetSystemTime() % 10000;//FIXME DELETE THIS // g_magnetorquer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() % 10000) / 20;//FIXME DELETE THIS // g_magnetorquer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() / 25) % 1500;//FIXME DELETE THIS // g_magnetorquer_data.pwm_data[i].target_pwm_percent = 500 + ((chVTGetSystemTime() / 25) % 1000);//FIXME DELETE THIS - g_magnetorquer_data.pwm_data[i].target_pwm_percent = 1700;//FIXME DELETE THIS - g_magnetorquer_data.pwm_data[i].target_pwm_phase = 1; -// g_magnetorquer_data.pwm_data[i].target_pwm_phase = (chVTGetSystemTime() / 10000) % 2;//FIXME DELETE THIS +// g_magnetorquer_data.pwm_data[i].target_pwm_percent = 1700;//FIXME DELETE THIS +// g_magnetorquer_data.pwm_data[i].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(500000, i); } } @@ -469,6 +537,73 @@ int32_t current_feedback_convert_volts_to_microamps(const float volts) { return(microamps); } +void print_debug_output(void) { + static systime_t last_print_time = 0; + systime_t now_time = TIME_I2MS(chVTGetSystemTime()); + if (chTimeDiffX(last_print_time, now_time) > 750) { + last_print_time = now_time; + + chprintf(DEBUG_SD, "================\r\n"); + chprintf(DEBUG_SD, "CANOpen Data:\r\n"); + chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.pitchRate = %d\r\n", OD_RAM.x6000_gyroscope.pitchRate); + chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.yawRate = %d\r\n", OD_RAM.x6000_gyroscope.yawRate); + chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.rollRate = %d\r\n", OD_RAM.x6000_gyroscope.rollRate); + chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.pitchRateRaw = %d\r\n", OD_RAM.x6000_gyroscope.pitchRateRaw); + chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.yawRateRaw = %d\r\n", OD_RAM.x6000_gyroscope.yawRateRaw); + chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.rollRateRaw = %d\r\n", OD_RAM.x6000_gyroscope.rollRateRaw); + + chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accx = %d\r\n", OD_RAM.x6001_acceleration.accx); + chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accy = %d\r\n", OD_RAM.x6001_acceleration.accy); + chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accz = %d\r\n", OD_RAM.x6001_acceleration.accz); + chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accXRaw = %d\r\n", OD_RAM.x6001_acceleration.accXRaw); + chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accyRaw = %d\r\n", OD_RAM.x6001_acceleration.accyRaw); + chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.acczRaw = %d\r\n", OD_RAM.x6001_acceleration.acczRaw); + + chprintf(DEBUG_SD, " OD_RAM.x6002_IMU_Temperature = %d\r\n", OD_RAM.x6002_IMU_Temperature); + + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent); + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent); + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent); + + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle); + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle); + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle); + + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerXCurrent); + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerYCurrent); + chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerZCurrent); + + chprintf(DEBUG_SD, " OD_RAM.x6003_magnetometerPZ1.magx = %d\r\n", OD_RAM.x6003_magnetometerPZ1.magx); + chprintf(DEBUG_SD, " OD_RAM.x6003_magnetometerPZ1.magy = %d\r\n", OD_RAM.x6003_magnetometerPZ1.magy); + chprintf(DEBUG_SD, " OD_RAM.x6003_magnetometerPZ1.magz = %d\r\n", OD_RAM.x6003_magnetometerPZ1.magz); + + chprintf(DEBUG_SD, " OD_RAM.x6004_magnetometerPZ2.magx = %d\r\n", OD_RAM.x6004_magnetometerPZ2.magx); + chprintf(DEBUG_SD, " OD_RAM.x6004_magnetometerPZ2.magy = %d\r\n", OD_RAM.x6004_magnetometerPZ2.magy); + chprintf(DEBUG_SD, " OD_RAM.x6004_magnetometerPZ2.magz = %d\r\n", OD_RAM.x6004_magnetometerPZ2.magz); + + chprintf(DEBUG_SD, " OD_RAM.x6005_magnetometerMZ1.magx = %d\r\n", OD_RAM.x6005_magnetometerMZ1.magx); + chprintf(DEBUG_SD, " OD_RAM.x6005_magnetometerMZ1.magy = %d\r\n", OD_RAM.x6005_magnetometerMZ1.magy); + chprintf(DEBUG_SD, " OD_RAM.x6005_magnetometerMZ1.magz = %d\r\n", OD_RAM.x6005_magnetometerMZ1.magz); + + chprintf(DEBUG_SD, " OD_RAM.x6006_magnetometerMZ2.magx = %d\r\n", OD_RAM.x6006_magnetometerMZ2.magx); + chprintf(DEBUG_SD, " OD_RAM.x6006_magnetometerMZ2.magy = %d\r\n", OD_RAM.x6006_magnetometerMZ2.magy); + chprintf(DEBUG_SD, " OD_RAM.x6006_magnetometerMZ2.magz = %d\r\n", OD_RAM.x6006_magnetometerMZ2.magz); + + + + for(int i = 0; i < 3; i++ ) { + pwm_phase_data_t *data = &g_magnetorquer_data.pwm_data[i]; + chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", + i, + data->current_feedback_measurement_uA, + (uint32_t) (data->current_feedback_measurement_V * 1000), + (uint32_t) (data->current_feedback_min_V * 1000), + (uint32_t) (data->current_feedback_max_V * 1000)); + } + + } +} + void read_adc_current(void) { /** * 12 bit ADC readings from 0-4096 @@ -545,24 +680,10 @@ void read_adc_current(void) { } } - //Compute current sense data - static systime_t last_print_time = 0; - systime_t now_time = TIME_I2MS(chVTGetSystemTime()); - if (chTimeDiffX(last_print_time, now_time) > 500) { - last_print_time = now_time; - chprintf(DEBUG_SD, "================\r\n"); - for(int i = 0; i < 3; i++ ) { - pwm_phase_data_t *data = &g_magnetorquer_data.pwm_data[i]; - chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", - i, - data->current_feedback_measurement_uA, - (uint32_t) (data->current_feedback_measurement_V * 1000), - (uint32_t) (data->current_feedback_min_V * 1000), - (uint32_t) (data->current_feedback_max_V * 1000)); - } + //Compute current sense data + print_debug_output(); - } } void process_magnetorquer(void) { @@ -588,7 +709,6 @@ void init_magnetorquer(void) { for(int i = 0; i < 3; i++ ) { palSetPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); -// palClearPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); } From 5ffe7ba6261c2444e9c87cc32ef53235f9eedf58 Mon Sep 17 00:00:00 2001 From: DC Date: Thu, 16 Feb 2023 17:03:20 -0800 Subject: [PATCH 07/20] Interum ADCS commit, LTC comms for end card working, magnetometer driver not working --- boards/ORESAT_ADCS_V1_2/board.h | 4 +- common/bmi088.c | 5 + common/include/bmi088.h | 2 +- common/include/ltc4305.h | 4 +- common/include/mmc5883ma.h | 15 +- common/ltc4305.c | 2 - common/mmc5883ma.c | 70 +++++-- src/f0/app_adcs/source/adcs.c | 334 ++++++++++++++++++++------------ 8 files changed, 292 insertions(+), 144 deletions(-) diff --git a/boards/ORESAT_ADCS_V1_2/board.h b/boards/ORESAT_ADCS_V1_2/board.h index c793bd88..8fbbf925 100644 --- a/boards/ORESAT_ADCS_V1_2/board.h +++ b/boards/ORESAT_ADCS_V1_2/board.h @@ -207,7 +207,7 @@ #define LINE_CAN_SILENT PAL_LINE(GPIOA, 9U) #define LINE_CAN_SHDN PAL_LINE(GPIOA, 10U) #define LINE_MAG_FAULT PAL_LINE(GPIOB, 3U) -#define LINE_MAG_EN PAL_LINE(GPIOB, 4U) +#define LINE_MAG_N_EN PAL_LINE(GPIOB, 4U) #define LINE_MAG_READY PAL_LINE(GPIOB, 5U) #define LINE_IMU_INT1 PAL_LINE(GPIOB, 12U) #define LINE_IMU_INT2 PAL_LINE(GPIOB, 13U) @@ -376,7 +376,7 @@ * PB1 - PIN1 (analog). * PB2 - PIN2 (analog). * PB3 - MAG_FAULT (input). - * PB4 - MAG_EN (output). + * PB4 - MAG_N_EN (output). * PB5 - MAG_READY (input). * PB6 - I2C1_SCL (alternate 1). * PB7 - I2C1_SDA (alternate 1). diff --git a/common/bmi088.c b/common/bmi088.c index 8945b81a..24298111 100644 --- a/common/bmi088.c +++ b/common/bmi088.c @@ -163,6 +163,11 @@ bool bmi088Start(BMI088Driver *devp, const BMI088Config *config) { #endif + if( bmi088SoftReset(devp) != MSG_OK ) { + devp->error_flags |= (1<<0); + ret = false; + } + chThdSleepMilliseconds(5); if( bmi088AccelerometerPowerOnOrOff(devp, BMI088_ON) != MSG_OK ) { diff --git a/common/include/bmi088.h b/common/include/bmi088.h index 071f6f5b..fc03fa67 100644 --- a/common/include/bmi088.h +++ b/common/include/bmi088.h @@ -444,7 +444,7 @@ #define BMI088_ACC_CHIP_ID_Pos (0U) #define BMI088_ACC_CHIP_ID_Msk (0xFFU << BMI088_ACC_CHIP_ID_Pos) #define BMI088_ACC_CHIP_ID BMI088_ACC_CHIP_ID_Msk -#define BMI088_ACC_CHIP_ID_EXPECTED (0x1EU) +#define BMI088_ACC_CHIP_ID_EXPECTED (0x1E) /** @} */ /** diff --git a/common/include/ltc4305.h b/common/include/ltc4305.h index 1369d86d..25dd5554 100644 --- a/common/include/ltc4305.h +++ b/common/include/ltc4305.h @@ -1,8 +1,8 @@ #ifndef COMMON_INCLUDE_LTC4305_H_ #define COMMON_INCLUDE_LTC4305_H_ -#define LTC_4035_MINUSZ_CARD_I2C_ADDRESS 0xA8 -#define LTC_4035_PLUSZ_CARD_I2C_ADDRESS 0x88 +#define LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE (0xA8 >> 1) +#define LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE (0x88 >> 1) bool ltc4305_set_connections(I2CDriver *i2cp, const uint8_t i2c_addr, const bool enable_i2c_bus_1, const bool enable_i2c_bus_2); diff --git a/common/include/mmc5883ma.h b/common/include/mmc5883ma.h index c262fa21..abd9b58a 100644 --- a/common/include/mmc5883ma.h +++ b/common/include/mmc5883ma.h @@ -18,27 +18,28 @@ * @{ */ -#define MMC5883MA_I2C_ADDRESS 0x30 +#define MMC5883MA_I2C_ADDRESS_READ ((0x30 >> 0) | (1<<7)) +#define MMC5883MA_I2C_ADDRESS_WRITE (0x30 >> 0) /** * @brief MMC5883MA Driver version string. */ -#define MMC5883MA_VERSION "1.0.0" +//#define MMC5883MA_VERSION "1.0.0" /** * @brief MMC5883MA Driver version major number. */ -#define MMC5883MA_MAJOR 1 +//#define MMC5883MA_MAJOR 1 /** * @brief MMC5883MA Driver version minor number. */ -#define MMC5883MA_MINOR 0 +//#define MMC5883MA_MINOR 0 /** * @brief MMC5883MA Driver version patch number. */ -#define MMC5883MA_PATCH 0 +//#define MMC5883MA_PATCH 0 /** @} */ /** @@ -354,7 +355,7 @@ typedef struct { /** * @brief MMC5883MA Slave Address */ - i2caddr_t saddr; + //i2caddr_t saddr; #endif /* MMC5883MA_USE_I2C */ } MMC5883MAConfig; @@ -420,6 +421,8 @@ void mmc5883maObjectInit(MMC5883MADriver *devp); bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config); void mmc5883maStop(MMC5883MADriver *devp); bool mmc5883maReadData(MMC5883MADriver *devp, mmc5883ma_data_t *dest); +bool mmc5883maI2CReadRegister3(I2CDriver *i2cp, const uint8_t i2c_address, const uint8_t reg_number, uint8_t *dest_value); +bool mmc5883maI2CReadRegister4(I2CDriver *i2cp, const uint8_t i2c_address, const uint8_t reg_number, uint16_t *dest_value); #ifdef __cplusplus } #endif diff --git a/common/ltc4305.c b/common/ltc4305.c index e9edc2e8..43efd104 100644 --- a/common/ltc4305.c +++ b/common/ltc4305.c @@ -3,8 +3,6 @@ bool ltc4305_set_connections(I2CDriver *i2cp, const uint8_t i2c_addr, const bool enable_i2c_bus_1, const bool enable_i2c_bus_2) { - - uint8_t tx[2]; tx[0] = 0x03; diff --git a/common/mmc5883ma.c b/common/mmc5883ma.c index 060d6dc8..83bb2326 100644 --- a/common/mmc5883ma.c +++ b/common/mmc5883ma.c @@ -45,7 +45,7 @@ bool mmc5883maI2CWriteRegister2(I2CDriver *i2cp, const uint8_t reg_number, const tx[0] = reg_number; tx[1] = value; - if( i2cMasterTransmitTimeout(i2cp, MMC5883MA_I2C_ADDRESS, tx, 2, NULL, 0, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { + if( i2cMasterTransmitTimeout(i2cp, MMC5883MA_I2C_ADDRESS_WRITE, tx, 2, NULL, 0, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { return(true); } return(false); @@ -59,7 +59,7 @@ bool mmc5883maI2CReadRegister2(I2CDriver *i2cp, const uint8_t reg_number, uint8_ rx[0] = 0; rx[1] = 0; - if( i2cMasterTransmitTimeout(i2cp, (i2caddr_t) MMC5883MA_I2C_ADDRESS, tx, 1, rx, 1, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { + if( i2cMasterTransmitTimeout(i2cp, (i2caddr_t) MMC5883MA_I2C_ADDRESS_READ, tx, 1, rx, 1, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { *dest_value = rx[0]; return(true); } @@ -67,6 +67,36 @@ bool mmc5883maI2CReadRegister2(I2CDriver *i2cp, const uint8_t reg_number, uint8_ } +bool mmc5883maI2CReadRegister3(I2CDriver *i2cp, const uint8_t i2c_address, const uint8_t reg_number, uint8_t *dest_value) { + uint8_t tx[2]; + tx[0] = reg_number; + tx[1] = 0; + uint8_t rx[2]; + rx[0] = 0; + rx[1] = 0; + + if( i2cMasterTransmitTimeout(i2cp, (i2caddr_t) i2c_address, tx, 1, rx, 1, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { + *dest_value = rx[0]; + return(true); + } + return(false); +} + +bool mmc5883maI2CReadRegister4(I2CDriver *i2cp, const uint8_t i2c_address, const uint8_t reg_number, uint16_t *dest_value) { + uint8_t tx[2]; + tx[0] = reg_number; + tx[1] = 0; + uint8_t rx[2]; + rx[0] = 0; + rx[1] = 0; + + if( i2cMasterTransmitTimeout(i2cp, (i2caddr_t) i2c_address, tx, 1, rx, 2, MMC5883MA_DEFAULT_I2C_TIMEOUT) == MSG_OK ) { + *dest_value = rx[0] | rx[1]; + return(true); + } + return(false); +} + #endif /* MMC5883MA_USE_I2C */ /*==========================================================================*/ @@ -84,8 +114,8 @@ static const struct MMC5883MAVMT vmt_device = { bool mmc5883maReadData(MMC5883MADriver *devp, mmc5883ma_data_t *dest) { osalDbgCheck((devp != NULL)); - osalDbgAssert((devp->state != MMC5883MA_READY), - "mmc5883maStart(), invalid state"); +// osalDbgAssert((devp->state != MMC5883MA_READY), +// "mmc5883maStart(), invalid state"); bool ret = false; @@ -95,17 +125,21 @@ bool mmc5883maReadData(MMC5883MADriver *devp, mmc5883ma_data_t *dest) { i2cAcquireBus(config->i2cp); #endif /* MMC5883MA_SHARED_I2C */ + uint8_t rx[10]; memset(rx, 0, sizeof(rx)); uint8_t reg = MMC5883MA_AD_XOUT_LOW; - msg_t r = i2cMasterTransmitTimeout(devp->config->i2cp, MMC5883MA_I2C_ADDRESS, ®, 1, rx, 6, MMC5883MA_DEFAULT_I2C_TIMEOUT); - if( r == MSG_OK ) { - dest->mx = (rx[0] << 8) | rx[1]; - dest->my = (rx[2] << 8) | rx[3]; - dest->mz = (rx[4] << 8) | rx[5]; + i2cStart(devp->config->i2cp, devp->config->i2ccfg); + msg_t r = i2cMasterTransmitTimeout(devp->config->i2cp, MMC5883MA_I2C_ADDRESS_READ, ®, 1, rx, 6, MMC5883MA_DEFAULT_I2C_TIMEOUT); + i2cStop(devp->config->i2cp); + dest->mx = (rx[0] << 8) | rx[1]; + dest->my = (rx[2] << 8) | rx[3]; + dest->mz = (rx[4] << 8) | rx[5]; + + if( r == MSG_OK ) { ret = true; } @@ -144,6 +178,8 @@ bool mmc5883maSoftReset(MMC5883MADriver *devp) { * * @api */ +uint8_t mmc_product_id_readback; + bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { // i2cbuf_t buf; @@ -162,20 +198,32 @@ bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { i2cStart(config->i2cp, config->i2ccfg); + devp->state = MMC5883MA_READY; + mmc5883maSoftReset(devp); + chThdSleepMilliseconds(5); + + if( ! mmc5883maI2CReadRegister2(devp->config->i2cp, MMC5883MA_AD_PRDCT_ID_1, &mmc_product_id_readback) ) { + devp->state = MMC5883MA_STOP; + } else { + if( mmc_product_id_readback != 0x30 ) { + //devp->state = MMC5883MA_STOP; + } + } //Control 1 reg can be left default of all zeros, 100hz uint8_t ctrl2 = (1<<2) | (1<<3); //50hz continuous mode if( ! mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL2, ctrl2)) { - //FIXME handle this + devp->state = MMC5883MA_STOP; } + i2cStop(devp->config->i2cp); #if MMC5883MA_SHARED_I2C i2cReleaseBus(config->i2cp); #endif /* MMC5883MA_SHARED_I2C */ #endif /* MMC5883MA_USE_I2C */ - devp->state = MMC5883MA_READY; + return(devp->state == MMC5883MA_READY); } diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index d2b83d77..c133565f 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -14,7 +14,6 @@ #include "inttypes.h" - #define BMI088_GYRO_SADDR 0x68U #define BMI088_ACC_SADDR 0x18U @@ -63,7 +62,6 @@ static const ADCConversionGroup adcgrpcfg = { }; - static const DACConfig dac_config = { .init = 2047u, .datamode = DAC_DHRM_12BIT_RIGHT, @@ -76,6 +74,8 @@ static const DACConfig dac_config = { #define PWM_FREQ 2500// periods per sec #define PWM_PERIOD PWM_TIMER_FREQ/PWM_FREQ + +//FIXME these PWM channel mappings may be wrong? or the mod-wires on the dev board may be wrong. Either way, Z-axis in the firmware is controling X-axis magnetorquer in the hardware on the dev ADCS board //PB13 #define MT_X_PWM_PWM_CHANNEL (1 - 1) //PB14 @@ -120,12 +120,27 @@ typedef enum { } end_card_magnetometoer_t; + +static const I2CConfig mmc5883ma_i2ccfg = { + STM32_TIMINGR_PRESC(0xBU) | + STM32_TIMINGR_SCLDEL(0x4U) | STM32_TIMINGR_SDADEL(0x2U) | + STM32_TIMINGR_SCLH(0xFU) | STM32_TIMINGR_SCLL(0x13U), + 0, + 0 +}; + +static const MMC5883MAConfig mmc4883ma_generic_config = { + .i2cp = &I2CD1, + .i2ccfg = &mmc5883ma_i2ccfg, +// .saddr = MMC5883MA_I2C_ADDRESS +}; + + + typedef struct { int32_t current_pwm_percent; //0-10000 -// bool current_pwm_phase; int32_t target_pwm_percent; //Negative values indicate the phase should be inverted // int32_t target_pwm_current_uA; //Negative values indicate the phase should be inverted -// bool target_pwm_phase; float current_feedback_min_V; float current_feedback_max_V; @@ -136,22 +151,22 @@ typedef struct { uint8_t pwm_channel_number; systime_t last_update_time; -} pwm_phase_data_t; +} mt_pwm_phase_data_t; typedef struct { MMC5883MADriver driver; mmc5883ma_data_t data; - bool is_initialized; -} mag_data_struct_t; + volatile bool is_initialized; +} magnetometer_data_struct_t; typedef struct { - pwm_phase_data_t pwm_data[3]; + mt_pwm_phase_data_t mt_pwm_data[3]; - mag_data_struct_t mag_data[4]; -} magnetorquer_data_t; + magnetometer_data_struct_t magetometer_data[4]; +} adcs_data_t; -magnetorquer_data_t g_magnetorquer_data; +adcs_data_t g_adcs_data; static const I2CConfig i2ccfg = { @@ -265,36 +280,37 @@ bool update_imu_data(void) { //FIXME confirm these units are usable and reasonable for higher level applications - //Output current units are 100uA per LSB. int16 is +/- 32768. Yields a min/max representation of 3.2 amps - OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = saturate_int16_t(g_magnetorquer_data.pwm_data[0].current_feedback_measurement_uA / 100); - OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = saturate_int16_t(g_magnetorquer_data.pwm_data[1].current_feedback_measurement_uA / 100); - OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = saturate_int16_t(g_magnetorquer_data.pwm_data[2].current_feedback_measurement_uA / 100); + //Output current units are 100uA per LSB. int16 is +/- 32768. Yields a min/max representation of +/- 3.2 amps + OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = saturate_int16_t(g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA / 100); + OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = saturate_int16_t(g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA / 100); + OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = saturate_int16_t(g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA / 100); + + OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = g_adcs_data.mt_pwm_data[0].current_pwm_percent; + OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = g_adcs_data.mt_pwm_data[1].current_pwm_percent; + OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = g_adcs_data.mt_pwm_data[2].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = g_magnetorquer_data.pwm_data[0].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = g_magnetorquer_data.pwm_data[1].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = g_magnetorquer_data.pwm_data[2].current_pwm_percent; + OD_RAM.x6003_magnetometerPZ1.magx = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mx; + OD_RAM.x6003_magnetometerPZ1.magy = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.my; + OD_RAM.x6003_magnetometerPZ1.magz = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mz; - OD_RAM.x6003_magnetometerPZ1.magx = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.mx; - OD_RAM.x6003_magnetometerPZ1.magy = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.my; - OD_RAM.x6003_magnetometerPZ1.magz = g_magnetorquer_data.mag_data[EC_MAG_2_PZ_1].data.mz; + OD_RAM.x6004_magnetometerPZ2.magx = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mx; + OD_RAM.x6004_magnetometerPZ2.magy = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.my; + OD_RAM.x6004_magnetometerPZ2.magz = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mz; - OD_RAM.x6004_magnetometerPZ2.magx = g_magnetorquer_data.mag_data[EC_MAG_3_PZ_2].data.mx; - OD_RAM.x6004_magnetometerPZ2.magy = g_magnetorquer_data.mag_data[EC_MAG_3_PZ_2].data.my; - OD_RAM.x6004_magnetometerPZ2.magz = g_magnetorquer_data.mag_data[EC_MAG_3_PZ_2].data.mz; + OD_RAM.x6005_magnetometerMZ1.magx = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mx; + OD_RAM.x6005_magnetometerMZ1.magy = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.my; + OD_RAM.x6005_magnetometerMZ1.magz = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mz; - OD_RAM.x6005_magnetometerMZ1.magx = g_magnetorquer_data.mag_data[EC_MAG_0_MZ_1].data.mx; - OD_RAM.x6005_magnetometerMZ1.magy = g_magnetorquer_data.mag_data[EC_MAG_0_MZ_1].data.my; - OD_RAM.x6005_magnetometerMZ1.magz = g_magnetorquer_data.mag_data[EC_MAG_0_MZ_1].data.mz; + OD_RAM.x6006_magnetometerMZ2.magx = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mx; + OD_RAM.x6006_magnetometerMZ2.magy = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.my; + OD_RAM.x6006_magnetometerMZ2.magz = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mz; - OD_RAM.x6006_magnetometerMZ2.magx = g_magnetorquer_data.mag_data[EC_MAG_1_MZ_2].data.mx; - OD_RAM.x6006_magnetometerMZ2.magy = g_magnetorquer_data.mag_data[EC_MAG_1_MZ_2].data.my; - OD_RAM.x6006_magnetometerMZ2.magz = g_magnetorquer_data.mag_data[EC_MAG_1_MZ_2].data.mz; + //FIXME add some kind of publication of eroror codes/states etc return ret; } - bool connect_endcard_mmc4883ma(const uint8_t ltc4304_i2c_address, const bool conn_1_enable, const bool conn_2_enable) { bool ret = true; @@ -313,62 +329,64 @@ bool connect_endcard_mmc4883ma(const uint8_t ltc4304_i2c_address, const bool con i2cStop(i2cp); if( ! ret ) { - chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections!\r\n"); + //chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections!\r\n"); + } else { + //chprintf(DEBUG_SD, "SUCCESS: set LTC4305 connections!\r\n"); } return(ret); } -static const I2CConfig mmc5883ma_i2ccfg = { - STM32_TIMINGR_PRESC(0xBU) | - STM32_TIMINGR_SCLDEL(0x4U) | STM32_TIMINGR_SDADEL(0x2U) | - STM32_TIMINGR_SCLH(0xFU) | STM32_TIMINGR_SCLL(0x13U), - 0, - 0 -}; - -static const MMC5883MAConfig mmc4883ma_generic_config = { - .i2cp = &I2CD1, - .i2ccfg = &mmc5883ma_i2ccfg, - .saddr = MMC5883MA_I2C_ADDRESS -}; - bool select_magnetometer(const end_card_magnetometoer_t ecm) { chprintf(DEBUG_SD, "Selecting magnetometer %u\r\n", ecm); chThdSleepMilliseconds(10); + bool ret1 = false; bool ret2 = false; + //EC_MAG_2_PZ_1 +// ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); +// ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, true, false); +// chprintf(DEBUG_SD, "select_magnetometer(%d), %d, %d\r\n", ecm, ret1, ret2); +// return(true); + + switch(ecm) { case EC_MAG_0_MZ_1: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, true, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, true, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); break; case EC_MAG_1_MZ_2: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, false, true); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, true); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); break; case EC_MAG_2_PZ_1: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, false, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, true, false); + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, true, false); break; case EC_MAG_3_PZ_2: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS, false, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, true); + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, true); break; case EC_MAG_NONE: - ret1 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS, false, false); + ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); break; } +#if 0 + //FIXME re-enable this code if( ! (ret1 && ret2) ) { - chprintf(DEBUG_SD, "ERROR: Failed to select magnetometers\r\n"); + chprintf(DEBUG_SD, "ERROR: Failed to select magnetometers ret1=%d, ret2=%d\r\n", ret1, ret2); } +#else + chprintf(DEBUG_SD, "select_magnetometer(%d): %s\r\n", ecm, (ret2 ? "Success" : "Fail")); + return(ret2);//FIXME remove this line of code, this is for bench debuging +#endif return(ret1 && ret2); } @@ -380,7 +398,9 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { if( ecm >= EC_MAG_NONE ) { return(false); } - if( ! g_magnetorquer_data.mag_data[ecm].is_initialized) { + + if( ! (g_adcs_data.magetometer_data[ecm].is_initialized) ) { + chprintf(DEBUG_SD, "Magnetometer %d not initialized.\r\n", ecm); return(false); } @@ -388,7 +408,17 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { return(false); } - r = mmc5883maReadData(&g_magnetorquer_data.mag_data[ecm].driver, &g_magnetorquer_data.mag_data[ecm].data); + + + chprintf(DEBUG_SD, "Reading from magnetometer...\r\n");chThdSleepMilliseconds(5); + + r = mmc5883maReadData(&g_adcs_data.magetometer_data[ecm].driver, &g_adcs_data.magetometer_data[ecm].data); + + chprintf(DEBUG_SD, "MAG: mx=%d, my=%d, mz=%d\r\n", g_adcs_data.magetometer_data[ecm].data.mx, + g_adcs_data.magetometer_data[ecm].data.my, + g_adcs_data.magetometer_data[ecm].data.mz); + + select_magnetometer(EC_MAG_NONE); @@ -396,14 +426,20 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { } bool update_endcard_magnetometer_readings(void) { + static systime_t last_mag_update_time = 0; + + systime_t now_time = chVTGetSystemTime(); + if( chTimeDiffX(last_mag_update_time, now_time) < 1000 ) { + return(true); + } + last_mag_update_time = now_time; + + bool ret = true; for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { - if( g_magnetorquer_data.mag_data[ecm].is_initialized) { - select_magnetometer(ecm); - //TODO read the mag readings - - } + chprintf(DEBUG_SD, "Reading EMC %u\r\n", ecm); + select_and_read_magnetometer(ecm); } select_magnetometer(EC_MAG_NONE); @@ -413,28 +449,40 @@ bool update_endcard_magnetometer_readings(void) { bool init_end_cap_magnetometers(void) { + palClearLine(LINE_MAG_N_EN); + chThdSleepMilliseconds(5); + bool ret = true; for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { chprintf(DEBUG_SD, "Initing MMC %u\r\n", ecm); chThdSleepMilliseconds(20); - mmc5883maObjectInit(&g_magnetorquer_data.mag_data[ecm].driver); + mmc5883maObjectInit(&g_adcs_data.magetometer_data[ecm].driver); if( ! select_magnetometer(ecm) ) { ret = false; chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u due to selection error\r\n"); } else { - if( mmc5883maStart(&g_magnetorquer_data.mag_data[ecm].driver, &mmc4883ma_generic_config) ) { - chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u\r\n"); - g_magnetorquer_data.mag_data[ecm].is_initialized = true; + if( mmc5883maStart(&g_adcs_data.magetometer_data[ecm].driver, &mmc4883ma_generic_config) ) { + chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u\r\n", ecm); + g_adcs_data.magetometer_data[ecm].is_initialized = true; } else { - chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u\r\n"); + chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u\r\n", ecm); } + extern uint8_t mmc_product_id_readback; + chprintf(DEBUG_SD, "MMC Product Id readback = 0x%X\r\n", mmc_product_id_readback); } } + for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { + chprintf(DEBUG_SD, "ecm init %d = %d\r\n", ecm, g_adcs_data.magetometer_data[ecm].is_initialized); + } +// for(;;) { +// +// } + select_magnetometer(EC_MAG_NONE); return(ret); @@ -458,21 +506,21 @@ void set_pwm_output(void) { const systime_t now_time = chVTGetSystemTime(); //Updates will come in periodically via CANOpen, this will apply those updates to the PWM outputs. - if( g_magnetorquer_data.pwm_data[i].last_update_time == 0 || chTimeDiffX(g_magnetorquer_data.pwm_data[i].last_update_time, now_time) > 10 ) { - if( g_magnetorquer_data.pwm_data[i].current_pwm_percent != g_magnetorquer_data.pwm_data[i].target_pwm_percent ) { - chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_magnetorquer_data.pwm_data[i].target_pwm_percent); + if( g_adcs_data.mt_pwm_data[i].last_update_time == 0 || chTimeDiffX(g_adcs_data.mt_pwm_data[i].last_update_time, now_time) > 10 ) { + if( g_adcs_data.mt_pwm_data[i].current_pwm_percent != g_adcs_data.mt_pwm_data[i].target_pwm_percent ) { + chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_adcs_data.mt_pwm_data[i].target_pwm_percent); - const int32_t pwm_val = ABS(g_magnetorquer_data.pwm_data[i].target_pwm_percent); - pwmEnableChannel(&PWMD1, g_magnetorquer_data.pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, pwm_val)); + const int32_t pwm_val = ABS(g_adcs_data.mt_pwm_data[i].target_pwm_percent); + pwmEnableChannel(&PWMD1, g_adcs_data.mt_pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, pwm_val)); - if( g_magnetorquer_data.pwm_data[i].target_pwm_percent < 0 ) { - palSetPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); + if( g_adcs_data.mt_pwm_data[i].target_pwm_percent < 0 ) { + palSetPad(GPIOB, g_adcs_data.mt_pwm_data[i].phase_gpio_pin_number); } else { - palClearPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); + palClearPad(GPIOB, g_adcs_data.mt_pwm_data[i].phase_gpio_pin_number); } - g_magnetorquer_data.pwm_data[i].current_pwm_percent = g_magnetorquer_data.pwm_data[i].target_pwm_percent; - g_magnetorquer_data.pwm_data[i].last_update_time = now_time; + g_adcs_data.mt_pwm_data[i].current_pwm_percent = g_adcs_data.mt_pwm_data[i].target_pwm_percent; + g_adcs_data.mt_pwm_data[i].last_update_time = now_time; } } } @@ -485,7 +533,6 @@ int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t //X and Y axes //1700 => 1000000 uA //500 => 295000 uA (this is hard/impossible to measure using the ADC - //0 => 0 uA ret = current_uA / (988000.0 / 1700.0); const int32_t pwm_duty_max_value = 1700; ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); @@ -498,34 +545,13 @@ int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); } - return(ret); } void magnetorquer_handle_canopen(void) { - //FIXME what is the maximum duty cycle / current draw that the power bus will support -// const int32_t pwm_duty_max_value = 3000; //Don't allow 100% duty cycle as we will short out the power bus -// g_magnetorquer_data.pwm_data[0].target_pwm_percent = saturate_int32_t(OD_RAM.x6007_magnetorquer.setMagnetorquerXPWM_DutyCycle, -pwm_duty_max_value, pwm_duty_max_value); -// g_magnetorquer_data.pwm_data[1].target_pwm_percent = saturate_int32_t(OD_RAM.x6007_magnetorquer.setMagnetorquerYPWM_DutyCycle, -pwm_duty_max_value, pwm_duty_max_value); -// g_magnetorquer_data.pwm_data[2].target_pwm_percent = saturate_int32_t(OD_RAM.x6007_magnetorquer.setMagnetorquerYPWM_DutyCycle, -pwm_duty_max_value, pwm_duty_max_value); - - - OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 5000;//FIXME remove this, this is just for testing - OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = 5000; - OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = 5000; - g_magnetorquer_data.pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent * 100, 0); - g_magnetorquer_data.pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent * 100, 1); - g_magnetorquer_data.pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); - - - for(int i = 0; i < 3; i++ ) { -// g_magnetorquer_data.pwm_data[i].target_pwm_percent = chVTGetSystemTime() % 10000;//FIXME DELETE THIS -// g_magnetorquer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() % 10000) / 20;//FIXME DELETE THIS -// g_magnetorquer_data.pwm_data[i].target_pwm_percent = (chVTGetSystemTime() / 25) % 1500;//FIXME DELETE THIS -// g_magnetorquer_data.pwm_data[i].target_pwm_percent = 500 + ((chVTGetSystemTime() / 25) % 1000);//FIXME DELETE THIS -// g_magnetorquer_data.pwm_data[i].target_pwm_percent = 1700;//FIXME DELETE THIS -// g_magnetorquer_data.pwm_data[i].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(500000, i); - } + g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent * 100, 0); + g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent * 100, 1); + g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); } @@ -592,7 +618,7 @@ void print_debug_output(void) { for(int i = 0; i < 3; i++ ) { - pwm_phase_data_t *data = &g_magnetorquer_data.pwm_data[i]; + mt_pwm_phase_data_t *data = &g_adcs_data.mt_pwm_data[i]; chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", i, data->current_feedback_measurement_uA, @@ -673,10 +699,10 @@ void read_adc_current(void) { // } if( adc_chan_idx >= 1 && adc_chan_idx <= 3 ) { - g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; - g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); - g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; - g_magnetorquer_data.pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; + g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; + g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); + g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; + g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; } } @@ -694,21 +720,24 @@ void process_magnetorquer(void) { void init_magnetorquer(void) { - init_end_cap_magnetometers(); - memset(&g_magnetorquer_data, 0, sizeof(g_magnetorquer_data)); +// for(;;) { +// chThdSleepMilliseconds(1200); +// } + + memset(&g_adcs_data.mt_pwm_data, 0, sizeof(g_adcs_data.mt_pwm_data)); - g_magnetorquer_data.pwm_data[0].phase_gpio_pin_number = GPIOB_MT_X_PHASE; - g_magnetorquer_data.pwm_data[0].pwm_channel_number = MT_X_PWM_PWM_CHANNEL; + g_adcs_data.mt_pwm_data[0].phase_gpio_pin_number = GPIOB_MT_X_PHASE; + g_adcs_data.mt_pwm_data[0].pwm_channel_number = MT_X_PWM_PWM_CHANNEL; - g_magnetorquer_data.pwm_data[1].phase_gpio_pin_number = GPIOB_MT_Y_PHASE; - g_magnetorquer_data.pwm_data[1].pwm_channel_number = MT_Y_PWM_PWM_CHANNEL; + g_adcs_data.mt_pwm_data[1].phase_gpio_pin_number = GPIOB_MT_Y_PHASE; + g_adcs_data.mt_pwm_data[1].pwm_channel_number = MT_Y_PWM_PWM_CHANNEL; - g_magnetorquer_data.pwm_data[2].phase_gpio_pin_number = GPIOB_MT_Z_PHASE; - g_magnetorquer_data.pwm_data[2].pwm_channel_number = MT_Z_PWM_PWM_CHANNEL; + g_adcs_data.mt_pwm_data[2].phase_gpio_pin_number = GPIOB_MT_Z_PHASE; + g_adcs_data.mt_pwm_data[2].pwm_channel_number = MT_Z_PWM_PWM_CHANNEL; for(int i = 0; i < 3; i++ ) { - palSetPad(GPIOB, g_magnetorquer_data.pwm_data[i].phase_gpio_pin_number); + palSetPad(GPIOB, g_adcs_data.mt_pwm_data[i].phase_gpio_pin_number); } @@ -752,6 +781,49 @@ THD_FUNCTION(adcs, arg) chprintf(DEBUG_SD, "Starting ADCS thread...\r\n"); chThdSleepMilliseconds(50); + + +#if 0 +// select_magnetometer(EC_MAG_0_MZ_1); + + end_card_magnetometoer_t ecm = EC_MAG_2_PZ_1; + + + chprintf(DEBUG_SD, "Setting ECM %u\r\n", ecm); + select_magnetometer(ecm); +// for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { +// select_magnetometer(ecm); +// } + for(;;) { + i2cStart(&I2CD1, &mmc5883ma_i2ccfg); + + uint8_t dest = 0; + mmc5883maI2CReadRegister3(&I2CD1, ((0x30 >> 0) | (1<<7)), MMC5883MA_AD_PRDCT_ID_1, &dest); + + uint16_t mag = 0; + mmc5883maI2CReadRegister4(&I2CD1, ((0x30 >> 0) | (1<<7)), MMC5883MA_AD_XOUT_LOW, &mag); + chprintf(DEBUG_SD, "MMC Chip ID: 0x%X, X=0x%X\r\n", dest, mag); + +// + + i2cStop(&I2CD1); + chThdSleepMilliseconds(500); + } + + for(;;) { + chThdSleepMilliseconds(100); + } +#endif + + + + + init_end_cap_magnetometers(); + for(;;) { + update_endcard_magnetometer_readings(); + chThdSleepMilliseconds(1200); + } + init_magnetorquer(); /* Activates the ADC1 driver. */ @@ -760,12 +832,19 @@ THD_FUNCTION(adcs, arg) chprintf(DEBUG_SD, "done with adcStartConversion()...\r\n"); + OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 3000;//FIXME remove this, this is just for testing + OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = 4000; + OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = 5000; + + bmi088ObjectInit(&imudev); chprintf(DEBUG_SD, "Starting BMI088...\r\n"); chThdSleepMilliseconds(50); bmi088Start(&imudev, &imucfg); + + chprintf(DEBUG_SD, "BMI088 state = %u, error_flags=0x%X\r\n", imudev.state, imudev.error_flags); if( imudev.state != BMI088_READY ) { chprintf(DEBUG_SD, "Failed to start IMU driver...\r\n"); @@ -774,25 +853,39 @@ THD_FUNCTION(adcs, arg) if( (r = bmi088ReadAccelerometerChipId(&imudev, &bmi088_chip_id)) == MSG_OK ) { chprintf(DEBUG_SD, "BMI088 accelerometer chip ID is 0x%X, expected to be 0x%X\r\n", bmi088_chip_id, BMI088_ACC_CHIP_ID_EXPECTED); } else { - chprintf(DEBUG_SD, "Failed to read accl chip ID from BMI088, r = %d\r\n", r); + chprintf(DEBUG_SD, "Failed to read accl chip ID from BMI088 ACCEL, r = %d\r\n", r); } if( bmi088_chip_id != BMI088_ACC_CHIP_ID_EXPECTED ) { + chprintf(DEBUG_SD, "BMI088 ACCEL FAIL: didnt find BMI088!\r\n"); //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, IMU_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH); + } else { + chprintf(DEBUG_SD, "BMI088 ACCEL SUCCESS: found BMI088!\r\n"); } + int16_t temp_c = 0; + bmi088ReadTemp(&imudev, &temp_c); + chprintf(DEBUG_SD, "Read temperature as %u\r\n", temp_c); + + + + uint8_t bmi088_gyro_chip_id = 0; msg_t r = bmi088ReadGyroChipId(&imudev, &bmi088_gyro_chip_id); if( r == MSG_OK ) { chprintf(DEBUG_SD, "BMI088 gyroscope ID is 0x%X, expected to be 0x%X\r\n", bmi088_gyro_chip_id, BMI088_GYR_CHIP_ID_EXPECTED); } else { - chprintf(DEBUG_SD, "Failed to read gyro chip ID from BMI088, r = %d\r\n", r); + chprintf(DEBUG_SD, "Failed to read gyro chip ID from BMI088 GYRO, r = %d\r\n", r); } if( bmi088_gyro_chip_id != BMI088_GYR_CHIP_ID_EXPECTED ) { + chprintf(DEBUG_SD, "BMI088 GYRO FAIL: didnt find BMI088!\r\n"); //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, IMU_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH); + } else { + chprintf(DEBUG_SD, "BMI088 GYRO SUCCESS: found BMI088!\r\n"); } + } chprintf(DEBUG_SD, "Done initializing, starting loop...\r\n"); @@ -800,6 +893,7 @@ THD_FUNCTION(adcs, arg) dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); update_imu_data(); + update_endcard_magnetometer_readings(); process_magnetorquer(); /* From 0d2debbf4c8ca08243730e55fbc6f0ba40ab37cb Mon Sep 17 00:00:00 2001 From: DC Date: Sat, 18 Feb 2023 11:10:32 -0800 Subject: [PATCH 08/20] Initial code working with the MMC5883MA and LTCs to init and read data from the magnetometers --- common/include/mmc5883ma.h | 38 ++++------ common/mmc5883ma.c | 52 ++++++++++--- src/f0/app_adcs/source/adcs.c | 135 +++++++++------------------------- 3 files changed, 90 insertions(+), 135 deletions(-) diff --git a/common/include/mmc5883ma.h b/common/include/mmc5883ma.h index abd9b58a..11ea9da6 100644 --- a/common/include/mmc5883ma.h +++ b/common/include/mmc5883ma.h @@ -18,8 +18,16 @@ * @{ */ -#define MMC5883MA_I2C_ADDRESS_READ ((0x30 >> 0) | (1<<7)) -#define MMC5883MA_I2C_ADDRESS_WRITE (0x30 >> 0) + +#define MMC5883MA_I2C_ADDRESS_READ (0x30) +#define MMC5883MA_I2C_ADDRESS_WRITE (0x30) + +#define MMC5883MA_EXPECTED_PRODUCT_CODE 0x0C + +//#define HMC5883L_I2C_ADDRESS_READ 0x3D +//#define HMC5883L_I2C_ADDRESSW_WRITE 0x3C +//#define HMC5883L_ID_REGISTER_A 0x0A + /** * @brief MMC5883MA Driver version string. @@ -107,19 +115,9 @@ * @name MMC5883MA Internal Control_2 register fields * @{ */ -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_Pos (0U) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_Msk (0xFU << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Msk -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_14Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_5Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_2200mHz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_2Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_4Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_8Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_16Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_32Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) -#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_64Hz (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_2200_mHz (0x03) +#define MMC5883MA_INTRNLCTRL2_CM_FREQ_1_Hz (0x04) + #define MMC5883MA_INTRNLCTRL2_CM_FREQ_RST (0x1U << MMC5883MA_INTRNL_CTRL_2_CM_FREQ_Pos) #define MMC5883MA_INTRNLCTRL2_MDT_Pos (5U) #define MMC5883MA_INTRNLCTRL2_MDT_Msk (0x1U << MMC5883MA_INTRNLCTRL2_MDT_Pos) @@ -144,16 +142,8 @@ #define MMC5883MA_INTRNLCTRL1_BW_ODR_200Hz (0x1U << MMC5883MA_INTRNLCTRL1_BW_Pos) #define MMC5883MA_INTRNLCTRL1_BW_ODR_400Hz (0x2U << MMC5883MA_INTRNLCTRL1_BW_Pos) #define MMC5883MA_INTRNLCTRL1_BW_ODR_600Hz (0x3U << MMC5883MA_INTRNLCTRL1_BW_Pos) -#define MMC5883MA_INTRNLCTRL1_INH_Pos (2U) -#define MMC5883MA_INTRNLCTRL1_INH_Msk (0x7U << MMC5883MA_INTRNLCTRL_INH_Pos) -#define MMC5883MA_INTRNLCTRL1_INH MMC5883MA_INTRNLCTRZ_INH_Msk -#define MMC5883MA_INTRNLCTRL1_INH_X (0x1U << MMC5883MA_INTRNLCTRL_INH_Pos) -#define MMC5883MA_INTRNLCTRL1_INH_Y (0x2U << MMC5883MA_INTRNLCTRL_INH_Pos) -#define MMC5883MA_INTRNLCTRL1_INH_Z (0x4U << MMC5883MA_INTRNLCTRL_INH_Pos) #define MMC5883MA_INTRNLCTRL1_SW_RST_Pos (7U) -#define MMC5883MA_INTRNLCTRL1_SW_RST_Msk (0x1U << MMC5883MA_INTRNLCTRL_SW_RST_Pos) -#define MMC5883MA_INTRNLCTRL1_SW_RST MMC5883MA_INTRNLCTRL_SW_RST_Msk -#define MMC5883MA_INTRNLCTRL1_SW_RST_CMD (0x1U << MMC5883MA_INTRNLCTRL_SW_RST_Pos) +#define MMC5883MA_INTRNLCTRL1_SW_RST_CMD (0x1U << MMC5883MA_INTRNLCTRL1_SW_RST_Pos) /** @} */ /** diff --git a/common/mmc5883ma.c b/common/mmc5883ma.c index 83bb2326..b233d9cb 100644 --- a/common/mmc5883ma.c +++ b/common/mmc5883ma.c @@ -7,9 +7,13 @@ * @{ */ +#include "ch.h" #include "hal.h" #include "mmc5883ma.h" #include "string.h" +#include "chprintf.h" + +#define DEBUG_SD (BaseSequentialStream*) &SD2 /*===========================================================================*/ /* Driver local definitions. */ @@ -117,6 +121,10 @@ bool mmc5883maReadData(MMC5883MADriver *devp, mmc5883ma_data_t *dest) { // osalDbgAssert((devp->state != MMC5883MA_READY), // "mmc5883maStart(), invalid state"); + if( devp->state != MMC5883MA_READY ) { + return(false); + } + bool ret = false; /* Configuring common registers.*/ @@ -167,7 +175,10 @@ void mmc5883maObjectInit(MMC5883MADriver *devp) { } bool mmc5883maSoftReset(MMC5883MADriver *devp) { - return(mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL0, MMC5883MA_INTRNLCTRL0_RST_CMD)); + chprintf(DEBUG_SD, "Resetting MMC4883...\r\n"); + bool r = mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL1, MMC5883MA_INTRNLCTRL1_SW_RST_CMD); + chThdSleepMilliseconds(5); + return(r); } /** @@ -200,20 +211,41 @@ bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { devp->state = MMC5883MA_READY; - mmc5883maSoftReset(devp); - chThdSleepMilliseconds(5); - if( ! mmc5883maI2CReadRegister2(devp->config->i2cp, MMC5883MA_AD_PRDCT_ID_1, &mmc_product_id_readback) ) { - devp->state = MMC5883MA_STOP; + bool found_mmc5883ma_flag = false; + + //Probe I2C bus to see what's attached + if( ! mmc5883maI2CReadRegister3(devp->config->i2cp, MMC5883MA_I2C_ADDRESS_READ, MMC5883MA_AD_PRDCT_ID_1, &mmc_product_id_readback) ) { + chprintf(DEBUG_SD, "Failed to read product code from MMC5883MA chip\r\n"); } else { - if( mmc_product_id_readback != 0x30 ) { - //devp->state = MMC5883MA_STOP; + if( mmc_product_id_readback == MMC5883MA_EXPECTED_PRODUCT_CODE ) { + chprintf(DEBUG_SD, "Successfully read product code from MMC5883MA (good), 0x%X\r\n", mmc_product_id_readback); + found_mmc5883ma_flag = true; + } else { + chprintf(DEBUG_SD, "ERROR: unexpected product ID code from MMC5883MA, read 0x%X, expectex 0x%X\r\n", mmc_product_id_readback, MMC5883MA_EXPECTED_PRODUCT_CODE); } } - //Control 1 reg can be left default of all zeros, 100hz - uint8_t ctrl2 = (1<<2) | (1<<3); //50hz continuous mode - if( ! mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL2, ctrl2)) { + + if( found_mmc5883ma_flag ) { + mmc5883maSoftReset(devp); + + if( ! mmc5883maI2CReadRegister2(devp->config->i2cp, MMC5883MA_AD_PRDCT_ID_1, &mmc_product_id_readback) ) { + devp->state = MMC5883MA_STOP; + } else { + chprintf(DEBUG_SD, "Read MMC5883MA product code as 0x%X, expected 0x%X\r\n", mmc_product_id_readback, MMC5883MA_EXPECTED_PRODUCT_CODE); + if( mmc_product_id_readback != MMC5883MA_EXPECTED_PRODUCT_CODE ) { + chprintf(DEBUG_SD, "ERROR: Read incorrect MMC5883MA product code!!!\r\n"); + devp->state = MMC5883MA_STOP; + } + } + + if( devp->state == MMC5883MA_READY ) { + if( ! mmc5883maI2CWriteRegister2(devp->config->i2cp, MMC5883MA_AD_INTRNLCTRL2, MMC5883MA_INTRNLCTRL2_CM_FREQ_1_Hz)) { + devp->state = MMC5883MA_STOP; + } + } + } else { devp->state = MMC5883MA_STOP; } diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index c133565f..a4ac2e0f 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -129,10 +129,9 @@ static const I2CConfig mmc5883ma_i2ccfg = { 0 }; -static const MMC5883MAConfig mmc4883ma_generic_config = { +static const MMC5883MAConfig mmc5883ma_generic_config = { .i2cp = &I2CD1, - .i2ccfg = &mmc5883ma_i2ccfg, -// .saddr = MMC5883MA_I2C_ADDRESS + .i2ccfg = &mmc5883ma_i2ccfg }; @@ -311,13 +310,12 @@ bool update_imu_data(void) { return ret; } -bool connect_endcard_mmc4883ma(const uint8_t ltc4304_i2c_address, const bool conn_1_enable, const bool conn_2_enable) { +bool connect_endcard_mmc5883ma(const uint8_t ltc4304_i2c_address, const bool conn_1_enable, const bool conn_2_enable) { bool ret = true; I2CDriver *i2cp = &I2CD1; i2cStart(i2cp, &i2ccfg); - if( conn_1_enable ) { ret = ltc4305_set_connections(i2cp, ltc4304_i2c_address, true, false); } else if( conn_2_enable ) { @@ -329,9 +327,9 @@ bool connect_endcard_mmc4883ma(const uint8_t ltc4304_i2c_address, const bool con i2cStop(i2cp); if( ! ret ) { - //chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections!\r\n"); + chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections!\r\n"); } else { - //chprintf(DEBUG_SD, "SUCCESS: set LTC4305 connections!\r\n"); +// chprintf(DEBUG_SD, "SUCCESS: set LTC4305 connections!\r\n"); } return(ret); @@ -340,53 +338,45 @@ bool connect_endcard_mmc4883ma(const uint8_t ltc4304_i2c_address, const bool con bool select_magnetometer(const end_card_magnetometoer_t ecm) { - chprintf(DEBUG_SD, "Selecting magnetometer %u\r\n", ecm); +// chprintf(DEBUG_SD, "Selecting magnetometer %u\r\n", ecm); chThdSleepMilliseconds(10); - bool ret1 = false; bool ret2 = false; - //EC_MAG_2_PZ_1 -// ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); -// ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, true, false); -// chprintf(DEBUG_SD, "select_magnetometer(%d), %d, %d\r\n", ecm, ret1, ret2); -// return(true); - + if( ecm != EC_MAG_NONE ) { + ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, true); + return(ret2); + } switch(ecm) { case EC_MAG_0_MZ_1: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, true, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, true, false); + ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); break; case EC_MAG_1_MZ_2: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, true); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, true); + ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); break; case EC_MAG_2_PZ_1: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, true, false); + ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, true, false); break; case EC_MAG_3_PZ_2: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, true); + ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, true); break; case EC_MAG_NONE: - ret1 = connect_endcard_mmc4883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); - ret2 = connect_endcard_mmc4883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret1 = true; + //ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); FIXME uncomment this + ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); break; } -#if 0 - //FIXME re-enable this code if( ! (ret1 && ret2) ) { chprintf(DEBUG_SD, "ERROR: Failed to select magnetometers ret1=%d, ret2=%d\r\n", ret1, ret2); } -#else - chprintf(DEBUG_SD, "select_magnetometer(%d): %s\r\n", ecm, (ret2 ? "Success" : "Fail")); - return(ret2);//FIXME remove this line of code, this is for bench debuging -#endif return(ret1 && ret2); } @@ -409,17 +399,14 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { } - - chprintf(DEBUG_SD, "Reading from magnetometer...\r\n");chThdSleepMilliseconds(5); + chprintf(DEBUG_SD, "Reading from magnetometer %d: ", ecm);chThdSleepMilliseconds(5); r = mmc5883maReadData(&g_adcs_data.magetometer_data[ecm].driver, &g_adcs_data.magetometer_data[ecm].data); - chprintf(DEBUG_SD, "MAG: mx=%d, my=%d, mz=%d\r\n", g_adcs_data.magetometer_data[ecm].data.mx, + chprintf(DEBUG_SD, " mx=%d, my=%d, mz=%d\r\n", g_adcs_data.magetometer_data[ecm].data.mx, g_adcs_data.magetometer_data[ecm].data.my, g_adcs_data.magetometer_data[ecm].data.mz); - - select_magnetometer(EC_MAG_NONE); return(r); @@ -429,7 +416,7 @@ bool update_endcard_magnetometer_readings(void) { static systime_t last_mag_update_time = 0; systime_t now_time = chVTGetSystemTime(); - if( chTimeDiffX(last_mag_update_time, now_time) < 1000 ) { + if( chTimeDiffX(last_mag_update_time, now_time) < 500 ) { //Note: Default output rate for the MMC driver is 1hz, sample at 2X that return(true); } last_mag_update_time = now_time; @@ -438,7 +425,7 @@ bool update_endcard_magnetometer_readings(void) { bool ret = true; for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { - chprintf(DEBUG_SD, "Reading EMC %u\r\n", ecm); +// chprintf(DEBUG_SD, "Reading EMC %u\r\n", ecm); select_and_read_magnetometer(ecm); } @@ -450,39 +437,31 @@ bool update_endcard_magnetometer_readings(void) { bool init_end_cap_magnetometers(void) { palClearLine(LINE_MAG_N_EN); + chThdSleepMilliseconds(5); bool ret = true; - for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { + for(end_card_magnetometoer_t ecm = EC_MAG_0_MZ_1; ecm < EC_MAG_NONE; ecm++ ) { chprintf(DEBUG_SD, "Initing MMC %u\r\n", ecm); - chThdSleepMilliseconds(20); + chThdSleepMilliseconds(5); mmc5883maObjectInit(&g_adcs_data.magetometer_data[ecm].driver); if( ! select_magnetometer(ecm) ) { ret = false; - chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u due to selection error\r\n"); + chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u due to LTC selection error\r\n"); } else { - if( mmc5883maStart(&g_adcs_data.magetometer_data[ecm].driver, &mmc4883ma_generic_config) ) { + if( mmc5883maStart(&g_adcs_data.magetometer_data[ecm].driver, &mmc5883ma_generic_config) ) { chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u\r\n", ecm); g_adcs_data.magetometer_data[ecm].is_initialized = true; } else { chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u\r\n", ecm); + ret = false; } - extern uint8_t mmc_product_id_readback; - chprintf(DEBUG_SD, "MMC Product Id readback = 0x%X\r\n", mmc_product_id_readback); } } - - for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { - chprintf(DEBUG_SD, "ecm init %d = %d\r\n", ecm, g_adcs_data.magetometer_data[ecm].is_initialized); - } -// for(;;) { -// -// } - select_magnetometer(EC_MAG_NONE); return(ret); @@ -720,11 +699,6 @@ void process_magnetorquer(void) { void init_magnetorquer(void) { - -// for(;;) { -// chThdSleepMilliseconds(1200); -// } - memset(&g_adcs_data.mt_pwm_data, 0, sizeof(g_adcs_data.mt_pwm_data)); g_adcs_data.mt_pwm_data[0].phase_gpio_pin_number = GPIOB_MT_X_PHASE; @@ -783,47 +757,7 @@ THD_FUNCTION(adcs, arg) chThdSleepMilliseconds(50); -#if 0 -// select_magnetometer(EC_MAG_0_MZ_1); - - end_card_magnetometoer_t ecm = EC_MAG_2_PZ_1; - - - chprintf(DEBUG_SD, "Setting ECM %u\r\n", ecm); - select_magnetometer(ecm); -// for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { -// select_magnetometer(ecm); -// } - for(;;) { - i2cStart(&I2CD1, &mmc5883ma_i2ccfg); - - uint8_t dest = 0; - mmc5883maI2CReadRegister3(&I2CD1, ((0x30 >> 0) | (1<<7)), MMC5883MA_AD_PRDCT_ID_1, &dest); - - uint16_t mag = 0; - mmc5883maI2CReadRegister4(&I2CD1, ((0x30 >> 0) | (1<<7)), MMC5883MA_AD_XOUT_LOW, &mag); - chprintf(DEBUG_SD, "MMC Chip ID: 0x%X, X=0x%X\r\n", dest, mag); - -// - - i2cStop(&I2CD1); - chThdSleepMilliseconds(500); - } - - for(;;) { - chThdSleepMilliseconds(100); - } -#endif - - - - init_end_cap_magnetometers(); - for(;;) { - update_endcard_magnetometer_readings(); - chThdSleepMilliseconds(1200); - } - init_magnetorquer(); /* Activates the ADC1 driver. */ @@ -870,7 +804,6 @@ THD_FUNCTION(adcs, arg) - uint8_t bmi088_gyro_chip_id = 0; msg_t r = bmi088ReadGyroChipId(&imudev, &bmi088_gyro_chip_id); if( r == MSG_OK ) { @@ -892,9 +825,9 @@ THD_FUNCTION(adcs, arg) for (uint32_t iterations = 0; !chThdShouldTerminateX(); iterations++) { dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); - update_imu_data(); - update_endcard_magnetometer_readings(); - process_magnetorquer(); + update_imu_data();//FIXME add error handling + update_endcard_magnetometer_readings();//FIXME add error handling + process_magnetorquer();//FIXME add error handling /* if( update_imu_data() ) { From ff122c771d78d737d9a6114034659f732ebe16da Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 8 Mar 2023 18:02:33 -0800 Subject: [PATCH 09/20] Misc updates --- src/f0/app_adcs/source/adcs.c | 398 ++++++++++++++++++++++------------ 1 file changed, 255 insertions(+), 143 deletions(-) diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index a4ac2e0f..68adfaaa 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -26,7 +26,6 @@ #endif -//FIXME I believe MAX() is defined in some common C library??? #define MAX(x, y) (((x) > (y)) ? (x) : (y)) #define MIN(a,b) (((a)<(b))?(a):(b)) @@ -69,7 +68,6 @@ static const DACConfig dac_config = { }; - #define PWM_TIMER_FREQ 1000000 // Hz #define PWM_FREQ 2500// periods per sec #define PWM_PERIOD PWM_TIMER_FREQ/PWM_FREQ @@ -104,11 +102,23 @@ static PWMConfig pwmcfg_1 = { typedef enum { - IMU_OD_ERROR_INFO_CODE_NONE = 0, - IMU_OD_ERROR_INFO_CODE_IMU_COMM_FAILURE, - IMU_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH, - IMU_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH, -} imu_od_error_info_code_t; + ADCS_OD_ERROR_INFO_CODE_NONE = 0, + ADCS_OD_ERROR_INFO_CODE_IMU_COMM_FAILURE, + ADCS_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH, + ADCS_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH, + ADCS_OD_ERROR_INFO_CODE_IMU_INIT_FAILURE, + ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_INIT_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_1_INIT_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_2_INIT_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_3_INIT_FAILURE, + ADCS_OD_ERROR_INFO_CODE_LTZ_PLUS_Z_ENDCAP_FAILURE, + ADCS_OD_ERROR_INFO_CODE_LTZ_MINUS_Z_ENDCAP_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_COMM_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_1_COMM_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_2_COMM_FAILURE, + ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_3_COMM_FAILURE, +} adcs_od_error_info_code_t; typedef enum { @@ -120,7 +130,6 @@ typedef enum { } end_card_magnetometoer_t; - static const I2CConfig mmc5883ma_i2ccfg = { STM32_TIMINGR_PRESC(0xBU) | STM32_TIMINGR_SCLDEL(0x4U) | STM32_TIMINGR_SDADEL(0x2U) | @@ -135,11 +144,9 @@ static const MMC5883MAConfig mmc5883ma_generic_config = { }; - typedef struct { int32_t current_pwm_percent; //0-10000 int32_t target_pwm_percent; //Negative values indicate the phase should be inverted -// int32_t target_pwm_current_uA; //Negative values indicate the phase should be inverted float current_feedback_min_V; float current_feedback_max_V; @@ -156,9 +163,14 @@ typedef struct { MMC5883MADriver driver; mmc5883ma_data_t data; volatile bool is_initialized; + volatile bool is_working; } magnetometer_data_struct_t; typedef struct { + bmi088_accelerometer_sample_t accl_data; + bmi088_gyro_sample_t gyro_sample; + int16_t temp_c; + mt_pwm_phase_data_t mt_pwm_data[3]; magnetometer_data_struct_t magetometer_data[4]; @@ -166,6 +178,7 @@ typedef struct { adcs_data_t g_adcs_data; +extern CO_t *CO; static const I2CConfig i2ccfg = { @@ -186,6 +199,26 @@ static const BMI088Config imucfg = { static BMI088Driver imudev; +const char* end_card_magnetometoer_t_to_str(const end_card_magnetometoer_t ecm) { + switch (ecm) { + case EC_MAG_0_MZ_1: + return ("EC_MAG_0_MZ_1"); + case EC_MAG_1_MZ_2: + return ("EC_MAG_1_MZ_2"); + case EC_MAG_2_PZ_1: + return ("EC_MAG_2_PZ_1"); + case EC_MAG_3_PZ_2: + return ("EC_MAG_3_PZ_2"); + case EC_MAG_NONE: + return ("EC_MAG_NONE"); + } + return ("???"); + +} + + + + int32_t saturate_int32_t(const int32_t v, const int32_t min, const int32_t max) { if (v >= max) return (max); @@ -195,15 +228,113 @@ int32_t saturate_int32_t(const int32_t v, const int32_t min, const int32_t max) return (v); } +// +//int16_t saturate_int16_t(const int32_t v) { +// if (v >= INT16_MAX) +// return (INT16_MAX); +// +// else if (v <= INT16_MIN) +// return (INT16_MIN); +// +// return (v); +//} -int16_t saturate_int16_t(const int32_t v) { - if (v >= INT16_MAX) - return (INT16_MAX); - else if (v <= INT16_MIN) - return (INT16_MIN); +int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t axis) { + int32_t ret = 0; + if( axis <= 1 ) { + //X and Y axes + //1700 => 1000000 uA + //500 => 295000 uA (this is hard/impossible to measure using the ADC + ret = current_uA / (988000.0 / 1700.0); + const int32_t pwm_duty_max_value = 1700; + ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); + } else { + //Z axis + //1700 => 344000 uA + //500 => 102000 uA (this is hard/impossible to measure using the ADC + ret = current_uA / (344000.0 / 1700.0); + const int32_t pwm_duty_max_value = 4940; + ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); + } + + return(ret); +} + +void handle_can_open_data(void) { + g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent * 100, 0); + g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent * 100, 1); + g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); + + + OD_RAM.x6000_gyroscope.pitchRate = g_adcs_data.gyro_sample.gyro_x; + OD_RAM.x6000_gyroscope.yawRate = g_adcs_data.gyro_sample.gyro_y; + OD_RAM.x6000_gyroscope.rollRate = g_adcs_data.gyro_sample.gyro_z; + OD_RAM.x6000_gyroscope.pitchRateRaw = g_adcs_data.gyro_sample.gyro_x_raw; + OD_RAM.x6000_gyroscope.yawRateRaw = g_adcs_data.gyro_sample.gyro_y_raw; + OD_RAM.x6000_gyroscope.rollRateRaw = g_adcs_data.gyro_sample.gyro_z_raw; + + OD_RAM.x6001_acceleration.accx = g_adcs_data.accl_data.accl_x; + OD_RAM.x6001_acceleration.accy = g_adcs_data.accl_data.accl_y; + OD_RAM.x6001_acceleration.accz = g_adcs_data.accl_data.accl_z; + OD_RAM.x6001_acceleration.accXRaw = g_adcs_data.accl_data.accl_x_raw; + OD_RAM.x6001_acceleration.accyRaw = g_adcs_data.accl_data.accl_y_raw; + OD_RAM.x6001_acceleration.acczRaw = g_adcs_data.accl_data.accl_z_raw; + + OD_RAM.x6002_IMU_Temperature = g_adcs_data.temp_c; + + + OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; + OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; + OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; + + OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = g_adcs_data.mt_pwm_data[0].current_pwm_percent; + OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = g_adcs_data.mt_pwm_data[1].current_pwm_percent; + OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = g_adcs_data.mt_pwm_data[2].current_pwm_percent; + + + if (g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].is_working) { + OD_RAM.x6003_magnetometerPZ1.magx = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mx; + OD_RAM.x6003_magnetometerPZ1.magy = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.my; + OD_RAM.x6003_magnetometerPZ1.magz = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mz; + } else { + OD_RAM.x6003_magnetometerPZ1.magx = INT16_MAX; + OD_RAM.x6003_magnetometerPZ1.magy = INT16_MAX; + OD_RAM.x6003_magnetometerPZ1.magz = INT16_MAX; + } + + if (g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].is_working) { + OD_RAM.x6004_magnetometerPZ2.magx = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mx; + OD_RAM.x6004_magnetometerPZ2.magy = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.my; + OD_RAM.x6004_magnetometerPZ2.magz = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mz; + } else { + OD_RAM.x6004_magnetometerPZ2.magx = INT16_MAX; + OD_RAM.x6004_magnetometerPZ2.magy = INT16_MAX; + OD_RAM.x6004_magnetometerPZ2.magz = INT16_MAX; + } + + + if (g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].is_working) { + OD_RAM.x6005_magnetometerMZ1.magx = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mx; + OD_RAM.x6005_magnetometerMZ1.magy = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.my; + OD_RAM.x6005_magnetometerMZ1.magz = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mz; + } else { + OD_RAM.x6005_magnetometerMZ1.magx = INT16_MAX; + OD_RAM.x6005_magnetometerMZ1.magy = INT16_MAX; + OD_RAM.x6005_magnetometerMZ1.magz = INT16_MAX; + } + + + if (g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].is_working) { + OD_RAM.x6006_magnetometerMZ2.magx = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mx; + OD_RAM.x6006_magnetometerMZ2.magy = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.my; + OD_RAM.x6006_magnetometerMZ2.magz = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mz; + } else { + OD_RAM.x6006_magnetometerMZ2.magx = INT16_MAX; + OD_RAM.x6006_magnetometerMZ2.magy = INT16_MAX; + OD_RAM.x6006_magnetometerMZ2.magz = INT16_MAX; + } - return (v); } /** @@ -213,7 +344,7 @@ int16_t saturate_int16_t(const int32_t v) { bool update_imu_data(void) { static systime_t last_imu_update_time = 0; - systime_t now_time = chVTGetSystemTime(); + const systime_t now_time = chVTGetSystemTime(); if( chTimeDiffX(last_imu_update_time, now_time) < 1000 ) { return(true); } @@ -229,26 +360,21 @@ bool update_imu_data(void) { //BMI088AccelerometerEnableOrSuspend(&imudev, BMI088_MODE_ACTIVE); //chThdSleepMilliseconds(10); - - bmi088_accelerometer_sample_t accl_data; - if( bmi088ReadAccelerometerXYZmG(&imudev, &accl_data ) == MSG_OK ) { + if( bmi088ReadAccelerometerXYZmG(&imudev, &g_adcs_data.accl_data ) == MSG_OK ) { dbgprintf("Acc readings mG X = %d, Y = %d, Z = %d\r\n", accl_data.accl_x, accl_data.accl_y, accl_data.accl_z); } else { ret = false; dbgprintf("Failed to read accelerometer readings\r\n"); } - bmi088_gyro_sample_t gyro_sample; - - if( bmi088ReadGyroXYZ(&imudev, &gyro_sample) == MSG_OK ) { + if( bmi088ReadGyroXYZ(&imudev, &g_adcs_data.gyro_sample) == MSG_OK ) { dbgprintf("Gyro readings X = %d, Y = %d, Z = %d\r\n", gyro_sample.gyro_x, gyro_sample.gyro_y, gyro_sample.gyro_z); } else { ret = false; dbgprintf("Failed to read gyro readings\r\n"); } - int16_t temp_c = 0; - if( bmi088ReadTemp(&imudev, &temp_c) == MSG_OK ) { + if( bmi088ReadTemp(&imudev, &g_adcs_data.temp_c) == MSG_OK ) { dbgprintf("Accelerator temp_c = %d C\r\n", temp_c); } else { ret = false; @@ -261,56 +387,10 @@ bool update_imu_data(void) { //BMI088AccelerometerEnableOrSuspend(&imudev, BMI088_MODE_SUSPEND); - OD_RAM.x6000_gyroscope.pitchRate = gyro_sample.gyro_x; - OD_RAM.x6000_gyroscope.yawRate = gyro_sample.gyro_y; - OD_RAM.x6000_gyroscope.rollRate = gyro_sample.gyro_z; - OD_RAM.x6000_gyroscope.pitchRateRaw = gyro_sample.gyro_x_raw; - OD_RAM.x6000_gyroscope.yawRateRaw = gyro_sample.gyro_y_raw; - OD_RAM.x6000_gyroscope.rollRateRaw = gyro_sample.gyro_z_raw; - - OD_RAM.x6001_acceleration.accx = accl_data.accl_x; - OD_RAM.x6001_acceleration.accy = accl_data.accl_y; - OD_RAM.x6001_acceleration.accz = accl_data.accl_z; - OD_RAM.x6001_acceleration.accXRaw = accl_data.accl_x_raw; - OD_RAM.x6001_acceleration.accyRaw = accl_data.accl_y_raw; - OD_RAM.x6001_acceleration.acczRaw = accl_data.accl_z_raw; - - OD_RAM.x6002_IMU_Temperature = temp_c; - - - //FIXME confirm these units are usable and reasonable for higher level applications - //Output current units are 100uA per LSB. int16 is +/- 32768. Yields a min/max representation of +/- 3.2 amps - OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = saturate_int16_t(g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA / 100); - OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = saturate_int16_t(g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA / 100); - OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = saturate_int16_t(g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA / 100); - - OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = g_adcs_data.mt_pwm_data[0].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = g_adcs_data.mt_pwm_data[1].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = g_adcs_data.mt_pwm_data[2].current_pwm_percent; - - - OD_RAM.x6003_magnetometerPZ1.magx = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mx; - OD_RAM.x6003_magnetometerPZ1.magy = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.my; - OD_RAM.x6003_magnetometerPZ1.magz = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mz; - - OD_RAM.x6004_magnetometerPZ2.magx = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mx; - OD_RAM.x6004_magnetometerPZ2.magy = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.my; - OD_RAM.x6004_magnetometerPZ2.magz = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mz; - - OD_RAM.x6005_magnetometerMZ1.magx = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mx; - OD_RAM.x6005_magnetometerMZ1.magy = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.my; - OD_RAM.x6005_magnetometerMZ1.magz = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mz; - - OD_RAM.x6006_magnetometerMZ2.magx = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mx; - OD_RAM.x6006_magnetometerMZ2.magy = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.my; - OD_RAM.x6006_magnetometerMZ2.magz = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mz; - - //FIXME add some kind of publication of eroror codes/states etc - return ret; } -bool connect_endcard_mmc5883ma(const uint8_t ltc4304_i2c_address, const bool conn_1_enable, const bool conn_2_enable) { +bool connect_endcard_ltc4305_geneic(const uint8_t ltc4304_i2c_address, const bool conn_1_enable, const bool conn_2_enable) { bool ret = true; I2CDriver *i2cp = &I2CD1; @@ -327,14 +407,31 @@ bool connect_endcard_mmc5883ma(const uint8_t ltc4304_i2c_address, const bool con i2cStop(i2cp); if( ! ret ) { - chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections!\r\n"); + chprintf(DEBUG_SD, "ERROR: Failed to set LTC4305 connections! i2c_addr=0x%X\r\n", (ltc4304_i2c_address << 1)); } else { -// chprintf(DEBUG_SD, "SUCCESS: set LTC4305 connections!\r\n"); + chprintf(DEBUG_SD, "SUCCESS: set LTC4305 connections! i2c_addr=0x%X\r\n", (ltc4304_i2c_address << 1)); } return(ret); } +bool connect_endcard_ltc4305_plus_z(const bool conn_1_enable, const bool conn_2_enable) { + bool ret = connect_endcard_ltc4305_geneic(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, conn_1_enable, conn_2_enable); + if( ! ret ) { + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_LTZ_PLUS_Z_ENDCAP_FAILURE); + } //FIXME should this error be cleard if/when comms works again on a subsequent call? + + return(ret); +} + +bool connect_endcard_ltc4305_minus_z(const bool conn_1_enable, const bool conn_2_enable) { + bool ret = connect_endcard_ltc4305_geneic(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, conn_1_enable, conn_2_enable); + if( ! ret ) { + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_LTZ_MINUS_Z_ENDCAP_FAILURE); + } //FIXME should this error be cleard if/when comms works again on a subsequent call? + + return(ret); +} bool select_magnetometer(const end_card_magnetometoer_t ecm) { @@ -344,35 +441,43 @@ bool select_magnetometer(const end_card_magnetometoer_t ecm) { bool ret1 = false; bool ret2 = false; - if( ecm != EC_MAG_NONE ) { - ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, true); - return(ret2); - } +// if( ecm != EC_MAG_NONE ) { +// //FIXME delete this block +// ret2 = connect_endcard_ltc4305_plus_z(false, true); +// return(ret2); +// } + +// if( ecm == EC_MAG_0_MZ_1 || ecm == EC_MAG_1_MZ_2 ) { +// ret2 = connect_endcard_ltc4305_plus_z(false, true); +// return(ret2); +// } switch(ecm) { case EC_MAG_0_MZ_1: - ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, true, false); - ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret1 = connect_endcard_ltc4305_minus_z(true, false); + ret2 = connect_endcard_ltc4305_plus_z(false, false); break; case EC_MAG_1_MZ_2: - ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, true); - ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret1 = connect_endcard_ltc4305_minus_z(false, true); + ret2 = connect_endcard_ltc4305_plus_z(false, false); break; case EC_MAG_2_PZ_1: - ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); - ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, true, false); + ret1 = connect_endcard_ltc4305_minus_z(false, false); + ret2 = connect_endcard_ltc4305_plus_z(true, false); break; case EC_MAG_3_PZ_2: - ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); - ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, true); + ret1 = connect_endcard_ltc4305_minus_z(false, false); + ret2 = connect_endcard_ltc4305_plus_z(false, true); break; case EC_MAG_NONE: ret1 = true; - //ret1 = connect_endcard_mmc5883ma(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, false, false); FIXME uncomment this - ret2 = connect_endcard_mmc5883ma(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, false, false); + ret1 = connect_endcard_ltc4305_minus_z(false, false); //FIXME uncomment this + ret2 = connect_endcard_ltc4305_plus_z(false, false); break; } +// return(ret1); //fixme remove this +// return(ret2); //FIXME remove this if( ! (ret1 && ret2) ) { chprintf(DEBUG_SD, "ERROR: Failed to select magnetometers ret1=%d, ret2=%d\r\n", ret1, ret2); @@ -390,7 +495,7 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { } if( ! (g_adcs_data.magetometer_data[ecm].is_initialized) ) { - chprintf(DEBUG_SD, "Magnetometer %d not initialized.\r\n", ecm); + chprintf(DEBUG_SD, "Magnetometer %d %s not initialized.\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); return(false); } @@ -399,15 +504,19 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { } - chprintf(DEBUG_SD, "Reading from magnetometer %d: ", ecm);chThdSleepMilliseconds(5); - - r = mmc5883maReadData(&g_adcs_data.magetometer_data[ecm].driver, &g_adcs_data.magetometer_data[ecm].data); + chprintf(DEBUG_SD, "Reading from magnetometer %d %s: ", ecm, end_card_magnetometoer_t_to_str(ecm)); + chThdSleepMilliseconds(5); - chprintf(DEBUG_SD, " mx=%d, my=%d, mz=%d\r\n", g_adcs_data.magetometer_data[ecm].data.mx, - g_adcs_data.magetometer_data[ecm].data.my, - g_adcs_data.magetometer_data[ecm].data.mz); + if( mmc5883maReadData(&g_adcs_data.magetometer_data[ecm].driver, &g_adcs_data.magetometer_data[ecm].data) ) { + chprintf(DEBUG_SD, " mx=%d, my=%d, mz=%d\r\n", g_adcs_data.magetometer_data[ecm].data.mx, + g_adcs_data.magetometer_data[ecm].data.my, + g_adcs_data.magetometer_data[ecm].data.mz); + r = true; + } else { + //FIXME should this error be cleard if/when comms works again on a subsequent call? + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_COMM_FAILURE + ecm); + } - select_magnetometer(EC_MAG_NONE); return(r); } @@ -426,7 +535,13 @@ bool update_endcard_magnetometer_readings(void) { for(end_card_magnetometoer_t ecm = 0; ecm < EC_MAG_NONE; ecm++ ) { // chprintf(DEBUG_SD, "Reading EMC %u\r\n", ecm); - select_and_read_magnetometer(ecm); + if( ! select_and_read_magnetometer(ecm) ) { + ret = false; + //Note: if for some reason the LTC or MMC's stop responding after initialization, the CANOpen output data will saturate as it inspects the is_working flag. + g_adcs_data.magetometer_data[ecm].is_working = false; + } else { + g_adcs_data.magetometer_data[ecm].is_working = true; + } } select_magnetometer(EC_MAG_NONE); @@ -434,14 +549,18 @@ bool update_endcard_magnetometer_readings(void) { return(ret); } +void stop_end_cap_magnetometers(void) { + //Disable power to the end cap magnetometers + palSetLine(LINE_MAG_N_EN); +} bool init_end_cap_magnetometers(void) { palClearLine(LINE_MAG_N_EN); - chThdSleepMilliseconds(5); bool ret = true; + //FIXME ecm start for(end_card_magnetometoer_t ecm = EC_MAG_0_MZ_1; ecm < EC_MAG_NONE; ecm++ ) { chprintf(DEBUG_SD, "Initing MMC %u\r\n", ecm); chThdSleepMilliseconds(5); @@ -450,14 +569,16 @@ bool init_end_cap_magnetometers(void) { if( ! select_magnetometer(ecm) ) { ret = false; - chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u due to LTC selection error\r\n"); + chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u %s due to LTC selection error\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); } else { if( mmc5883maStart(&g_adcs_data.magetometer_data[ecm].driver, &mmc5883ma_generic_config) ) { - chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u\r\n", ecm); + chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u %s\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); g_adcs_data.magetometer_data[ecm].is_initialized = true; } else { - chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u\r\n", ecm); + chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u %s\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); ret = false; + //FIXME should this error be cleard if/when comms works again on a subsequent call? + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_INIT_FAILURE + ecm); } } } @@ -506,32 +627,8 @@ void set_pwm_output(void) { #endif } -int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t axis) { - int32_t ret = 0; - if( axis <= 1 ) { - //X and Y axes - //1700 => 1000000 uA - //500 => 295000 uA (this is hard/impossible to measure using the ADC - ret = current_uA / (988000.0 / 1700.0); - const int32_t pwm_duty_max_value = 1700; - ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); - } else { - //Z axis - //1700 => 344000 uA - //500 => 102000 uA (this is hard/impossible to measure using the ADC - ret = current_uA / (344000.0 / 1700.0); - const int32_t pwm_duty_max_value = 4940; - ret = saturate_int32_t(ret, -pwm_duty_max_value, pwm_duty_max_value); - } - return(ret); -} -void magnetorquer_handle_canopen(void) { - g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent * 100, 0); - g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent * 100, 1); - g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); -} int32_t current_feedback_convert_volts_to_microamps(const float volts) { @@ -606,6 +703,9 @@ void print_debug_output(void) { (uint32_t) (data->current_feedback_max_V * 1000)); } + + chprintf(DEBUG_SD, " CO_EM_GENERIC_ERROR: %u\r\n", CO_isError(CO->em, CO_EM_GENERIC_ERROR)); + } } @@ -692,7 +792,6 @@ void read_adc_current(void) { } void process_magnetorquer(void) { - magnetorquer_handle_canopen(); set_pwm_output(); read_adc_current(); } @@ -756,6 +855,26 @@ THD_FUNCTION(adcs, arg) chprintf(DEBUG_SD, "Starting ADCS thread...\r\n"); chThdSleepMilliseconds(50); +// +// palClearLine(LINE_MAG_N_EN); +// end_card_magnetometoer_t ecm = EC_MAG_2_PZ_1; +//// ecm = EC_MAG_3_PZ_2; +// mmc5883maObjectInit(&g_adcs_data.magetometer_data[ecm].driver); +// select_magnetometer(ecm); +// while(1) { +// if( mmc5883maStart(&g_adcs_data.magetometer_data[ecm].driver, &mmc5883ma_generic_config) ) { +// chprintf(DEBUG_SD, "Successfully started MMC4883MA number %u %s\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); +// g_adcs_data.magetometer_data[ecm].is_initialized = true; +// } else { +// chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u %s\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); +//// ret = false; +// //FIXME should this error be cleard if/when comms works again on a subsequent call? +// CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_INIT_FAILURE + ecm); +// } +// chThdSleepMilliseconds(1000); +// } + + init_end_cap_magnetometers(); init_magnetorquer(); @@ -782,6 +901,7 @@ THD_FUNCTION(adcs, arg) chprintf(DEBUG_SD, "BMI088 state = %u, error_flags=0x%X\r\n", imudev.state, imudev.error_flags); if( imudev.state != BMI088_READY ) { chprintf(DEBUG_SD, "Failed to start IMU driver...\r\n"); + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_IMU_INIT_FAILURE); } else { uint8_t bmi088_chip_id = 0; if( (r = bmi088ReadAccelerometerChipId(&imudev, &bmi088_chip_id)) == MSG_OK ) { @@ -792,7 +912,7 @@ THD_FUNCTION(adcs, arg) if( bmi088_chip_id != BMI088_ACC_CHIP_ID_EXPECTED ) { chprintf(DEBUG_SD, "BMI088 ACCEL FAIL: didnt find BMI088!\r\n"); - //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, IMU_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH); + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH); } else { chprintf(DEBUG_SD, "BMI088 ACCEL SUCCESS: found BMI088!\r\n"); } @@ -814,7 +934,7 @@ THD_FUNCTION(adcs, arg) if( bmi088_gyro_chip_id != BMI088_GYR_CHIP_ID_EXPECTED ) { chprintf(DEBUG_SD, "BMI088 GYRO FAIL: didnt find BMI088!\r\n"); - //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, IMU_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH); + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH); } else { chprintf(DEBUG_SD, "BMI088 GYRO SUCCESS: found BMI088!\r\n"); } @@ -825,29 +945,21 @@ THD_FUNCTION(adcs, arg) for (uint32_t iterations = 0; !chThdShouldTerminateX(); iterations++) { dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); - update_imu_data();//FIXME add error handling - update_endcard_magnetometer_readings();//FIXME add error handling - process_magnetorquer();//FIXME add error handling - -/* if( update_imu_data() ) { - - if( CO_isError(CO->em, CO_EM_GENERIC_ERROR) ) { - dbgprintf("Clearing CO error state...\r\n"); - //CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, IMU_OD_ERROR_INFO_CODE_NONE); - - } + CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); } else { - dbgprintf("Setting CO error state...\r\n"); - //CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, IMU_OD_ERROR_INFO_CODE_IMU_COMM_FAILURE); + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); + } + update_endcard_magnetometer_readings(); + process_magnetorquer(); + handle_can_open_data(); - } -*/ chThdSleepMilliseconds(5); } /* Stop the BMI088 IMU sensor */ bmi088Stop(&imudev); + stop_end_cap_magnetometers(); chThdExit(MSG_OK); } From c57fb3a00a89617a087dd6d98554dbb17636d37a Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 8 Mar 2023 21:29:22 -0800 Subject: [PATCH 10/20] Initial version of ADC reads triggered by PWM edges working --- src/f0/app_adcs/source/adcs.c | 163 ++++++++++++++++++++++++++-------- 1 file changed, 126 insertions(+), 37 deletions(-) diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 68adfaaa..2929a037 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -36,10 +36,11 @@ #define ADC_NUM_CHANNELS 4 -#define MY_SAMPLING_NUMBER 100 +#define MY_SAMPLING_NUMBER 32 #define ADC_BUFF_SIZE (ADC_NUM_CHANNELS * MY_SAMPLING_NUMBER) static adcsample_t adc_sample_buff[ADC_BUFF_SIZE]; -static adcsample_t adc_temp_sample_buff[ADC_BUFF_SIZE]; +//static adcsample_t adc_temp_sample_buff[ADC_BUFF_SIZE]; + static float measured_i_sense_voltage[ADC_NUM_CHANNELS];; @@ -49,15 +50,36 @@ static float measured_i_sense_voltage[ADC_NUM_CHANNELS];; //ADC_SMPR_SMP_71P5 //ADC_SMPR_SMP_239P5 -static const ADCConversionGroup adcgrpcfg = { - TRUE, /* Enables the circular buffer mode for the group. */ - ADC_NUM_CHANNELS, - NULL, - NULL, - ADC_CFGR1_CONT | ADC_CFGR1_RES_12BIT, /* CFGR1 */ - ADC_TR(0, 0), /* TR */ - ADC_SMPR_SMP_71P5, /* SMPR */ - ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL7 /* CHSELR, note, for continuous conversion mode you must configure 1 or an even number of channels */ +//static const ADCConversionGroup adcgrpcfg = { +// .circular = TRUE, /* Enables the circular buffer mode for the group. */ +// num_channels = ADC_NUM_CHANNELS, +// .end_cb = NULL, +// .error_cb = NULL, +// .cfgr1 = ADC_CFGR1_CONT | ADC_CFGR1_RES_12BIT, /* CFGR1 */ +// .tr = ADC_TR(0, 0), /* TR */ +// .smpr = ADC_SMPR_SMP_71P5, /* SMPR */ +// .chselr = ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL7 /* CHSELR, note, for continuous conversion mode you must configure 1 or an even number of channels */ +//}; + +volatile uint32_t adc_conversion_complete_callback_count = 0; +void adc_conversion_complete_callback(ADCDriver *adcp) { + adc_conversion_complete_callback_count++; +} + +volatile uint32_t adc_conversion_error_callback_count = 0; +void adc_conversion_error_callback(ADCDriver *adcp, adcerror_t err) { + adc_conversion_error_callback_count++; +} + +static const ADCConversionGroup adcgrpcfg_tim1_trigo = { + .circular = FALSE, /* Enables the circular buffer mode for the group. */ + .num_channels = ADC_NUM_CHANNELS, + .end_cb = adc_conversion_complete_callback, + .error_cb = adc_conversion_error_callback, + .cfgr1 = ADC_CFGR1_RES_12BIT | ADC_CFGR1_EXTEN_RISING, /* CFGR1 */ + .tr = ADC_TR(0, 0), /* TR */ + .smpr = ADC_SMPR_SMP_1P5, /* SMPR */ + .chselr = ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL7 /* CHSELR, note, for continuous conversion mode you must configure 1 or an even number of channels */ }; @@ -81,24 +103,40 @@ static const DACConfig dac_config = { //PB15 #define MT_Z_PWM_PWM_CHANNEL (3 - 1) - -static PWMConfig pwmcfg_1 = { - PWM_TIMER_FREQ, - PWM_PERIOD, - NULL, - { +static PWMConfig pwmcfg_1_trigo = { + .frequency = PWM_TIMER_FREQ, + .period = PWM_PERIOD, + .callback = NULL, + .channels = { {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, {PWM_OUTPUT_ACTIVE_HIGH, NULL} }, - 0,//CR2 + .cr2 = TIM_CR2_MMS_1,//CR2 #if STM32_PWM_USE_ADVANCED - 0, //BDTR + .bdtr = 0, //BDTR #endif - 0,//DIER + .dier = 0,//DIER }; +//static PWMConfig pwmcfg_1 = { +// .frequency = PWM_TIMER_FREQ, +// .period = PWM_PERIOD, +// .callback = NULL, +// .channels = { +// {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, +// {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, +// {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, +// {PWM_OUTPUT_ACTIVE_HIGH, NULL} +// }, +// .cr2 = 0,//CR2 +// #if STM32_PWM_USE_ADVANCED +// .bdtr = 0, //BDTR +// #endif +// .dier = 0,//DIER +//}; + typedef enum { @@ -148,8 +186,8 @@ typedef struct { int32_t current_pwm_percent; //0-10000 int32_t target_pwm_percent; //Negative values indicate the phase should be inverted - float current_feedback_min_V; - float current_feedback_max_V; +// float current_feedback_min_V; +// float current_feedback_max_V; float current_feedback_measurement_V; //Volts, Note: this is the average voltage while the PWM output is high. int32_t current_feedback_measurement_uA; //uA. Note: this is the average current flowing while the PWM output is high. It does not represent overall average current. @@ -267,6 +305,7 @@ void handle_can_open_data(void) { g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); + OD_RAM.x6000_gyroscope.pitchRate = g_adcs_data.gyro_sample.gyro_x; OD_RAM.x6000_gyroscope.yawRate = g_adcs_data.gyro_sample.gyro_y; OD_RAM.x6000_gyroscope.rollRate = g_adcs_data.gyro_sample.gyro_z; @@ -592,7 +631,7 @@ bool init_end_cap_magnetometers(void) { void set_pwm_output(void) { if( PWMD1.state == PWM_STOP ) { - pwmStart(&PWMD1, &pwmcfg_1); + pwmStart(&PWMD1, &pwmcfg_1_trigo); #if 0 chprintf(DEBUG_SD, "Turning on PWM output...\r\n"); pwmEnableChannel(&PWMD1, MT_X_PWM_PWM_CHANNEL, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 1000)); @@ -695,12 +734,16 @@ void print_debug_output(void) { for(int i = 0; i < 3; i++ ) { mt_pwm_phase_data_t *data = &g_adcs_data.mt_pwm_data[i]; - chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", +// chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", +// i, +// data->current_feedback_measurement_uA, +// (uint32_t) (data->current_feedback_measurement_V * 1000), +// (uint32_t) (data->current_feedback_min_V * 1000), +// (uint32_t) (data->current_feedback_max_V * 1000)); + chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV\r\n", i, data->current_feedback_measurement_uA, - (uint32_t) (data->current_feedback_measurement_V * 1000), - (uint32_t) (data->current_feedback_min_V * 1000), - (uint32_t) (data->current_feedback_max_V * 1000)); + (uint32_t) (data->current_feedback_measurement_V * 1000)); } @@ -709,6 +752,7 @@ void print_debug_output(void) { } } +#if 0 void read_adc_current(void) { /** * 12 bit ADC readings from 0-4096 @@ -790,10 +834,55 @@ void read_adc_current(void) { print_debug_output(); } +#endif void process_magnetorquer(void) { +// chprintf(DEBUG_SD, "ADCD1.state = %u\r\n", ADCD1.state); + + if( ADCD1.state == ADC_STOP || ADCD1.state == ADC_UNINIT ) { + adcStart(&ADCD1, NULL); + } + + if( ADCD1.state == ADC_COMPLETE ) { + adcStopConversion(&ADCD1); + } + + if( ADCD1.state == ADC_READY ) { + uint32_t channel_sums[MY_SAMPLING_NUMBER]; + memset(channel_sums, 0, sizeof(channel_sums)); + + for(int s = 0; s < MY_SAMPLING_NUMBER; s++) { +// chprintf(DEBUG_SD, " adc_sample_buff[%d] = [", s); + + for (int adc_chan_idx = 1; adc_chan_idx < ADC_NUM_CHANNELS; adc_chan_idx++) { + const int idx = (s * ADC_NUM_CHANNELS) + adc_chan_idx; + channel_sums[adc_chan_idx] += adc_sample_buff[idx]; +// chprintf(DEBUG_SD, "%d, ", adc_sample_buff[idx]); + } +// chprintf(DEBUG_SD, "]\r\n"); + } + + for (int adc_chan_idx = 1; adc_chan_idx < ADC_NUM_CHANNELS; adc_chan_idx++) { + const uint32_t channel_avg = channel_sums[adc_chan_idx] / MY_SAMPLING_NUMBER; + measured_i_sense_voltage[adc_chan_idx] = (((float) channel_avg) / 4096.0) * 3.3; +// chprintf(DEBUG_SD, "avg = %u, voltage[%d] = %u mV\r\n", channel_avg, adc_chan_idx, ((uint32_t) (measured_i_sense_voltage[adc_chan_idx] * 1000.0))); + + g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; + g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); +// g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; +// g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; + } + +// chprintf(DEBUG_SD, "Staring conversion...\r\n"); chThdSleepMilliseconds(10); + adcStartConversion(&ADCD1, &adcgrpcfg_tim1_trigo, adc_sample_buff, ADC_BUFF_SIZE);//Starts an ADC conversion. + } + +// chprintf(DEBUG_SD, "adc_conv_cb#=%u, ", adc_conversion_complete_callback_count); +// chprintf(DEBUG_SD, "adc_error_cb#=%u\r\n", adc_conversion_error_callback_count); + set_pwm_output(); - read_adc_current(); + print_debug_output(); +// read_adc_current(); } @@ -880,9 +969,9 @@ THD_FUNCTION(adcs, arg) init_magnetorquer(); /* Activates the ADC1 driver. */ - adcStart(&ADCD1, NULL); - adcStartConversion(&ADCD1, &adcgrpcfg, adc_sample_buff, ADC_BUFF_SIZE);//Starts an ADC continuous conversion. - chprintf(DEBUG_SD, "done with adcStartConversion()...\r\n"); +// adcStart(&ADCD1, NULL); +// adcStartConversion(&ADCD1, &adcgrpcfg, adc_sample_buff, ADC_BUFF_SIZE);//Starts an ADC continuous conversion. +// chprintf(DEBUG_SD, "done with adcStartConversion()...\r\n"); OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 3000;//FIXME remove this, this is just for testing @@ -945,12 +1034,12 @@ THD_FUNCTION(adcs, arg) for (uint32_t iterations = 0; !chThdShouldTerminateX(); iterations++) { dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); - if( update_imu_data() ) { - CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); - } else { - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); - } - update_endcard_magnetometer_readings(); +// if( update_imu_data() ) { +// CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); +// } else { +// CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); +// } +// update_endcard_magnetometer_readings(); process_magnetorquer(); handle_can_open_data(); From 6e11c56edf4f2d7555ad56885acf33da216b47e0 Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 8 Mar 2023 21:30:48 -0800 Subject: [PATCH 11/20] Changed CANOpen output data type to uint32_t --- src/f0/app_adcs/source/ObjDict/app.eds | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds index 804a452b..88ef6335 100644 --- a/src/f0/app_adcs/source/ObjDict/app.eds +++ b/src/f0/app_adcs/source/ObjDict/app.eds @@ -5083,7 +5083,7 @@ DefaultValue=0x03 ParameterName=set magnetorquer X Current ObjectType=0x07 ;StorageLocation=RAM -DataType=0x0003 +DataType=0x0004 AccessType=rw DefaultValue=0 PDOMapping=1 @@ -5092,7 +5092,7 @@ PDOMapping=1 ParameterName=set magnetorquer Y Current ObjectType=0x07 ;StorageLocation=RAM -DataType=0x0003 +DataType=0x0004 AccessType=rw DefaultValue=0 PDOMapping=1 @@ -5101,7 +5101,7 @@ PDOMapping=1 ParameterName=set magnetorquer Z Current ObjectType=0x07 ;StorageLocation=RAM -DataType=0x0003 +DataType=0x0004 AccessType=rw DefaultValue=0 PDOMapping=1 From 3ef72aae42151e0250433a5ca213611c044d4d07 Mon Sep 17 00:00:00 2001 From: DC Date: Fri, 10 Mar 2023 19:51:32 -0800 Subject: [PATCH 12/20] Minor code cleanup --- common/mmc5883ma.c | 6 ++++-- src/f0/app_adcs/source/adcs.c | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/common/mmc5883ma.c b/common/mmc5883ma.c index b233d9cb..a872b802 100644 --- a/common/mmc5883ma.c +++ b/common/mmc5883ma.c @@ -216,7 +216,7 @@ bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { //Probe I2C bus to see what's attached if( ! mmc5883maI2CReadRegister3(devp->config->i2cp, MMC5883MA_I2C_ADDRESS_READ, MMC5883MA_AD_PRDCT_ID_1, &mmc_product_id_readback) ) { - chprintf(DEBUG_SD, "Failed to read product code from MMC5883MA chip\r\n"); + chprintf(DEBUG_SD, "Failed to read product code from MMC5883MA chip, i2c comm failure\r\n"); } else { if( mmc_product_id_readback == MMC5883MA_EXPECTED_PRODUCT_CODE ) { chprintf(DEBUG_SD, "Successfully read product code from MMC5883MA (good), 0x%X\r\n", mmc_product_id_readback); @@ -226,7 +226,6 @@ bool mmc5883maStart(MMC5883MADriver *devp, const MMC5883MAConfig *config) { } } - if( found_mmc5883ma_flag ) { mmc5883maSoftReset(devp); @@ -279,6 +278,9 @@ void mmc5883maStop(MMC5883MADriver *devp) { i2cStart(devp->config->i2cp, devp->config->i2ccfg); #endif /* MMC5883MA_SHARED_I2C */ + //The MMC will be in low power mode after being reset + mmc5883maSoftReset(devp); + i2cStop(devp->config->i2cp); #if MMC5883MA_SHARED_I2C i2cReleaseBus(devp->config->i2cp); diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 2929a037..42dd5490 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -44,6 +44,14 @@ static adcsample_t adc_sample_buff[ADC_BUFF_SIZE]; static float measured_i_sense_voltage[ADC_NUM_CHANNELS];; +/* + * Context references for ADC conversion triggered by TIM1 + * http://forum.chibios.org/viewtopic.php?t=2254 + * https://forum.chibios.org/viewtopic.php?t=6036 + * https://forum.chibios.org/viewtopic.php?t=2093 + */ + + //ADC_SMPR_SMP_1P5 //ADC_SMPR_SMP_7P5 //ADC_SMPR_SMP_13P5 From cd25a776656f0d918175c5db3d3eeeaea1827e3d Mon Sep 17 00:00:00 2001 From: DC Date: Fri, 10 Mar 2023 20:06:18 -0800 Subject: [PATCH 13/20] Re-enabled general functionality in ADCS code --- src/f0/app_adcs/source/adcs.c | 170 ++++------------------------------ 1 file changed, 20 insertions(+), 150 deletions(-) diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 42dd5490..9d9744b2 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -39,8 +39,6 @@ #define MY_SAMPLING_NUMBER 32 #define ADC_BUFF_SIZE (ADC_NUM_CHANNELS * MY_SAMPLING_NUMBER) static adcsample_t adc_sample_buff[ADC_BUFF_SIZE]; -//static adcsample_t adc_temp_sample_buff[ADC_BUFF_SIZE]; - static float measured_i_sense_voltage[ADC_NUM_CHANNELS];; @@ -58,32 +56,21 @@ static float measured_i_sense_voltage[ADC_NUM_CHANNELS];; //ADC_SMPR_SMP_71P5 //ADC_SMPR_SMP_239P5 -//static const ADCConversionGroup adcgrpcfg = { -// .circular = TRUE, /* Enables the circular buffer mode for the group. */ -// num_channels = ADC_NUM_CHANNELS, -// .end_cb = NULL, -// .error_cb = NULL, -// .cfgr1 = ADC_CFGR1_CONT | ADC_CFGR1_RES_12BIT, /* CFGR1 */ -// .tr = ADC_TR(0, 0), /* TR */ -// .smpr = ADC_SMPR_SMP_71P5, /* SMPR */ -// .chselr = ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL7 /* CHSELR, note, for continuous conversion mode you must configure 1 or an even number of channels */ -//}; - -volatile uint32_t adc_conversion_complete_callback_count = 0; -void adc_conversion_complete_callback(ADCDriver *adcp) { - adc_conversion_complete_callback_count++; -} -volatile uint32_t adc_conversion_error_callback_count = 0; -void adc_conversion_error_callback(ADCDriver *adcp, adcerror_t err) { - adc_conversion_error_callback_count++; -} +//volatile uint32_t adc_conversion_complete_callback_count = 0; +//void adc_conversion_complete_callback(ADCDriver *adcp) { +// adc_conversion_complete_callback_count++; +//} + +/** + * This ADC is configured to trigger a single batch of ADC conversions based on the risigion edge of TRIGO from TIM1 + */ static const ADCConversionGroup adcgrpcfg_tim1_trigo = { .circular = FALSE, /* Enables the circular buffer mode for the group. */ .num_channels = ADC_NUM_CHANNELS, - .end_cb = adc_conversion_complete_callback, - .error_cb = adc_conversion_error_callback, + .end_cb = NULL, + .error_cb = NULL, .cfgr1 = ADC_CFGR1_RES_12BIT | ADC_CFGR1_EXTEN_RISING, /* CFGR1 */ .tr = ADC_TR(0, 0), /* TR */ .smpr = ADC_SMPR_SMP_1P5, /* SMPR */ @@ -111,6 +98,9 @@ static const DACConfig dac_config = { //PB15 #define MT_Z_PWM_PWM_CHANNEL (3 - 1) +/** + * This PWM block is configured to enable the TRIGO output to start an ADC conversion batch when the PWM edge goes high. + */ static PWMConfig pwmcfg_1_trigo = { .frequency = PWM_TIMER_FREQ, .period = PWM_PERIOD, @@ -128,23 +118,6 @@ static PWMConfig pwmcfg_1_trigo = { .dier = 0,//DIER }; -//static PWMConfig pwmcfg_1 = { -// .frequency = PWM_TIMER_FREQ, -// .period = PWM_PERIOD, -// .callback = NULL, -// .channels = { -// {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, -// {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, -// {PWM_OUTPUT_ACTIVE_LOW | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, -// {PWM_OUTPUT_ACTIVE_HIGH, NULL} -// }, -// .cr2 = 0,//CR2 -// #if STM32_PWM_USE_ADVANCED -// .bdtr = 0, //BDTR -// #endif -// .dier = 0,//DIER -//}; - typedef enum { @@ -194,8 +167,6 @@ typedef struct { int32_t current_pwm_percent; //0-10000 int32_t target_pwm_percent; //Negative values indicate the phase should be inverted -// float current_feedback_min_V; -// float current_feedback_max_V; float current_feedback_measurement_V; //Volts, Note: this is the average voltage while the PWM output is high. int32_t current_feedback_measurement_uA; //uA. Note: this is the average current flowing while the PWM output is high. It does not represent overall average current. @@ -262,9 +233,6 @@ const char* end_card_magnetometoer_t_to_str(const end_card_magnetometoer_t ecm) } - - - int32_t saturate_int32_t(const int32_t v, const int32_t min, const int32_t max) { if (v >= max) return (max); @@ -524,7 +492,7 @@ bool select_magnetometer(const end_card_magnetometoer_t ecm) { } // return(ret1); //fixme remove this -// return(ret2); //FIXME remove this + return(ret2); //FIXME remove this if( ! (ret1 && ret2) ) { chprintf(DEBUG_SD, "ERROR: Failed to select magnetometers ret1=%d, ret2=%d\r\n", ret1, ret2); @@ -675,9 +643,6 @@ void set_pwm_output(void) { } - - - int32_t current_feedback_convert_volts_to_microamps(const float volts) { //Based on the circuit design, this should nominally be 3V/amp. //This calculation seems to be within 5%-10% accurate when compared to in line bench DMM readings. @@ -742,12 +707,6 @@ void print_debug_output(void) { for(int i = 0; i < 3; i++ ) { mt_pwm_phase_data_t *data = &g_adcs_data.mt_pwm_data[i]; -// chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV, [%u - %u mV]\r\n", -// i, -// data->current_feedback_measurement_uA, -// (uint32_t) (data->current_feedback_measurement_V * 1000), -// (uint32_t) (data->current_feedback_min_V * 1000), -// (uint32_t) (data->current_feedback_max_V * 1000)); chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %d uA, %u mV\r\n", i, data->current_feedback_measurement_uA, @@ -760,89 +719,6 @@ void print_debug_output(void) { } } -#if 0 -void read_adc_current(void) { - /** - * 12 bit ADC readings from 0-4096 - * Input voltage calculated as (/4096)*3.3 - */ - - /* Making mean of sampled values.*/ - memcpy(adc_temp_sample_buff, adc_sample_buff, sizeof(adc_sample_buff)); - -// for(int s = 0; s < MY_SAMPLING_NUMBER; s++) { -// chprintf(DEBUG_SD, " adc_sample_buff[%d] = [", s); -// for (int i = 0; i < ADC_NUM_CHANNELS; i++) { -// chprintf(DEBUG_SD, "%d, ", adc_temp_sample_buff[i]); -// } -// chprintf(DEBUG_SD, "]\r\n"); -// } - - - - -#if ADC_NUM_CHANNELS == 4 - //Skip the first channel cuz we don't care about the data, just need 4 channels so the underlying ADC driver would actually work. - int start_chan_idx = 1; -#else -#error "Handle this" -#endif - - for (int adc_chan_idx = start_chan_idx; adc_chan_idx < ADC_NUM_CHANNELS; adc_chan_idx++) { - const float low_threshold_volts = 0.08; - const uint32_t low_threshold_adc_reading = (4096.0 * low_threshold_volts); - - uint32_t number_samples_over_threshold = 0; - uint32_t adc_reading_sum = 0; - uint32_t min_adc_value = 4096; - uint32_t max_adc_value = 0; - for(int sample_num = 0; sample_num < MY_SAMPLING_NUMBER; sample_num++) { - const uint32_t array_index = (sample_num * ADC_NUM_CHANNELS) + adc_chan_idx; - const uint16_t adc_reading_value = adc_temp_sample_buff[array_index]; - - if( adc_reading_value > low_threshold_adc_reading ) { - number_samples_over_threshold++; - adc_reading_sum += adc_reading_value; - - min_adc_value = MIN(min_adc_value, adc_reading_value); - max_adc_value = MAX(max_adc_value, adc_reading_value); - } - } - - if( number_samples_over_threshold == 0 ) { - min_adc_value = 0; - } - - float adc_reading_mean_voltage = 0; - if( number_samples_over_threshold > 5 ) { - adc_reading_mean_voltage = 3.3 * ((float) adc_reading_sum / ((float) number_samples_over_threshold)) / 4096.0; - } - - const uint32_t min_mV = (1000.0 * 3.3 * ((float) min_adc_value) / 4096.0); - const uint32_t max_mV = (1000.0 * 3.3 * ((float) max_adc_value) / 4096.0); - - measured_i_sense_voltage[adc_chan_idx] = adc_reading_mean_voltage; -// const uint32_t millivolts = adc_reading_mean_voltage * 1000.0; - -// if( do_print ) { -// chprintf(DEBUG_SD, " measured_i_sense_voltage[%d] = %u mV, %u, [%u - %u mV]\r\n", -// adc_chan_idx, millivolts, number_samples_over_threshold, min_mV, max_mV); -// } - - if( adc_chan_idx >= 1 && adc_chan_idx <= 3 ) { - g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; - g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); - g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; - g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; - } - } - - - //Compute current sense data - print_debug_output(); - -} -#endif void process_magnetorquer(void) { // chprintf(DEBUG_SD, "ADCD1.state = %u\r\n", ADCD1.state); @@ -890,7 +766,6 @@ void process_magnetorquer(void) { set_pwm_output(); print_debug_output(); -// read_adc_current(); } @@ -976,11 +851,6 @@ THD_FUNCTION(adcs, arg) init_end_cap_magnetometers(); init_magnetorquer(); - /* Activates the ADC1 driver. */ -// adcStart(&ADCD1, NULL); -// adcStartConversion(&ADCD1, &adcgrpcfg, adc_sample_buff, ADC_BUFF_SIZE);//Starts an ADC continuous conversion. -// chprintf(DEBUG_SD, "done with adcStartConversion()...\r\n"); - OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 3000;//FIXME remove this, this is just for testing OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = 4000; @@ -1042,12 +912,12 @@ THD_FUNCTION(adcs, arg) for (uint32_t iterations = 0; !chThdShouldTerminateX(); iterations++) { dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); -// if( update_imu_data() ) { -// CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); -// } else { -// CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); -// } -// update_endcard_magnetometer_readings(); + if( update_imu_data() ) { + CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); + } else { + CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); + } + update_endcard_magnetometer_readings(); process_magnetorquer(); handle_can_open_data(); From cc2cf2106a43ddbae024e417c5f47072e9983229 Mon Sep 17 00:00:00 2001 From: DC Date: Sun, 26 Mar 2023 15:04:54 -0700 Subject: [PATCH 14/20] Interum commit of ACDS code working with CANOpen I/O --- src/f0/app_adcs/read_canopen_data.sh | 18 + src/f0/app_adcs/source/ObjDict/OD.c | 824 ++++++++++++------------- src/f0/app_adcs/source/ObjDict/OD.h | 12 +- src/f0/app_adcs/source/ObjDict/app.eds | 6 +- src/f0/app_adcs/source/adcs.c | 70 ++- 5 files changed, 491 insertions(+), 439 deletions(-) create mode 100755 src/f0/app_adcs/read_canopen_data.sh diff --git a/src/f0/app_adcs/read_canopen_data.sh b/src/f0/app_adcs/read_canopen_data.sh new file mode 100755 index 00000000..1b757030 --- /dev/null +++ b/src/f0/app_adcs/read_canopen_data.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +SDO_SCRIPT=../../../../oresat-olaf/olaf/scripts/sdo_transfer.py + +echo "Set Magnetorquer Current (uA * 10)" +$SDO_SCRIPT can0 0x7C r 0x6007 0x1 i32 +$SDO_SCRIPT can0 0x7C r 0x6007 0x2 i32 +$SDO_SCRIPT can0 0x7C r 0x6007 0x3 i32 +echo "PWM Duty Cycles" +$SDO_SCRIPT can0 0x7C r 0x6007 0x4 i16 +$SDO_SCRIPT can0 0x7C r 0x6007 0x5 i16 +$SDO_SCRIPT can0 0x7C r 0x6007 0x6 i16 +echo "Read Magnetorquer Current (uA)" +$SDO_SCRIPT can0 0x7C r 0x6007 0x7 i32 +$SDO_SCRIPT can0 0x7C r 0x6007 0x8 i32 +$SDO_SCRIPT can0 0x7C r 0x6007 0x9 i32 + + diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c index 4297cbe4..4b9dce36 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.c +++ b/src/f0/app_adcs/source/ObjDict/OD.c @@ -8,9 +8,9 @@ OD_ATTR_ROM OD_ROM_t OD_ROM = { .x1000_deviceType = 0x00000000, - .x1008_manufacturerDeviceName = "OreSat Node", - .x1009_manufacturerHardwareVersion = "0.0", - .x100A_manufacturerSoftwareVersion = "0.0.0", + .x1008_manufacturerDeviceName = {'O', 'r', 'e', 'S', 'a', 't', ' ', 'N', 'o', 'd', 'e', 0}, + .x1009_manufacturerHardwareVersion = {'0', '.', '0', 0}, + .x100A_manufacturerSoftwareVersion = {'0', '.', '0', '.', '0', 0}, .x1018_identity = { .highestSubIndexSupported = 0x04, .vendorID = 0x00000000, @@ -837,7 +837,7 @@ typedef struct { static CO_PROGMEM ODObjs_t ODObjs = { .o_1000_deviceType = { .dataOrig = &OD_ROM.x1000_deviceType, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, .o_1001_errorRegister = { @@ -847,30 +847,30 @@ static CO_PROGMEM ODObjs_t ODObjs = { }, .o_1002_manufacturerStatusRegister = { .dataOrig = &OD_RAM.x1002_manufacturerStatusRegister, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 4 }, .o_1003_preDefinedErrorField = { .dataOrig0 = &OD_RAM.x1003_preDefinedErrorField_sub0, .dataOrig = &OD_RAM.x1003_preDefinedErrorField[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t) + .dataElementSizeof = sizeof(uint32_t), }, .o_1005_COB_ID_SYNC_Message = { .dataOrig = &OD_PERSIST_COMM.x1005_COB_ID_SYNC_Message, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, .o_1006_communicationCyclePeriod = { .dataOrig = &OD_PERSIST_COMM.x1006_communicationCyclePeriod, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, .o_1007_synchronousWindowLength = { .dataOrig = &OD_PERSIST_COMM.x1007_synchronousWindowLength, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, .o_1008_manufacturerDeviceName = { @@ -892,39 +892,39 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataOrig0 = &OD_RAM.x1010_storeParameters_sub0, .dataOrig = &OD_RAM.x1010_storeParameters[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t) + .dataElementSizeof = sizeof(uint32_t), }, .o_1011_restoreDefaultParameters = { .dataOrig0 = &OD_RAM.x1011_restoreDefaultParameters_sub0, .dataOrig = &OD_RAM.x1011_restoreDefaultParameters[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t) + .dataElementSizeof = sizeof(uint32_t), }, .o_1014_COB_ID_EMCY = { .dataOrig = &OD_PERSIST_COMM.x1014_COB_ID_EMCY, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, .o_1015_inhibitTimeEMCY = { .dataOrig = &OD_PERSIST_COMM.x1015_inhibitTimeEMCY, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, .o_1016_consumerHeartbeatTime = { .dataOrig0 = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime_sub0, .dataOrig = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t) + .dataElementSizeof = sizeof(uint32_t), }, .o_1017_producerHeartbeatTime = { .dataOrig = &OD_PERSIST_COMM.x1017_producerHeartbeatTime, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, .o_1018_identity = { @@ -937,25 +937,25 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_ROM.x1018_identity.vendorID, .subIndex = 1, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_ROM.x1018_identity.productCode, .subIndex = 2, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_ROM.x1018_identity.revisionNumber, .subIndex = 3, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_ROM.x1018_identity.serialNumber, .subIndex = 4, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, }, @@ -970,7 +970,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { .attribute0 = ODA_SDO_R, .attribute = ODA_SDO_RW, .dataElementLength = 1, - .dataElementSizeof = sizeof(uint8_t) + .dataElementSizeof = sizeof(uint8_t), }, .o_1200_SDO_ServerParameter = { { @@ -982,13 +982,13 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ClientToServer, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ServerToClient, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 4 }, { @@ -1008,7 +1008,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1020,7 +1020,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1034,7 +1034,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1046,7 +1046,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1060,7 +1060,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1072,7 +1072,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1086,7 +1086,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1098,7 +1098,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1112,7 +1112,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1124,7 +1124,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1138,7 +1138,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1150,7 +1150,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1164,7 +1164,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1176,7 +1176,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1190,7 +1190,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1202,7 +1202,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1216,7 +1216,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1228,7 +1228,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1242,7 +1242,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1254,7 +1254,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1268,7 +1268,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1280,7 +1280,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1294,7 +1294,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1306,7 +1306,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1320,7 +1320,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1332,7 +1332,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1346,7 +1346,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1358,7 +1358,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1372,7 +1372,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1384,7 +1384,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1398,7 +1398,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -1410,7 +1410,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, }, @@ -1424,49 +1424,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1480,49 +1480,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1536,49 +1536,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1592,49 +1592,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1648,49 +1648,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1704,49 +1704,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1760,49 +1760,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1816,49 +1816,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1872,49 +1872,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1928,49 +1928,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -1984,49 +1984,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -2040,49 +2040,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -2096,49 +2096,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -2152,49 +2152,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -2208,49 +2208,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -2264,49 +2264,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -2320,7 +2320,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2332,7 +2332,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2344,7 +2344,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2364,7 +2364,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2376,7 +2376,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2388,7 +2388,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2408,7 +2408,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2420,7 +2420,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2432,7 +2432,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2452,7 +2452,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2464,7 +2464,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2476,7 +2476,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2496,7 +2496,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2508,7 +2508,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2520,7 +2520,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2540,7 +2540,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2552,7 +2552,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2564,7 +2564,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2584,7 +2584,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2596,7 +2596,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2608,7 +2608,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2628,7 +2628,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2640,7 +2640,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2652,7 +2652,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2672,7 +2672,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2684,7 +2684,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2696,7 +2696,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2716,7 +2716,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2728,7 +2728,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2740,7 +2740,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2760,7 +2760,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2772,7 +2772,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2784,7 +2784,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2804,7 +2804,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2816,7 +2816,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2828,7 +2828,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2848,7 +2848,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2860,7 +2860,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2872,7 +2872,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2892,7 +2892,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2904,7 +2904,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2916,7 +2916,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2936,7 +2936,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2948,7 +2948,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2960,7 +2960,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -2980,7 +2980,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { @@ -2992,7 +2992,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.inhibitTime, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -3004,7 +3004,7 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.eventTimer, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 2 }, { @@ -3024,49 +3024,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3080,49 +3080,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3136,49 +3136,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3192,49 +3192,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3248,49 +3248,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3304,49 +3304,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3360,49 +3360,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3416,49 +3416,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3472,49 +3472,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3528,49 +3528,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3584,49 +3584,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3640,49 +3640,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3696,49 +3696,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3752,49 +3752,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3808,49 +3808,49 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, @@ -3864,55 +3864,55 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_1, .subIndex = 1, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_2, .subIndex = 2, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_3, .subIndex = 3, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_4, .subIndex = 4, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_5, .subIndex = 5, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_6, .subIndex = 6, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_7, .subIndex = 7, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, { .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_8, .subIndex = 8, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, }, .o_1F80_nmtstartup = { .dataOrig = &OD_PERSIST_COMM.x1F80_nmtstartup, - .attribute = ODA_SDO_RW, + .attribute = ODA_SDO_RW | ODA_MB, .dataLength = 4 }, .o_2000_BUS_Management = { @@ -3961,9 +3961,9 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataOrig0 = &OD_RAM.x2020_MCU_UniqueDeviceID_sub0, .dataOrig = &OD_RAM.x2020_MCU_UniqueDeviceID[0], .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t) + .dataElementSizeof = sizeof(uint32_t), }, .o_2021_MCU_Calibration = { { @@ -3975,19 +3975,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL1, .subIndex = 1, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL2, .subIndex = 2, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2021_MCU_Calibration.VREFINT_CAL, .subIndex = 3, - .attribute = ODA_SDO_R, + .attribute = ODA_SDO_R | ODA_MB, .dataLength = 2 }, }, @@ -4025,32 +4025,32 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x2022_MCU_Sensors.temperatureRaw, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2022_MCU_Sensors.VREFINT_Raw, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBAT_Raw, .subIndex = 7, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBUSP_CurrentRaw, .subIndex = 8, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, .o_2100_errorStatusBits = { .dataOrig = &OD_RAM.x2100_errorStatusBits[0], .attribute = ODA_SDO_R, - .dataLength = 0 + .dataLength = 10 }, .o_6000_gyroscope = { { @@ -4062,37 +4062,37 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6000_gyroscope.pitchRate, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.yawRate, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.rollRate, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.pitchRateRaw, .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.yawRateRaw, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6000_gyroscope.rollRateRaw, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, @@ -4106,37 +4106,37 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6001_acceleration.accx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accXRaw, .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.accyRaw, .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6001_acceleration.acczRaw, .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, @@ -4155,19 +4155,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, @@ -4181,19 +4181,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, @@ -4207,19 +4207,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, @@ -4233,19 +4233,19 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magx, .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magy, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magz, .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 }, }, @@ -4259,56 +4259,56 @@ static CO_PROGMEM ODObjs_t ODObjs = { { .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO, - .dataLength = 2 + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent, .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO, - .dataLength = 2 + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent, .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_TRPDO, - .dataLength = 2 + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle, .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_TRPDO, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle, .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_TRPDO, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle, .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_TRPDO, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 2 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrent, .subIndex = 7, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 2 + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrent, .subIndex = 8, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 2 + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 }, { .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrent, .subIndex = 9, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 2 + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 }, }, }; diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h index b46bdc36..ea63594f 100644 --- a/src/f0/app_adcs/source/ObjDict/OD.h +++ b/src/f0/app_adcs/source/ObjDict/OD.h @@ -112,15 +112,15 @@ typedef struct { } x6006_magnetometerMZ2; struct { uint8_t highestSubIndexSupported; - int16_t setMagnetorquerXCurrent; - int16_t setMagnetorquerYCurrent; - int16_t setMagnetorquerZCurrent; + int32_t setMagnetorquerXCurrent; + int32_t setMagnetorquerYCurrent; + int32_t setMagnetorquerZCurrent; int16_t magnetorquerXPWM_DutyCycle; int16_t magnetorquerYPWM_DutyCycle; int16_t magnetorquerZPWM_DutyCycle; - int16_t magnetorquerXCurrent; - int16_t magnetorquerYCurrent; - int16_t magnetorquerZCurrent; + int32_t magnetorquerXCurrent; + int32_t magnetorquerYCurrent; + int32_t magnetorquerZCurrent; } x6007_magnetorquer; } OD_RAM_t; diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds index 88ef6335..2e2c4cd9 100644 --- a/src/f0/app_adcs/source/ObjDict/app.eds +++ b/src/f0/app_adcs/source/ObjDict/app.eds @@ -5137,7 +5137,7 @@ PDOMapping=1 ParameterName=magnetorquer X Current ObjectType=0x07 ;StorageLocation=RAM -DataType=0x0003 +DataType=0x0004 AccessType=ro DefaultValue=0 PDOMapping=1 @@ -5146,7 +5146,7 @@ PDOMapping=1 ParameterName=magnetorquer Y Current ObjectType=0x07 ;StorageLocation=RAM -DataType=0x0003 +DataType=0x0004 AccessType=ro DefaultValue=0 PDOMapping=1 @@ -5155,7 +5155,7 @@ PDOMapping=1 ParameterName=magnetorquer Z Current ObjectType=0x07 ;StorageLocation=RAM -DataType=0x0003 +DataType=0x0004 AccessType=ro DefaultValue=0 PDOMapping=1 diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 9d9744b2..86738cc5 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -216,6 +216,18 @@ static const BMI088Config imucfg = { static BMI088Driver imudev; +void CO_errorReportRateLimited(CO_EM_t *em, const uint8_t errorBit, uint16_t errorCode, uint32_t infoCode, systime_t *last_error_time) { + + const systime_t now_time = chVTGetSystemTime(); + if( chTimeDiffX(*last_error_time, now_time) < 10000 ) { + return; + } + *last_error_time = now_time; + + CO_errorReport(em, errorBit, errorCode, infoCode); +} + + const char* end_card_magnetometoer_t_to_str(const end_card_magnetometoer_t ecm) { switch (ecm) { case EC_MAG_0_MZ_1: @@ -433,7 +445,8 @@ bool connect_endcard_ltc4305_geneic(const uint8_t ltc4304_i2c_address, const boo bool connect_endcard_ltc4305_plus_z(const bool conn_1_enable, const bool conn_2_enable) { bool ret = connect_endcard_ltc4305_geneic(LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE, conn_1_enable, conn_2_enable); if( ! ret ) { - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_LTZ_PLUS_Z_ENDCAP_FAILURE); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_LTZ_PLUS_Z_ENDCAP_FAILURE, &last_report_time); } //FIXME should this error be cleard if/when comms works again on a subsequent call? return(ret); @@ -442,7 +455,8 @@ bool connect_endcard_ltc4305_plus_z(const bool conn_1_enable, const bool conn_2_ bool connect_endcard_ltc4305_minus_z(const bool conn_1_enable, const bool conn_2_enable) { bool ret = connect_endcard_ltc4305_geneic(LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE, conn_1_enable, conn_2_enable); if( ! ret ) { - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_LTZ_MINUS_Z_ENDCAP_FAILURE); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_LTZ_MINUS_Z_ENDCAP_FAILURE, &last_report_time); } //FIXME should this error be cleard if/when comms works again on a subsequent call? return(ret); @@ -529,7 +543,8 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) { r = true; } else { //FIXME should this error be cleard if/when comms works again on a subsequent call? - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_COMM_FAILURE + ecm); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_COMM_FAILURE + ecm, &last_report_time); } @@ -593,7 +608,8 @@ bool init_end_cap_magnetometers(void) { chprintf(DEBUG_SD, "Failed to start MMC4883MA number %u %s\r\n", ecm, end_card_magnetometoer_t_to_str(ecm)); ret = false; //FIXME should this error be cleard if/when comms works again on a subsequent call? - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_INIT_FAILURE + ecm); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_MAGNETOMETER_0_INIT_FAILURE + ecm, &last_report_time); } } } @@ -625,8 +641,7 @@ void set_pwm_output(void) { if( g_adcs_data.mt_pwm_data[i].current_pwm_percent != g_adcs_data.mt_pwm_data[i].target_pwm_percent ) { chprintf(DEBUG_SD, "target_pwm_percent = %u\r\n", g_adcs_data.mt_pwm_data[i].target_pwm_percent); - const int32_t pwm_val = ABS(g_adcs_data.mt_pwm_data[i].target_pwm_percent); - pwmEnableChannel(&PWMD1, g_adcs_data.mt_pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, pwm_val)); + pwmDisableChannel(&PWMD1, g_adcs_data.mt_pwm_data[i].pwm_channel_number); if( g_adcs_data.mt_pwm_data[i].target_pwm_percent < 0 ) { palSetPad(GPIOB, g_adcs_data.mt_pwm_data[i].phase_gpio_pin_number); @@ -634,6 +649,9 @@ void set_pwm_output(void) { palClearPad(GPIOB, g_adcs_data.mt_pwm_data[i].phase_gpio_pin_number); } + const int32_t pwm_val = ABS(g_adcs_data.mt_pwm_data[i].target_pwm_percent); + pwmEnableChannel(&PWMD1, g_adcs_data.mt_pwm_data[i].pwm_channel_number, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, pwm_val)); + g_adcs_data.mt_pwm_data[i].current_pwm_percent = g_adcs_data.mt_pwm_data[i].target_pwm_percent; g_adcs_data.mt_pwm_data[i].last_update_time = now_time; } @@ -751,10 +769,21 @@ void process_magnetorquer(void) { measured_i_sense_voltage[adc_chan_idx] = (((float) channel_avg) / 4096.0) * 3.3; // chprintf(DEBUG_SD, "avg = %u, voltage[%d] = %u mV\r\n", channel_avg, adc_chan_idx, ((uint32_t) (measured_i_sense_voltage[adc_chan_idx] * 1000.0))); - g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; - g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); -// g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_min_V = min_mV / 1000.0; -// g_adcs_data.mt_pwm_data[adc_chan_idx - 1].current_feedback_max_V = max_mV / 1000.0; + uint8_t dest_mt_idx = 0; + if( adc_chan_idx == 1 ) { + dest_mt_idx = 2; + } else if( adc_chan_idx == 2 ) { + dest_mt_idx = 1; + } else if( adc_chan_idx == 3 ) { + dest_mt_idx = 0; + } + + g_adcs_data.mt_pwm_data[dest_mt_idx].current_feedback_measurement_V = measured_i_sense_voltage[adc_chan_idx]; + g_adcs_data.mt_pwm_data[dest_mt_idx].current_feedback_measurement_uA = current_feedback_convert_volts_to_microamps(measured_i_sense_voltage[adc_chan_idx]); + if( g_adcs_data.mt_pwm_data[dest_mt_idx].current_pwm_percent < 0 ) { + g_adcs_data.mt_pwm_data[dest_mt_idx].current_feedback_measurement_uA *= -1; + } + } // chprintf(DEBUG_SD, "Staring conversion...\r\n"); chThdSleepMilliseconds(10); @@ -852,9 +881,9 @@ THD_FUNCTION(adcs, arg) init_magnetorquer(); - OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 3000;//FIXME remove this, this is just for testing - OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = 4000; - OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = 5000; +// OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = 300;//FIXME remove this, this is just for testing +// OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = 400; +// OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = 500; bmi088ObjectInit(&imudev); @@ -868,7 +897,8 @@ THD_FUNCTION(adcs, arg) chprintf(DEBUG_SD, "BMI088 state = %u, error_flags=0x%X\r\n", imudev.state, imudev.error_flags); if( imudev.state != BMI088_READY ) { chprintf(DEBUG_SD, "Failed to start IMU driver...\r\n"); - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_IMU_INIT_FAILURE); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_IMU_INIT_FAILURE, &last_report_time); } else { uint8_t bmi088_chip_id = 0; if( (r = bmi088ReadAccelerometerChipId(&imudev, &bmi088_chip_id)) == MSG_OK ) { @@ -879,7 +909,8 @@ THD_FUNCTION(adcs, arg) if( bmi088_chip_id != BMI088_ACC_CHIP_ID_EXPECTED ) { chprintf(DEBUG_SD, "BMI088 ACCEL FAIL: didnt find BMI088!\r\n"); - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH, &last_report_time); } else { chprintf(DEBUG_SD, "BMI088 ACCEL SUCCESS: found BMI088!\r\n"); } @@ -901,7 +932,8 @@ THD_FUNCTION(adcs, arg) if( bmi088_gyro_chip_id != BMI088_GYR_CHIP_ID_EXPECTED ) { chprintf(DEBUG_SD, "BMI088 GYRO FAIL: didnt find BMI088!\r\n"); - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_GYRO_CHIP_ID_MISMATCH, &last_report_time); } else { chprintf(DEBUG_SD, "BMI088 GYRO SUCCESS: found BMI088!\r\n"); } @@ -913,9 +945,11 @@ THD_FUNCTION(adcs, arg) dbgprintf("IMU loop iteration %u system time %u\r\n", iterations, (uint32_t)chVTGetSystemTime()); if( update_imu_data() ) { - CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); + //FIXME re-enable this??? with rate limits??? +// CO_errorReset(CO->em, CO_EM_GENERIC_ERROR, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); } else { - CO_errorReport(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE); + static systime_t last_report_time = 0; + CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_COMMUNICATION, ADCS_OD_ERROR_INFO_CODE_IMU_DATA_UPDATE_FAILURE, &last_report_time); } update_endcard_magnetometer_readings(); process_magnetorquer(); From ad6c4a24c3533fc777ab5715cd326242112f40ff Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 8 Nov 2023 20:00:14 -0800 Subject: [PATCH 15/20] Modified CAN node ID and expected chip ID for the BMI090 --- common/include/bmi088.h | 1 + common/include/ltc4305.h | 2 +- src/f0/app_adcs/main.c | 3 ++- src/f0/app_adcs/source/adcs.c | 8 ++++---- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/common/include/bmi088.h b/common/include/bmi088.h index fc03fa67..ec2f105b 100644 --- a/common/include/bmi088.h +++ b/common/include/bmi088.h @@ -445,6 +445,7 @@ #define BMI088_ACC_CHIP_ID_Msk (0xFFU << BMI088_ACC_CHIP_ID_Pos) #define BMI088_ACC_CHIP_ID BMI088_ACC_CHIP_ID_Msk #define BMI088_ACC_CHIP_ID_EXPECTED (0x1E) +#define BMI090L_ACC_CHIP_ID_EXPECTED (0x1A) /** @} */ /** diff --git a/common/include/ltc4305.h b/common/include/ltc4305.h index 25dd5554..bc3e9ee4 100644 --- a/common/include/ltc4305.h +++ b/common/include/ltc4305.h @@ -1,7 +1,7 @@ #ifndef COMMON_INCLUDE_LTC4305_H_ #define COMMON_INCLUDE_LTC4305_H_ -#define LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE (0xA8 >> 1) +#define LTC_4035_MINUSZ_CARD_I2C_ADDRESS_WRITE (0x94 >> 1) #define LTC_4035_PLUSZ_CARD_I2C_ADDRESS_WRITE (0x88 >> 1) bool ltc4305_set_connections(I2CDriver *i2cp, const uint8_t i2c_addr, const bool enable_i2c_bus_1, const bool enable_i2c_bus_2); diff --git a/src/f0/app_adcs/main.c b/src/f0/app_adcs/main.c index 7e35f4f9..bcf6fd23 100644 --- a/src/f0/app_adcs/main.c +++ b/src/f0/app_adcs/main.c @@ -42,9 +42,10 @@ static thread_descriptor_t adcs_desc = { .arg = NULL }; +#define ORESAT_ACS_NODE_ID 0x38 static oresat_config_t oresat_conf = { .cand = &CAND1, - .node_id = ORESAT_DEFAULT_ID, + .node_id = ORESAT_ACS_NODE_ID, //ORESAT_DEFAULT_ID, .bitrate = ORESAT_DEFAULT_BITRATE, }; diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 86738cc5..23815f0a 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -902,13 +902,13 @@ THD_FUNCTION(adcs, arg) } else { uint8_t bmi088_chip_id = 0; if( (r = bmi088ReadAccelerometerChipId(&imudev, &bmi088_chip_id)) == MSG_OK ) { - chprintf(DEBUG_SD, "BMI088 accelerometer chip ID is 0x%X, expected to be 0x%X\r\n", bmi088_chip_id, BMI088_ACC_CHIP_ID_EXPECTED); + chprintf(DEBUG_SD, "BMI088 accelerometer chip ID is 0x%X, expected to be (0x%X or 0x%X)\r\n", bmi088_chip_id, BMI088_ACC_CHIP_ID_EXPECTED, BMI090L_ACC_CHIP_ID_EXPECTED); } else { - chprintf(DEBUG_SD, "Failed to read accl chip ID from BMI088 ACCEL, r = %d\r\n", r); + chprintf(DEBUG_SD, "Failed to read accel chip ID from BMI088 ACCEL, r = %d\r\n", r); } - if( bmi088_chip_id != BMI088_ACC_CHIP_ID_EXPECTED ) { - chprintf(DEBUG_SD, "BMI088 ACCEL FAIL: didnt find BMI088!\r\n"); + if( bmi088_chip_id != BMI088_ACC_CHIP_ID_EXPECTED && bmi088_chip_id != BMI090L_ACC_CHIP_ID_EXPECTED ) { + chprintf(DEBUG_SD, "ERROR: BMI088 ACCEL FAIL: didn't find BMI088!\r\n"); static systime_t last_report_time = 0; CO_errorReportRateLimited(CO->em, CO_EM_GENERIC_ERROR, CO_EMC_HARDWARE, ADCS_OD_ERROR_INFO_CODE_ACCL_CHIP_ID_MISMATCH, &last_report_time); } else { From 9a6c791d393356b359bafc1db66fc270184d7b7b Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 8 Nov 2023 22:01:41 -0800 Subject: [PATCH 16/20] Modified ADCS code to use new CANOpen dictionary --- src/f0/app_adcs/Makefile | 12 + src/f0/app_adcs/od/OD.c | 1437 +++++ src/f0/app_adcs/od/OD.h | 435 ++ src/f0/app_adcs/source/ObjDict/OD.c | 4425 --------------- src/f0/app_adcs/source/ObjDict/OD.h | 975 ---- src/f0/app_adcs/source/ObjDict/app.eds | 5415 ------------------ src/f0/app_adcs/source/ObjDict/app.xdd | 7005 ------------------------ src/f0/app_adcs/source/adcs.c | 178 +- 8 files changed, 1973 insertions(+), 17909 deletions(-) create mode 100644 src/f0/app_adcs/od/OD.c create mode 100644 src/f0/app_adcs/od/OD.h delete mode 100644 src/f0/app_adcs/source/ObjDict/OD.c delete mode 100644 src/f0/app_adcs/source/ObjDict/OD.h delete mode 100644 src/f0/app_adcs/source/ObjDict/app.eds delete mode 100644 src/f0/app_adcs/source/ObjDict/app.xdd diff --git a/src/f0/app_adcs/Makefile b/src/f0/app_adcs/Makefile index 4c944fda..dabfc126 100644 --- a/src/f0/app_adcs/Makefile +++ b/src/f0/app_adcs/Makefile @@ -82,6 +82,7 @@ endif # Project, target, sources and paths # + # Define project name here PROJECT = app_adcs @@ -105,6 +106,17 @@ DEPDIR := $(APP_ROOT)/.dep # Board specific directories. BOARDDIR = $(PROJ_ROOT)/boards/$(BOARD) +ODDIR := $(APP_ROOT)/od +ifeq ($(ORESAT),) + ORESAT = oresat0.5 +endif +# generate OD.c/OD.h from oresat-configs +$(shell oresat-gen-fw-files $(ORESAT) imu -d $(ODDIR)) +# add them +ALLCSRC += $(ODDIR)/OD.c +ALLINC += $(ODDIR) + + # Enable bootloader ifeq ($(USE_BOOTLOADER),) USE_BOOTLOADER = yes diff --git a/src/f0/app_adcs/od/OD.c b/src/f0/app_adcs/od/OD.c new file mode 100644 index 00000000..f776a528 --- /dev/null +++ b/src/f0/app_adcs/od/OD.c @@ -0,0 +1,1437 @@ +#define OD_DEFINITION +#include "301/CO_ODinterface.h" +#include "OD.h" + +#if CO_VERSION_MAJOR < 4 +#error This file is only comatible with CANopenNode v4 and above +#endif + +OD_ATTR_RAM OD_RAM_t OD_RAM = { + .x1000_device_type = 0x0, + .x1001_error_register = 0x0, + .x1003_predefined_error_field_sub0 = 8, + .x1003_predefined_error_field = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + .x1005_cob_id_sync = 0x80, + .x1006_communication_cycle_period = 0x0, + .x1014_cob_id_emergency_message = 0xB8, + .x1015_inhibit_time_emcy = 0x0, + .x1016_consumer_heartbeat_time_sub0 = 1, + .x1016_consumer_heartbeat_time = {0x3E8}, + .x1017_producer_heartbeat_time = 0x3E8, + .x1018_identity = { + .highest_index_supported = 0x4, + .vendor_id = 0x0, + .product_code = 0x0, + .revision_number = 0x0, + .serial_number = 0x0, + }, + .x1200_sdo_server_parameter = { + .highest_index_supported = 0x3, + .cob_id_client_to_server = 0x80000000, + .cob_id_server_to_client = 0x80000000, + .node_id_od_sdo_client = 0x1, + }, + .x1800_tpdo_1_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x180, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1801_tpdo_2_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x280, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1802_tpdo_3_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x380, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1803_tpdo_4_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x480, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1804_tpdo_5_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x180, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1805_tpdo_6_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x280, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1806_tpdo_7_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x380, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1807_tpdo_8_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x480, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1808_tpdo_9_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x180, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x0, + .sync_start_value = 0x0, + }, + .x1809_tpdo_10_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x280, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, + .x1A00_tpdo_1_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40000110, + .mapping_object_2 = 0x40000210, + .mapping_object_3 = 0x40000310, + }, + .x1A01_tpdo_2_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40010110, + .mapping_object_2 = 0x40010210, + .mapping_object_3 = 0x40010310, + }, + .x1A02_tpdo_3_mapping_parameters = { + .highest_index_supported = 0x1, + .mapping_object_1 = 0x40020008, + }, + .x1A03_tpdo_4_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40030110, + .mapping_object_2 = 0x40030210, + .mapping_object_3 = 0x40030310, + }, + .x1A04_tpdo_5_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40040110, + .mapping_object_2 = 0x40040210, + .mapping_object_3 = 0x40040310, + }, + .x1A05_tpdo_6_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40050110, + .mapping_object_2 = 0x40050210, + .mapping_object_3 = 0x40050310, + }, + .x1A06_tpdo_7_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40060110, + .mapping_object_2 = 0x40060210, + .mapping_object_3 = 0x40060310, + }, + .x1A07_tpdo_8_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40070120, + .mapping_object_2 = 0x40070220, + .mapping_object_3 = 0x40070310, + }, + .x1A08_tpdo_9_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40080120, + .mapping_object_2 = 0x40080220, + .mapping_object_3 = 0x40080310, + }, + .x1A09_tpdo_10_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40090120, + .mapping_object_2 = 0x40090220, + .mapping_object_3 = 0x40090310, + }, + .x2010_scet = 0x0, + .x2011_utc = 0x0, + .x3000_satellite_id = 0x2, + .x3001_flight_mode = 1, + .x3002_versions = { + .highest_index_supported = 0x4, + .hw_version = {'0', '.', '0', 0}, + .configs_version = {'0', '.', '1', '.', '0', 0}, + .fw_version = {'0', '.', '0', '.', '0', 0}, + }, + .x3003_system = { + .highest_index_supported = 0x8, + .temperature = 0x0, + .vrefint = 0x0, + }, + .x4000_gyroscope = { + .highest_index_supported = 0x6, + .pitch_rate = 0x0, + .yaw_rate = 0x0, + .roll_rate = 0x0, + .pitch_rate_raw = 0x0, + .yaw_rate_raw = 0x0, + .roll_rate_raw = 0x0, + }, + .x4001_accelerometer = { + .highest_index_supported = 0x6, + .x = 0x0, + .y = 0x0, + .z = 0x0, + .x_raw = 0x0, + .y_raw = 0x0, + .z_raw = 0x0, + }, + .x4002_temperature = 0x0, + .x4003_pos_z_magnetometer_1 = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, + .x4004_pos_z_magnetometer_2 = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, + .x4005_min_z_magnetometer_1 = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, + .x4006_min_z_magnetometer_2 = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, + .x4007_magnetorquer_current = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, + .x4008_magnetorquer_current_set = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, + .x4009_magnetorquer_pwm_percent = { + .highest_index_supported = 0x3, + .x = 0x0, + .y = 0x0, + .z = 0x0, + }, +}; + +typedef struct { + OD_obj_var_t o_1000_device_type; + OD_obj_var_t o_1001_error_register; + OD_obj_array_t o_1003_predefined_error_field; + OD_obj_var_t o_1005_cob_id_sync; + OD_obj_var_t o_1006_communication_cycle_period; + OD_obj_var_t o_1014_cob_id_emergency_message; + OD_obj_var_t o_1015_inhibit_time_emcy; + OD_obj_array_t o_1016_consumer_heartbeat_time; + OD_obj_var_t o_1017_producer_heartbeat_time; + OD_obj_record_t o_1018_identity[5]; + OD_obj_record_t o_1200_sdo_server_parameter[4]; + OD_obj_record_t o_1800_tpdo_1_communication_parameters[6]; + OD_obj_record_t o_1801_tpdo_2_communication_parameters[6]; + OD_obj_record_t o_1802_tpdo_3_communication_parameters[6]; + OD_obj_record_t o_1803_tpdo_4_communication_parameters[6]; + OD_obj_record_t o_1804_tpdo_5_communication_parameters[6]; + OD_obj_record_t o_1805_tpdo_6_communication_parameters[6]; + OD_obj_record_t o_1806_tpdo_7_communication_parameters[6]; + OD_obj_record_t o_1807_tpdo_8_communication_parameters[6]; + OD_obj_record_t o_1808_tpdo_9_communication_parameters[6]; + OD_obj_record_t o_1809_tpdo_10_communication_parameters[6]; + OD_obj_record_t o_1A00_tpdo_1_mapping_parameters[4]; + OD_obj_record_t o_1A01_tpdo_2_mapping_parameters[4]; + OD_obj_record_t o_1A02_tpdo_3_mapping_parameters[2]; + OD_obj_record_t o_1A03_tpdo_4_mapping_parameters[4]; + OD_obj_record_t o_1A04_tpdo_5_mapping_parameters[4]; + OD_obj_record_t o_1A05_tpdo_6_mapping_parameters[4]; + OD_obj_record_t o_1A06_tpdo_7_mapping_parameters[4]; + OD_obj_record_t o_1A07_tpdo_8_mapping_parameters[4]; + OD_obj_record_t o_1A08_tpdo_9_mapping_parameters[4]; + OD_obj_record_t o_1A09_tpdo_10_mapping_parameters[4]; + OD_obj_var_t o_2010_scet; + OD_obj_var_t o_2011_utc; + OD_obj_var_t o_3000_satellite_id; + OD_obj_var_t o_3001_flight_mode; + OD_obj_record_t o_3002_versions[4]; + OD_obj_record_t o_3003_system[3]; + OD_obj_record_t o_4000_gyroscope[7]; + OD_obj_record_t o_4001_accelerometer[7]; + OD_obj_var_t o_4002_temperature; + OD_obj_record_t o_4003_pos_z_magnetometer_1[4]; + OD_obj_record_t o_4004_pos_z_magnetometer_2[4]; + OD_obj_record_t o_4005_min_z_magnetometer_1[4]; + OD_obj_record_t o_4006_min_z_magnetometer_2[4]; + OD_obj_record_t o_4007_magnetorquer_current[4]; + OD_obj_record_t o_4008_magnetorquer_current_set[4]; + OD_obj_record_t o_4009_magnetorquer_pwm_percent[4]; +} ODObjs_t; + +static CO_PROGMEM ODObjs_t ODObjs = { + .o_1000_device_type = { + .dataOrig = &OD_RAM.x1000_device_type, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + .o_1001_error_register = { + .dataOrig = &OD_RAM.x1001_error_register, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + .o_1003_predefined_error_field = { + .dataOrig0 = &OD_RAM.x1003_predefined_error_field_sub0, + .dataOrig = &OD_RAM.x1003_predefined_error_field[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_RW | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t), + }, + .o_1005_cob_id_sync = { + .dataOrig = &OD_RAM.x1005_cob_id_sync, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1006_communication_cycle_period = { + .dataOrig = &OD_RAM.x1006_communication_cycle_period, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1014_cob_id_emergency_message = { + .dataOrig = &OD_RAM.x1014_cob_id_emergency_message, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + .o_1015_inhibit_time_emcy = { + .dataOrig = &OD_RAM.x1015_inhibit_time_emcy, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + .o_1016_consumer_heartbeat_time = { + .dataOrig0 = &OD_RAM.x1016_consumer_heartbeat_time_sub0, + .dataOrig = &OD_RAM.x1016_consumer_heartbeat_time[0], + .attribute0 = ODA_SDO_R, + .attribute = ODA_SDO_RW | ODA_MB, + .dataElementLength = 4, + .dataElementSizeof = sizeof(uint32_t), + }, + .o_1017_producer_heartbeat_time = { + .dataOrig = &OD_RAM.x1017_producer_heartbeat_time, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 2 + }, + .o_1018_identity = { + { + .dataOrig = &OD_RAM.x1018_identity.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1018_identity.vendor_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1018_identity.product_code, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1018_identity.revision_number, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1018_identity.serial_number, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1200_sdo_server_parameter = { + { + .dataOrig = &OD_RAM.x1200_sdo_server_parameter.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1200_sdo_server_parameter.cob_id_client_to_server, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1200_sdo_server_parameter.cob_id_server_to_client, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1200_sdo_server_parameter.node_id_od_sdo_client, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 4 + }, + }, + .o_1800_tpdo_1_communication_parameters = { + { + .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1801_tpdo_2_communication_parameters = { + { + .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1802_tpdo_3_communication_parameters = { + { + .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1803_tpdo_4_communication_parameters = { + { + .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1804_tpdo_5_communication_parameters = { + { + .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1805_tpdo_6_communication_parameters = { + { + .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1806_tpdo_7_communication_parameters = { + { + .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1807_tpdo_8_communication_parameters = { + { + .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1808_tpdo_9_communication_parameters = { + { + .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1809_tpdo_10_communication_parameters = { + { + .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, + .o_1A00_tpdo_1_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A01_tpdo_2_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A02_tpdo_3_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A02_tpdo_3_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A02_tpdo_3_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A03_tpdo_4_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A04_tpdo_5_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A05_tpdo_6_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A06_tpdo_7_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A07_tpdo_8_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A08_tpdo_9_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_1A09_tpdo_10_mapping_parameters = { + { + .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.mapping_object_3, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + }, + .o_2010_scet = { + .dataOrig = &OD_RAM.x2010_scet, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 8 + }, + .o_2011_utc = { + .dataOrig = &OD_RAM.x2011_utc, + .attribute = ODA_SDO_RW | ODA_MB, + .dataLength = 8 + }, + .o_3000_satellite_id = { + .dataOrig = &OD_RAM.x3000_satellite_id, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + .o_3001_flight_mode = { + .dataOrig = &OD_RAM.x3001_flight_mode, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + .o_3002_versions = { + { + .dataOrig = &OD_RAM.x3002_versions.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x3002_versions.hw_version[0], + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_STR, + .dataLength = 3 + }, + { + .dataOrig = &OD_RAM.x3002_versions.configs_version[0], + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_STR, + .dataLength = 5 + }, + { + .dataOrig = &OD_RAM.x3002_versions.fw_version[0], + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_STR, + .dataLength = 5 + }, + }, + .o_3003_system = { + { + .dataOrig = &OD_RAM.x3003_system.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x3003_system.temperature, + .subIndex = 7, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x3003_system.vrefint, + .subIndex = 8, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + }, + .o_4000_gyroscope = { + { + .dataOrig = &OD_RAM.x4000_gyroscope.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4000_gyroscope.pitch_rate, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4000_gyroscope.yaw_rate, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4000_gyroscope.roll_rate, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4000_gyroscope.pitch_rate_raw, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4000_gyroscope.yaw_rate_raw, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4000_gyroscope.roll_rate_raw, + .subIndex = 6, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4001_accelerometer = { + { + .dataOrig = &OD_RAM.x4001_accelerometer.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4001_accelerometer.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4001_accelerometer.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4001_accelerometer.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4001_accelerometer.x_raw, + .subIndex = 4, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4001_accelerometer.y_raw, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4001_accelerometer.z_raw, + .subIndex = 6, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4002_temperature = { + .dataOrig = &OD_RAM.x4002_temperature, + .attribute = ODA_SDO_R | ODA_TPDO, + .dataLength = 1 + }, + .o_4003_pos_z_magnetometer_1 = { + { + .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4004_pos_z_magnetometer_2 = { + { + .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4005_min_z_magnetometer_1 = { + { + .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4006_min_z_magnetometer_2 = { + { + .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4007_magnetorquer_current = { + { + .dataOrig = &OD_RAM.x4007_magnetorquer_current.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4007_magnetorquer_current.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4007_magnetorquer_current.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4007_magnetorquer_current.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4008_magnetorquer_current_set = { + { + .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.x, + .subIndex = 1, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.y, + .subIndex = 2, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.z, + .subIndex = 3, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .dataLength = 2 + }, + }, + .o_4009_magnetorquer_pwm_percent = { + { + .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.x, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.y, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.z, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 2 + }, + }, +}; + +static OD_ATTR_OD OD_entry_t ODList[] = { + {0x1000, 0x01, ODT_VAR, &ODObjs.o_1000_device_type, NULL}, + {0x1001, 0x01, ODT_VAR, &ODObjs.o_1001_error_register, NULL}, + {0x1003, 0x09, ODT_ARR, &ODObjs.o_1003_predefined_error_field, NULL}, + {0x1005, 0x01, ODT_VAR, &ODObjs.o_1005_cob_id_sync, NULL}, + {0x1006, 0x01, ODT_VAR, &ODObjs.o_1006_communication_cycle_period, NULL}, + {0x1014, 0x01, ODT_VAR, &ODObjs.o_1014_cob_id_emergency_message, NULL}, + {0x1015, 0x01, ODT_VAR, &ODObjs.o_1015_inhibit_time_emcy, NULL}, + {0x1016, 0x02, ODT_ARR, &ODObjs.o_1016_consumer_heartbeat_time, NULL}, + {0x1017, 0x01, ODT_VAR, &ODObjs.o_1017_producer_heartbeat_time, NULL}, + {0x1018, 0x05, ODT_REC, &ODObjs.o_1018_identity, NULL}, + {0x1200, 0x04, ODT_REC, &ODObjs.o_1200_sdo_server_parameter, NULL}, + {0x1800, 0x06, ODT_REC, &ODObjs.o_1800_tpdo_1_communication_parameters, NULL}, + {0x1801, 0x06, ODT_REC, &ODObjs.o_1801_tpdo_2_communication_parameters, NULL}, + {0x1802, 0x06, ODT_REC, &ODObjs.o_1802_tpdo_3_communication_parameters, NULL}, + {0x1803, 0x06, ODT_REC, &ODObjs.o_1803_tpdo_4_communication_parameters, NULL}, + {0x1804, 0x06, ODT_REC, &ODObjs.o_1804_tpdo_5_communication_parameters, NULL}, + {0x1805, 0x06, ODT_REC, &ODObjs.o_1805_tpdo_6_communication_parameters, NULL}, + {0x1806, 0x06, ODT_REC, &ODObjs.o_1806_tpdo_7_communication_parameters, NULL}, + {0x1807, 0x06, ODT_REC, &ODObjs.o_1807_tpdo_8_communication_parameters, NULL}, + {0x1808, 0x06, ODT_REC, &ODObjs.o_1808_tpdo_9_communication_parameters, NULL}, + {0x1809, 0x06, ODT_REC, &ODObjs.o_1809_tpdo_10_communication_parameters, NULL}, + {0x1A00, 0x04, ODT_REC, &ODObjs.o_1A00_tpdo_1_mapping_parameters, NULL}, + {0x1A01, 0x04, ODT_REC, &ODObjs.o_1A01_tpdo_2_mapping_parameters, NULL}, + {0x1A02, 0x02, ODT_REC, &ODObjs.o_1A02_tpdo_3_mapping_parameters, NULL}, + {0x1A03, 0x04, ODT_REC, &ODObjs.o_1A03_tpdo_4_mapping_parameters, NULL}, + {0x1A04, 0x04, ODT_REC, &ODObjs.o_1A04_tpdo_5_mapping_parameters, NULL}, + {0x1A05, 0x04, ODT_REC, &ODObjs.o_1A05_tpdo_6_mapping_parameters, NULL}, + {0x1A06, 0x04, ODT_REC, &ODObjs.o_1A06_tpdo_7_mapping_parameters, NULL}, + {0x1A07, 0x04, ODT_REC, &ODObjs.o_1A07_tpdo_8_mapping_parameters, NULL}, + {0x1A08, 0x04, ODT_REC, &ODObjs.o_1A08_tpdo_9_mapping_parameters, NULL}, + {0x1A09, 0x04, ODT_REC, &ODObjs.o_1A09_tpdo_10_mapping_parameters, NULL}, + {0x2010, 0x01, ODT_VAR, &ODObjs.o_2010_scet, NULL}, + {0x2011, 0x01, ODT_VAR, &ODObjs.o_2011_utc, NULL}, + {0x3000, 0x01, ODT_VAR, &ODObjs.o_3000_satellite_id, NULL}, + {0x3001, 0x01, ODT_VAR, &ODObjs.o_3001_flight_mode, NULL}, + {0x3002, 0x04, ODT_REC, &ODObjs.o_3002_versions, NULL}, + {0x3003, 0x03, ODT_REC, &ODObjs.o_3003_system, NULL}, + {0x4000, 0x07, ODT_REC, &ODObjs.o_4000_gyroscope, NULL}, + {0x4001, 0x07, ODT_REC, &ODObjs.o_4001_accelerometer, NULL}, + {0x4002, 0x01, ODT_VAR, &ODObjs.o_4002_temperature, NULL}, + {0x4003, 0x04, ODT_REC, &ODObjs.o_4003_pos_z_magnetometer_1, NULL}, + {0x4004, 0x04, ODT_REC, &ODObjs.o_4004_pos_z_magnetometer_2, NULL}, + {0x4005, 0x04, ODT_REC, &ODObjs.o_4005_min_z_magnetometer_1, NULL}, + {0x4006, 0x04, ODT_REC, &ODObjs.o_4006_min_z_magnetometer_2, NULL}, + {0x4007, 0x04, ODT_REC, &ODObjs.o_4007_magnetorquer_current, NULL}, + {0x4008, 0x04, ODT_REC, &ODObjs.o_4008_magnetorquer_current_set, NULL}, + {0x4009, 0x04, ODT_REC, &ODObjs.o_4009_magnetorquer_pwm_percent, NULL}, + {0x0000, 0x00, 0, NULL, NULL} +}; + +static OD_t _OD = { + (sizeof(ODList) / sizeof(ODList[0])) - 1, + &ODList[0] +}; + +OD_t *OD = &_OD; diff --git a/src/f0/app_adcs/od/OD.h b/src/f0/app_adcs/od/OD.h new file mode 100644 index 00000000..5c7d7f08 --- /dev/null +++ b/src/f0/app_adcs/od/OD.h @@ -0,0 +1,435 @@ +#ifndef OD_H +#define OD_H + +#define OD_CNT_NMT 1 +#define OD_CNT_EM 1 +#define OD_CNT_SYNC 1 +#define OD_CNT_SYNC_PROD 1 +#define OD_CNT_STORAGE 1 +#define OD_CNT_EM_PROD 1 +#define OD_CNT_HB_CONS 1 +#define OD_CNT_HB_PROD 1 +#define OD_CNT_SDO_SRV 1 +#define OD_CNT_TPDO 10 + +#define OD_CNT_ARR_1003 8 +#define OD_CNT_ARR_1016 1 + +typedef struct { + uint32_t x1000_device_type; + uint8_t x1001_error_register; + uint8_t x1003_predefined_error_field_sub0; + uint32_t x1003_predefined_error_field[OD_CNT_ARR_1003]; + uint32_t x1005_cob_id_sync; + uint32_t x1006_communication_cycle_period; + uint32_t x1014_cob_id_emergency_message; + uint16_t x1015_inhibit_time_emcy; + uint8_t x1016_consumer_heartbeat_time_sub0; + uint32_t x1016_consumer_heartbeat_time[OD_CNT_ARR_1016]; + uint16_t x1017_producer_heartbeat_time; + struct { + uint8_t highest_index_supported; + uint32_t vendor_id; + uint32_t product_code; + uint32_t revision_number; + uint32_t serial_number; + } x1018_identity; + struct { + uint8_t highest_index_supported; + uint32_t cob_id_client_to_server; + uint32_t cob_id_server_to_client; + uint32_t node_id_od_sdo_client; + } x1200_sdo_server_parameter; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1800_tpdo_1_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1801_tpdo_2_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1802_tpdo_3_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1803_tpdo_4_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1804_tpdo_5_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1805_tpdo_6_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1806_tpdo_7_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1807_tpdo_8_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1808_tpdo_9_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x1809_tpdo_10_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A00_tpdo_1_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A01_tpdo_2_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + } x1A02_tpdo_3_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A03_tpdo_4_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A04_tpdo_5_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A05_tpdo_6_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A06_tpdo_7_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A07_tpdo_8_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A08_tpdo_9_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A09_tpdo_10_mapping_parameters; + uint64_t x2010_scet; + uint64_t x2011_utc; + uint8_t x3000_satellite_id; + bool_t x3001_flight_mode; + struct { + uint8_t highest_index_supported; + char hw_version[4]; + char configs_version[6]; + char fw_version[6]; + } x3002_versions; + struct { + uint8_t highest_index_supported; + int8_t temperature; + uint8_t vrefint; + } x3003_system; + struct { + uint8_t highest_index_supported; + int16_t pitch_rate; + int16_t yaw_rate; + int16_t roll_rate; + uint16_t pitch_rate_raw; + uint16_t yaw_rate_raw; + uint16_t roll_rate_raw; + } x4000_gyroscope; + struct { + uint8_t highest_index_supported; + int16_t x; + int16_t y; + int16_t z; + uint16_t x_raw; + uint16_t y_raw; + uint16_t z_raw; + } x4001_accelerometer; + int8_t x4002_temperature; + struct { + uint8_t highest_index_supported; + int16_t x; + int16_t y; + int16_t z; + } x4003_pos_z_magnetometer_1; + struct { + uint8_t highest_index_supported; + int16_t x; + int16_t y; + int16_t z; + } x4004_pos_z_magnetometer_2; + struct { + uint8_t highest_index_supported; + int16_t x; + int16_t y; + int16_t z; + } x4005_min_z_magnetometer_1; + struct { + uint8_t highest_index_supported; + int16_t x; + int16_t y; + int16_t z; + } x4006_min_z_magnetometer_2; + struct { + uint8_t highest_index_supported; + int32_t x; + int32_t y; + int16_t z; + } x4007_magnetorquer_current; + struct { + uint8_t highest_index_supported; + int32_t x; + int32_t y; + int16_t z; + } x4008_magnetorquer_current_set; + struct { + uint8_t highest_index_supported; + int32_t x; + int32_t y; + int16_t z; + } x4009_magnetorquer_pwm_percent; +} OD_RAM_t; + +#ifndef OD_ATTR_RAM +#define OD_ATTR_RAM +#endif +extern OD_ATTR_RAM OD_RAM_t OD_RAM; + +#ifndef OD_ATTR_OD +#define OD_ATTR_OD +#endif +extern OD_ATTR_OD OD_t *OD; + +#define OD_ENTRY_H1000 &OD->list[0] +#define OD_ENTRY_H1001 &OD->list[1] +#define OD_ENTRY_H1003 &OD->list[2] +#define OD_ENTRY_H1005 &OD->list[3] +#define OD_ENTRY_H1006 &OD->list[4] +#define OD_ENTRY_H1014 &OD->list[5] +#define OD_ENTRY_H1015 &OD->list[6] +#define OD_ENTRY_H1016 &OD->list[7] +#define OD_ENTRY_H1017 &OD->list[8] +#define OD_ENTRY_H1018 &OD->list[9] +#define OD_ENTRY_H1200 &OD->list[10] +#define OD_ENTRY_H1800 &OD->list[11] +#define OD_ENTRY_H1801 &OD->list[12] +#define OD_ENTRY_H1802 &OD->list[13] +#define OD_ENTRY_H1803 &OD->list[14] +#define OD_ENTRY_H1804 &OD->list[15] +#define OD_ENTRY_H1805 &OD->list[16] +#define OD_ENTRY_H1806 &OD->list[17] +#define OD_ENTRY_H1807 &OD->list[18] +#define OD_ENTRY_H1808 &OD->list[19] +#define OD_ENTRY_H1809 &OD->list[20] +#define OD_ENTRY_H1A00 &OD->list[21] +#define OD_ENTRY_H1A01 &OD->list[22] +#define OD_ENTRY_H1A02 &OD->list[23] +#define OD_ENTRY_H1A03 &OD->list[24] +#define OD_ENTRY_H1A04 &OD->list[25] +#define OD_ENTRY_H1A05 &OD->list[26] +#define OD_ENTRY_H1A06 &OD->list[27] +#define OD_ENTRY_H1A07 &OD->list[28] +#define OD_ENTRY_H1A08 &OD->list[29] +#define OD_ENTRY_H1A09 &OD->list[30] +#define OD_ENTRY_H2010 &OD->list[31] +#define OD_ENTRY_H2011 &OD->list[32] +#define OD_ENTRY_H3000 &OD->list[33] +#define OD_ENTRY_H3001 &OD->list[34] +#define OD_ENTRY_H3002 &OD->list[35] +#define OD_ENTRY_H3003 &OD->list[36] +#define OD_ENTRY_H4000 &OD->list[37] +#define OD_ENTRY_H4001 &OD->list[38] +#define OD_ENTRY_H4002 &OD->list[39] +#define OD_ENTRY_H4003 &OD->list[40] +#define OD_ENTRY_H4004 &OD->list[41] +#define OD_ENTRY_H4005 &OD->list[42] +#define OD_ENTRY_H4006 &OD->list[43] +#define OD_ENTRY_H4007 &OD->list[44] +#define OD_ENTRY_H4008 &OD->list[45] +#define OD_ENTRY_H4009 &OD->list[46] + +#define OD_ENTRY_H1000_DEVICE_TYPE &OD->list[0] +#define OD_ENTRY_H1001_ERROR_REGISTER &OD->list[1] +#define OD_ENTRY_H1003_PREDEFINED_ERROR_FIELD &OD->list[2] +#define OD_ENTRY_H1005_COB_ID_SYNC &OD->list[3] +#define OD_ENTRY_H1006_COMMUNICATION_CYCLE_PERIOD &OD->list[4] +#define OD_ENTRY_H1014_COB_ID_EMERGENCY_MESSAGE &OD->list[5] +#define OD_ENTRY_H1015_INHIBIT_TIME_EMCY &OD->list[6] +#define OD_ENTRY_H1016_CONSUMER_HEARTBEAT_TIME &OD->list[7] +#define OD_ENTRY_H1017_PRODUCER_HEARTBEAT_TIME &OD->list[8] +#define OD_ENTRY_H1018_IDENTITY &OD->list[9] +#define OD_ENTRY_H1200_SDO_SERVER_PARAMETER &OD->list[10] +#define OD_ENTRY_H1800_TPDO_1_COMMUNICATION_PARAMETERS &OD->list[11] +#define OD_ENTRY_H1801_TPDO_2_COMMUNICATION_PARAMETERS &OD->list[12] +#define OD_ENTRY_H1802_TPDO_3_COMMUNICATION_PARAMETERS &OD->list[13] +#define OD_ENTRY_H1803_TPDO_4_COMMUNICATION_PARAMETERS &OD->list[14] +#define OD_ENTRY_H1804_TPDO_5_COMMUNICATION_PARAMETERS &OD->list[15] +#define OD_ENTRY_H1805_TPDO_6_COMMUNICATION_PARAMETERS &OD->list[16] +#define OD_ENTRY_H1806_TPDO_7_COMMUNICATION_PARAMETERS &OD->list[17] +#define OD_ENTRY_H1807_TPDO_8_COMMUNICATION_PARAMETERS &OD->list[18] +#define OD_ENTRY_H1808_TPDO_9_COMMUNICATION_PARAMETERS &OD->list[19] +#define OD_ENTRY_H1809_TPDO_10_COMMUNICATION_PARAMETERS &OD->list[20] +#define OD_ENTRY_H1A00_TPDO_1_MAPPING_PARAMETERS &OD->list[21] +#define OD_ENTRY_H1A01_TPDO_2_MAPPING_PARAMETERS &OD->list[22] +#define OD_ENTRY_H1A02_TPDO_3_MAPPING_PARAMETERS &OD->list[23] +#define OD_ENTRY_H1A03_TPDO_4_MAPPING_PARAMETERS &OD->list[24] +#define OD_ENTRY_H1A04_TPDO_5_MAPPING_PARAMETERS &OD->list[25] +#define OD_ENTRY_H1A05_TPDO_6_MAPPING_PARAMETERS &OD->list[26] +#define OD_ENTRY_H1A06_TPDO_7_MAPPING_PARAMETERS &OD->list[27] +#define OD_ENTRY_H1A07_TPDO_8_MAPPING_PARAMETERS &OD->list[28] +#define OD_ENTRY_H1A08_TPDO_9_MAPPING_PARAMETERS &OD->list[29] +#define OD_ENTRY_H1A09_TPDO_10_MAPPING_PARAMETERS &OD->list[30] +#define OD_ENTRY_H2010_SCET &OD->list[31] +#define OD_ENTRY_H2011_UTC &OD->list[32] +#define OD_ENTRY_H3000_SATELLITE_ID &OD->list[33] +#define OD_ENTRY_H3001_FLIGHT_MODE &OD->list[34] +#define OD_ENTRY_H3002_VERSIONS &OD->list[35] +#define OD_ENTRY_H3003_SYSTEM &OD->list[36] +#define OD_ENTRY_H4000_GYROSCOPE &OD->list[37] +#define OD_ENTRY_H4001_ACCELEROMETER &OD->list[38] +#define OD_ENTRY_H4002_TEMPERATURE &OD->list[39] +#define OD_ENTRY_H4003_POS_Z_MAGNETOMETER_1 &OD->list[40] +#define OD_ENTRY_H4004_POS_Z_MAGNETOMETER_2 &OD->list[41] +#define OD_ENTRY_H4005_MIN_Z_MAGNETOMETER_1 &OD->list[42] +#define OD_ENTRY_H4006_MIN_Z_MAGNETOMETER_2 &OD->list[43] +#define OD_ENTRY_H4007_MAGNETORQUER_CURRENT &OD->list[44] +#define OD_ENTRY_H4008_MAGNETORQUER_CURRENT_SET &OD->list[45] +#define OD_ENTRY_H4009_MAGNETORQUER_PWM_PERCENT &OD->list[46] + +#define OD_INDEX_SCET 0x2010 + +#define OD_INDEX_UTC 0x2011 + +#define OD_INDEX_SATELLITE_ID 0x3000 + +#define OD_INDEX_FLIGHT_MODE 0x3001 + +#define OD_INDEX_VERSIONS 0x3002 +#define OD_SUBINDEX_VERSIONS_HW_VERSION 0x1 +#define OD_SUBINDEX_VERSIONS_CONFIGS_VERSION 0x2 +#define OD_SUBINDEX_VERSIONS_FW_VERSION 0x4 + +#define OD_INDEX_SYSTEM 0x3003 +#define OD_SUBINDEX_SYSTEM_TEMPERATURE 0x7 +#define OD_SUBINDEX_SYSTEM_VREFINT 0x8 + +#define OD_INDEX_GYROSCOPE 0x4000 +#define OD_SUBINDEX_GYROSCOPE_PITCH_RATE 0x1 +#define OD_SUBINDEX_GYROSCOPE_YAW_RATE 0x2 +#define OD_SUBINDEX_GYROSCOPE_ROLL_RATE 0x3 +#define OD_SUBINDEX_GYROSCOPE_PITCH_RATE_RAW 0x4 +#define OD_SUBINDEX_GYROSCOPE_YAW_RATE_RAW 0x5 +#define OD_SUBINDEX_GYROSCOPE_ROLL_RATE_RAW 0x6 + +#define OD_INDEX_ACCELEROMETER 0x4001 +#define OD_SUBINDEX_ACCELEROMETER_X 0x1 +#define OD_SUBINDEX_ACCELEROMETER_Y 0x2 +#define OD_SUBINDEX_ACCELEROMETER_Z 0x3 +#define OD_SUBINDEX_ACCELEROMETER_X_RAW 0x4 +#define OD_SUBINDEX_ACCELEROMETER_Y_RAW 0x5 +#define OD_SUBINDEX_ACCELEROMETER_Z_RAW 0x6 + +#define OD_INDEX_TEMPERATURE 0x4002 + +#define OD_INDEX_POS_Z_MAGNETOMETER_1 0x4003 +#define OD_SUBINDEX_POS_Z_MAGNETOMETER_1_X 0x1 +#define OD_SUBINDEX_POS_Z_MAGNETOMETER_1_Y 0x2 +#define OD_SUBINDEX_POS_Z_MAGNETOMETER_1_Z 0x3 + +#define OD_INDEX_POS_Z_MAGNETOMETER_2 0x4004 +#define OD_SUBINDEX_POS_Z_MAGNETOMETER_2_X 0x1 +#define OD_SUBINDEX_POS_Z_MAGNETOMETER_2_Y 0x2 +#define OD_SUBINDEX_POS_Z_MAGNETOMETER_2_Z 0x3 + +#define OD_INDEX_MIN_Z_MAGNETOMETER_1 0x4005 +#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_1_X 0x1 +#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_1_Y 0x2 +#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_1_Z 0x3 + +#define OD_INDEX_MIN_Z_MAGNETOMETER_2 0x4006 +#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_X 0x1 +#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_Y 0x2 +#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_Z 0x3 + +#define OD_INDEX_MAGNETORQUER_CURRENT 0x4007 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_X 0x1 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Y 0x2 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Z 0x3 + +#define OD_INDEX_MAGNETORQUER_CURRENT_SET 0x4008 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_SET_X 0x1 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_SET_Y 0x2 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_SET_Z 0x3 + +#define OD_INDEX_MAGNETORQUER_PWM_PERCENT 0x4009 +#define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_X 0x1 +#define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_Y 0x2 +#define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_Z 0x3 + +#endif /* OD_H */ diff --git a/src/f0/app_adcs/source/ObjDict/OD.c b/src/f0/app_adcs/source/ObjDict/OD.c deleted file mode 100644 index 4b9dce36..00000000 --- a/src/f0/app_adcs/source/ObjDict/OD.c +++ /dev/null @@ -1,4425 +0,0 @@ -#define OD_DEFINITION -#include "301/CO_ODinterface.h" -#include "OD.h" - -#if CO_VERSION_MAJOR < 4 -#error This object dictionary is only comatible with CANopenNode v4 and above -#endif - -OD_ATTR_ROM OD_ROM_t OD_ROM = { - .x1000_deviceType = 0x00000000, - .x1008_manufacturerDeviceName = {'O', 'r', 'e', 'S', 'a', 't', ' ', 'N', 'o', 'd', 'e', 0}, - .x1009_manufacturerHardwareVersion = {'0', '.', '0', 0}, - .x100A_manufacturerSoftwareVersion = {'0', '.', '0', '.', '0', 0}, - .x1018_identity = { - .highestSubIndexSupported = 0x04, - .vendorID = 0x00000000, - .productCode = 0x00000000, - .revisionNumber = 0x00000000, - .serialNumber = 0x00000000, - }, - .x1029_errorBehavior_sub0 = 0x06, - .x1029_errorBehavior = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, -}; - -OD_ATTR_RAM OD_RAM_t OD_RAM = { - .x1001_errorRegister = 0x00, - .x1002_manufacturerStatusRegister = 0, - .x1003_preDefinedErrorField_sub0 = 0x08, - .x1003_preDefinedErrorField = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, - .x1010_storeParameters_sub0 = 0x04, - .x1010_storeParameters = {0x00000001, 0x00000001, 0x00000001, 0x00000001}, - .x1011_restoreDefaultParameters_sub0 = 0x04, - .x1011_restoreDefaultParameters = {0x00000001, 0x00000001, 0x00000001, 0x00000001}, - .x2010_SCET = 0, - .x2011_UTC = 0, - .x2020_MCU_UniqueDeviceID_sub0 = 0x03, - .x2020_MCU_UniqueDeviceID = {0, 0, 0}, - .x2021_MCU_Calibration = { - .highestSubIndexSupported = 0x03, - .TS_CAL1 = 0, - .TS_CAL2 = 0, - .VREFINT_CAL = 0, - }, - .x2022_MCU_Sensors = { - .highestSubIndexSupported = 0x08, - .temperature = 0, - .VREFINT = 0, - .VBAT = 0, - .VBUSP_Current = 0, - .temperatureRaw = 0, - .VREFINT_Raw = 0, - .VBAT_Raw = 0, - .VBUSP_CurrentRaw = 0, - }, - .x2100_errorStatusBits = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - .x6000_gyroscope = { - .highestSubIndexSupported = 0x06, - .pitchRate = 0, - .yawRate = 0, - .rollRate = 0, - .pitchRateRaw = 0, - .yawRateRaw = 0, - .rollRateRaw = 0, - }, - .x6001_acceleration = { - .highestSubIndexSupported = 0x06, - .accx = 0, - .accy = 0, - .accz = 0, - .accXRaw = 0, - .accyRaw = 0, - .acczRaw = 0, - }, - .x6002_IMU_Temperature = 0, - .x6003_magnetometerPZ1 = { - .highestSubIndexSupported = 0x03, - .magx = 0, - .magy = 0, - .magz = 0, - }, - .x6004_magnetometerPZ2 = { - .highestSubIndexSupported = 0x03, - .magx = 0, - .magy = 0, - .magz = 0, - }, - .x6005_magnetometerMZ1 = { - .highestSubIndexSupported = 0x03, - .magx = 0, - .magy = 0, - .magz = 0, - }, - .x6006_magnetometerMZ2 = { - .highestSubIndexSupported = 0x03, - .magx = 0, - .magy = 0, - .magz = 0, - }, - .x6007_magnetorquer = { - .highestSubIndexSupported = 0x09, - .setMagnetorquerXCurrent = 0, - .setMagnetorquerYCurrent = 0, - .setMagnetorquerZCurrent = 0, - .magnetorquerXPWM_DutyCycle = 0, - .magnetorquerYPWM_DutyCycle = 0, - .magnetorquerZPWM_DutyCycle = 0, - .magnetorquerXCurrent = 0, - .magnetorquerYCurrent = 0, - .magnetorquerZCurrent = 0, - }, -}; - -OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM = { - .x1005_COB_ID_SYNC_Message = 0x00000080, - .x1006_communicationCyclePeriod = 0, - .x1007_synchronousWindowLength = 0, - .x1014_COB_ID_EMCY = 0x80, - .x1015_inhibitTimeEMCY = 0, - .x1016_consumerHeartbeatTime_sub0 = 0x08, - .x1016_consumerHeartbeatTime = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, - .x1017_producerHeartbeatTime = 1000, - .x1019_synchronousCounterOverflowValue = 0, - .x1200_SDO_ServerParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_ClientToServer = 0x80000000, - .COB_ID_ServerToClient = 0x80000000, - .nodeID_OfTheSDO_Client = 0x01, - }, - .x1400_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000200, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1401_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000300, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1402_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000400, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1403_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000500, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1404_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000200, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1405_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000300, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1406_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000400, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1407_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000500, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1408_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000200, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1409_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000300, - .transmissionType = 254, - .eventTimer = 0, - }, - .x140A_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000400, - .transmissionType = 254, - .eventTimer = 0, - }, - .x140B_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000500, - .transmissionType = 254, - .eventTimer = 0, - }, - .x140C_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000200, - .transmissionType = 254, - .eventTimer = 0, - }, - .x140D_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000300, - .transmissionType = 254, - .eventTimer = 0, - }, - .x140E_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000400, - .transmissionType = 254, - .eventTimer = 0, - }, - .x140F_RPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x03, - .COB_ID_UsedByRPDO = 0x80000500, - .transmissionType = 254, - .eventTimer = 0, - }, - .x1600_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1601_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1602_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1603_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1604_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1605_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1606_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1607_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1608_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1609_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x160A_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x160B_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x160C_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x160D_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x160E_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x160F_RPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1800_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0x40000180, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 10000, - .SYNC_StartValue = 0, - }, - .x1801_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0x40000280, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 10000, - .SYNC_StartValue = 0, - }, - .x1802_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0x40000380, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 10000, - .SYNC_StartValue = 0, - }, - .x1803_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0x40000480, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1804_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0x40000180, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1805_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0x40000280, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1806_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000380, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1807_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000480, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1808_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000180, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1809_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000280, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x180A_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000380, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x180B_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000480, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x180C_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000180, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x180D_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000280, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x180E_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000380, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x180F_TPDO_CommunicationParameter = { - .highestSubIndexSupported = 0x06, - .COB_ID_UsedByTPDO = 0xC0000480, - .transmissionType = 254, - .inhibitTime = 0, - .compatibilityEntry = 0, - .eventTimer = 0, - .SYNC_StartValue = 0, - }, - .x1A00_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x60000110, - .applicationObject_2 = 0x60000210, - .applicationObject_3 = 0x60000310, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A01_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x60010110, - .applicationObject_2 = 0x60010210, - .applicationObject_3 = 0x60010310, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A02_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x60020008, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A03_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x60030110, - .applicationObject_2 = 0x60030210, - .applicationObject_3 = 0x60030310, - .applicationObject_4 = 0x60040110, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A04_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x60040210, - .applicationObject_2 = 0x60040310, - .applicationObject_3 = 0x60050110, - .applicationObject_4 = 0x60050210, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A05_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x60050310, - .applicationObject_2 = 0x60060110, - .applicationObject_3 = 0x60060210, - .applicationObject_4 = 0x60060310, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A06_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A07_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A08_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A09_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A0A_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A0B_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A0C_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A0D_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A0E_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1A0F_TPDO_MappingParameter = { - .numberOfMappedApplicationObjectsInPDO = 0x08, - .applicationObject_1 = 0x00000000, - .applicationObject_2 = 0x00000000, - .applicationObject_3 = 0x00000000, - .applicationObject_4 = 0x00000000, - .applicationObject_5 = 0x00000000, - .applicationObject_6 = 0x00000000, - .applicationObject_7 = 0x00000000, - .applicationObject_8 = 0x00000000, - }, - .x1F80_nmtstartup = 0x00000008, -}; - -OD_ATTR_PERSIST_MFR OD_PERSIST_MFR_t OD_PERSIST_MFR = { - .x2000_BUS_Management = { - .highestSubIndexSupported = 0x04, - .bdefault = 0, - .ttoggle = 0, - .ntoggle = 0, - .ctoggle = 0, - }, -}; - -typedef struct { - OD_obj_var_t o_1000_deviceType; - OD_obj_var_t o_1001_errorRegister; - OD_obj_var_t o_1002_manufacturerStatusRegister; - OD_obj_array_t o_1003_preDefinedErrorField; - OD_obj_var_t o_1005_COB_ID_SYNC_Message; - OD_obj_var_t o_1006_communicationCyclePeriod; - OD_obj_var_t o_1007_synchronousWindowLength; - OD_obj_var_t o_1008_manufacturerDeviceName; - OD_obj_var_t o_1009_manufacturerHardwareVersion; - OD_obj_var_t o_100A_manufacturerSoftwareVersion; - OD_obj_array_t o_1010_storeParameters; - OD_obj_array_t o_1011_restoreDefaultParameters; - OD_obj_var_t o_1014_COB_ID_EMCY; - OD_obj_var_t o_1015_inhibitTimeEMCY; - OD_obj_array_t o_1016_consumerHeartbeatTime; - OD_obj_var_t o_1017_producerHeartbeatTime; - OD_obj_record_t o_1018_identity[5]; - OD_obj_var_t o_1019_synchronousCounterOverflowValue; - OD_obj_array_t o_1029_errorBehavior; - OD_obj_record_t o_1200_SDO_ServerParameter[4]; - OD_obj_record_t o_1400_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1401_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1402_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1403_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1404_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1405_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1406_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1407_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1408_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1409_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_140A_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_140B_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_140C_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_140D_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_140E_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_140F_RPDO_CommunicationParameter[4]; - OD_obj_record_t o_1600_RPDO_MappingParameter[9]; - OD_obj_record_t o_1601_RPDO_MappingParameter[9]; - OD_obj_record_t o_1602_RPDO_MappingParameter[9]; - OD_obj_record_t o_1603_RPDO_MappingParameter[9]; - OD_obj_record_t o_1604_RPDO_MappingParameter[9]; - OD_obj_record_t o_1605_RPDO_MappingParameter[9]; - OD_obj_record_t o_1606_RPDO_MappingParameter[9]; - OD_obj_record_t o_1607_RPDO_MappingParameter[9]; - OD_obj_record_t o_1608_RPDO_MappingParameter[9]; - OD_obj_record_t o_1609_RPDO_MappingParameter[9]; - OD_obj_record_t o_160A_RPDO_MappingParameter[9]; - OD_obj_record_t o_160B_RPDO_MappingParameter[9]; - OD_obj_record_t o_160C_RPDO_MappingParameter[9]; - OD_obj_record_t o_160D_RPDO_MappingParameter[9]; - OD_obj_record_t o_160E_RPDO_MappingParameter[9]; - OD_obj_record_t o_160F_RPDO_MappingParameter[9]; - OD_obj_record_t o_1800_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1801_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1802_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1803_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1804_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1805_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1806_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1807_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1808_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1809_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_180A_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_180B_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_180C_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_180D_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_180E_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_180F_TPDO_CommunicationParameter[7]; - OD_obj_record_t o_1A00_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A01_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A02_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A03_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A04_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A05_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A06_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A07_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A08_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A09_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A0A_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A0B_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A0C_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A0D_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A0E_TPDO_MappingParameter[9]; - OD_obj_record_t o_1A0F_TPDO_MappingParameter[9]; - OD_obj_var_t o_1F80_nmtstartup; - OD_obj_record_t o_2000_BUS_Management[5]; - OD_obj_var_t o_2010_SCET; - OD_obj_var_t o_2011_UTC; - OD_obj_array_t o_2020_MCU_UniqueDeviceID; - OD_obj_record_t o_2021_MCU_Calibration[4]; - OD_obj_record_t o_2022_MCU_Sensors[9]; - OD_obj_var_t o_2100_errorStatusBits; - OD_obj_record_t o_6000_gyroscope[7]; - OD_obj_record_t o_6001_acceleration[7]; - OD_obj_var_t o_6002_IMU_Temperature; - OD_obj_record_t o_6003_magnetometerPZ1[4]; - OD_obj_record_t o_6004_magnetometerPZ2[4]; - OD_obj_record_t o_6005_magnetometerMZ1[4]; - OD_obj_record_t o_6006_magnetometerMZ2[4]; - OD_obj_record_t o_6007_magnetorquer[10]; -} ODObjs_t; - -static CO_PROGMEM ODObjs_t ODObjs = { - .o_1000_deviceType = { - .dataOrig = &OD_ROM.x1000_deviceType, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - .o_1001_errorRegister = { - .dataOrig = &OD_RAM.x1001_errorRegister, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - .o_1002_manufacturerStatusRegister = { - .dataOrig = &OD_RAM.x1002_manufacturerStatusRegister, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - .o_1003_preDefinedErrorField = { - .dataOrig0 = &OD_RAM.x1003_preDefinedErrorField_sub0, - .dataOrig = &OD_RAM.x1003_preDefinedErrorField[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_R | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_1005_COB_ID_SYNC_Message = { - .dataOrig = &OD_PERSIST_COMM.x1005_COB_ID_SYNC_Message, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1006_communicationCyclePeriod = { - .dataOrig = &OD_PERSIST_COMM.x1006_communicationCyclePeriod, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1007_synchronousWindowLength = { - .dataOrig = &OD_PERSIST_COMM.x1007_synchronousWindowLength, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1008_manufacturerDeviceName = { - .dataOrig = &OD_ROM.x1008_manufacturerDeviceName[0], - .attribute = ODA_SDO_R | ODA_STR, - .dataLength = 11 - }, - .o_1009_manufacturerHardwareVersion = { - .dataOrig = &OD_ROM.x1009_manufacturerHardwareVersion[0], - .attribute = ODA_SDO_R | ODA_STR, - .dataLength = 3 - }, - .o_100A_manufacturerSoftwareVersion = { - .dataOrig = &OD_ROM.x100A_manufacturerSoftwareVersion[0], - .attribute = ODA_SDO_R | ODA_STR, - .dataLength = 5 - }, - .o_1010_storeParameters = { - .dataOrig0 = &OD_RAM.x1010_storeParameters_sub0, - .dataOrig = &OD_RAM.x1010_storeParameters[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_1011_restoreDefaultParameters = { - .dataOrig0 = &OD_RAM.x1011_restoreDefaultParameters_sub0, - .dataOrig = &OD_RAM.x1011_restoreDefaultParameters[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_1014_COB_ID_EMCY = { - .dataOrig = &OD_PERSIST_COMM.x1014_COB_ID_EMCY, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1015_inhibitTimeEMCY = { - .dataOrig = &OD_PERSIST_COMM.x1015_inhibitTimeEMCY, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - .o_1016_consumerHeartbeatTime = { - .dataOrig0 = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime_sub0, - .dataOrig = &OD_PERSIST_COMM.x1016_consumerHeartbeatTime[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_1017_producerHeartbeatTime = { - .dataOrig = &OD_PERSIST_COMM.x1017_producerHeartbeatTime, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - .o_1018_identity = { - { - .dataOrig = &OD_ROM.x1018_identity.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_ROM.x1018_identity.vendorID, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_ROM.x1018_identity.productCode, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_ROM.x1018_identity.revisionNumber, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_ROM.x1018_identity.serialNumber, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1019_synchronousCounterOverflowValue = { - .dataOrig = &OD_PERSIST_COMM.x1019_synchronousCounterOverflowValue, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - .o_1029_errorBehavior = { - .dataOrig0 = &OD_ROM.x1029_errorBehavior_sub0, - .dataOrig = &OD_ROM.x1029_errorBehavior[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW, - .dataElementLength = 1, - .dataElementSizeof = sizeof(uint8_t), - }, - .o_1200_SDO_ServerParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ClientToServer, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.COB_ID_ServerToClient, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1200_SDO_ServerParameter.nodeID_OfTheSDO_Client, - .subIndex = 3, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1400_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1400_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1401_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1401_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1402_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1402_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1403_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1403_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1404_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1404_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1405_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1405_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1406_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1406_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1407_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1407_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1408_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1408_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1409_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1409_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_140A_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140A_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_140B_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140B_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_140C_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140C_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_140D_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140D_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_140E_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140E_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_140F_RPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.COB_ID_UsedByRPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x140F_RPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - }, - .o_1600_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1600_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1601_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1601_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1602_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1602_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1603_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1603_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1604_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1604_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1605_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1605_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1606_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1606_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1607_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1607_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1608_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1608_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1609_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1609_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_160A_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160A_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_160B_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160B_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_160C_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160C_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_160D_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160D_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_160E_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160E_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_160F_RPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x160F_RPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1800_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1800_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1801_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1801_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1802_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1802_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1803_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1803_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1804_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1804_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1805_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1805_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1806_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1806_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1807_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1807_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1808_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1808_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1809_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1809_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_180A_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180A_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_180B_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180B_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_180C_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180C_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_180D_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180D_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_180E_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180E_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_180F_TPDO_CommunicationParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.COB_ID_UsedByTPDO, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.transmissionType, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.inhibitTime, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.compatibilityEntry, - .subIndex = 4, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.eventTimer, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_PERSIST_COMM.x180F_TPDO_CommunicationParameter.SYNC_StartValue, - .subIndex = 6, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_1A00_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A00_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A01_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A01_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A02_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A02_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A03_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A03_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A04_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A04_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A05_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A05_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A06_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A06_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A07_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A07_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A08_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A08_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A09_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A09_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0A_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0A_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0B_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0B_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0C_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0C_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0D_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0D_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0E_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0E_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0F_TPDO_MappingParameter = { - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.numberOfMappedApplicationObjectsInPDO, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_1, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_2, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_3, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_4, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_5, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_6, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_7, - .subIndex = 7, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_PERSIST_COMM.x1A0F_TPDO_MappingParameter.applicationObject_8, - .subIndex = 8, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1F80_nmtstartup = { - .dataOrig = &OD_PERSIST_COMM.x1F80_nmtstartup, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_2000_BUS_Management = { - { - .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.bdefault, - .subIndex = 1, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.ttoggle, - .subIndex = 2, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.ntoggle, - .subIndex = 3, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - { - .dataOrig = &OD_PERSIST_MFR.x2000_BUS_Management.ctoggle, - .subIndex = 4, - .attribute = ODA_SDO_RW, - .dataLength = 1 - }, - }, - .o_2010_SCET = { - .dataOrig = &OD_RAM.x2010_SCET, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 8 - }, - .o_2011_UTC = { - .dataOrig = &OD_RAM.x2011_UTC, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 8 - }, - .o_2020_MCU_UniqueDeviceID = { - .dataOrig0 = &OD_RAM.x2020_MCU_UniqueDeviceID_sub0, - .dataOrig = &OD_RAM.x2020_MCU_UniqueDeviceID[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_R | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_2021_MCU_Calibration = { - { - .dataOrig = &OD_RAM.x2021_MCU_Calibration.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x2021_MCU_Calibration.TS_CAL2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x2021_MCU_Calibration.VREFINT_CAL, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - }, - .o_2022_MCU_Sensors = { - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.temperature, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.VREFINT, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBAT, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBUSP_Current, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.temperatureRaw, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.VREFINT_Raw, - .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBAT_Raw, - .subIndex = 7, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x2022_MCU_Sensors.VBUSP_CurrentRaw, - .subIndex = 8, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_2100_errorStatusBits = { - .dataOrig = &OD_RAM.x2100_errorStatusBits[0], - .attribute = ODA_SDO_R, - .dataLength = 10 - }, - .o_6000_gyroscope = { - { - .dataOrig = &OD_RAM.x6000_gyroscope.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6000_gyroscope.pitchRate, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6000_gyroscope.yawRate, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6000_gyroscope.rollRate, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6000_gyroscope.pitchRateRaw, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6000_gyroscope.yawRateRaw, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6000_gyroscope.rollRateRaw, - .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_6001_acceleration = { - { - .dataOrig = &OD_RAM.x6001_acceleration.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6001_acceleration.accx, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6001_acceleration.accy, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6001_acceleration.accz, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6001_acceleration.accXRaw, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6001_acceleration.accyRaw, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6001_acceleration.acczRaw, - .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_6002_IMU_Temperature = { - .dataOrig = &OD_RAM.x6002_IMU_Temperature, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - .o_6003_magnetometerPZ1 = { - { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magx, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magy, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6003_magnetometerPZ1.magz, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_6004_magnetometerPZ2 = { - { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magx, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magy, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6004_magnetometerPZ2.magz, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_6005_magnetometerMZ1 = { - { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magx, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magy, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6005_magnetometerMZ1.magz, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_6006_magnetometerMZ2 = { - { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magx, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magy, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6006_magnetometerMZ2.magz, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_6007_magnetorquer = { - { - .dataOrig = &OD_RAM.x6007_magnetorquer.highestSubIndexSupported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle, - .subIndex = 4, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle, - .subIndex = 5, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle, - .subIndex = 6, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerXCurrent, - .subIndex = 7, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerYCurrent, - .subIndex = 8, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x6007_magnetorquer.magnetorquerZCurrent, - .subIndex = 9, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - }, -}; - -static OD_ATTR_OD OD_entry_t ODList[] = { - {0x1000, 0x01, ODT_VAR, &ODObjs.o_1000_deviceType, NULL}, - {0x1001, 0x01, ODT_VAR, &ODObjs.o_1001_errorRegister, NULL}, - {0x1002, 0x01, ODT_VAR, &ODObjs.o_1002_manufacturerStatusRegister, NULL}, - {0x1003, 0x09, ODT_ARR, &ODObjs.o_1003_preDefinedErrorField, NULL}, - {0x1005, 0x01, ODT_VAR, &ODObjs.o_1005_COB_ID_SYNC_Message, NULL}, - {0x1006, 0x01, ODT_VAR, &ODObjs.o_1006_communicationCyclePeriod, NULL}, - {0x1007, 0x01, ODT_VAR, &ODObjs.o_1007_synchronousWindowLength, NULL}, - {0x1008, 0x01, ODT_VAR, &ODObjs.o_1008_manufacturerDeviceName, NULL}, - {0x1009, 0x01, ODT_VAR, &ODObjs.o_1009_manufacturerHardwareVersion, NULL}, - {0x100A, 0x01, ODT_VAR, &ODObjs.o_100A_manufacturerSoftwareVersion, NULL}, - {0x1010, 0x05, ODT_ARR, &ODObjs.o_1010_storeParameters, NULL}, - {0x1011, 0x05, ODT_ARR, &ODObjs.o_1011_restoreDefaultParameters, NULL}, - {0x1014, 0x01, ODT_VAR, &ODObjs.o_1014_COB_ID_EMCY, NULL}, - {0x1015, 0x01, ODT_VAR, &ODObjs.o_1015_inhibitTimeEMCY, NULL}, - {0x1016, 0x09, ODT_ARR, &ODObjs.o_1016_consumerHeartbeatTime, NULL}, - {0x1017, 0x01, ODT_VAR, &ODObjs.o_1017_producerHeartbeatTime, NULL}, - {0x1018, 0x05, ODT_REC, &ODObjs.o_1018_identity, NULL}, - {0x1019, 0x01, ODT_VAR, &ODObjs.o_1019_synchronousCounterOverflowValue, NULL}, - {0x1029, 0x07, ODT_ARR, &ODObjs.o_1029_errorBehavior, NULL}, - {0x1200, 0x04, ODT_REC, &ODObjs.o_1200_SDO_ServerParameter, NULL}, - {0x1400, 0x04, ODT_REC, &ODObjs.o_1400_RPDO_CommunicationParameter, NULL}, - {0x1401, 0x04, ODT_REC, &ODObjs.o_1401_RPDO_CommunicationParameter, NULL}, - {0x1402, 0x04, ODT_REC, &ODObjs.o_1402_RPDO_CommunicationParameter, NULL}, - {0x1403, 0x04, ODT_REC, &ODObjs.o_1403_RPDO_CommunicationParameter, NULL}, - {0x1404, 0x04, ODT_REC, &ODObjs.o_1404_RPDO_CommunicationParameter, NULL}, - {0x1405, 0x04, ODT_REC, &ODObjs.o_1405_RPDO_CommunicationParameter, NULL}, - {0x1406, 0x04, ODT_REC, &ODObjs.o_1406_RPDO_CommunicationParameter, NULL}, - {0x1407, 0x04, ODT_REC, &ODObjs.o_1407_RPDO_CommunicationParameter, NULL}, - {0x1408, 0x04, ODT_REC, &ODObjs.o_1408_RPDO_CommunicationParameter, NULL}, - {0x1409, 0x04, ODT_REC, &ODObjs.o_1409_RPDO_CommunicationParameter, NULL}, - {0x140A, 0x04, ODT_REC, &ODObjs.o_140A_RPDO_CommunicationParameter, NULL}, - {0x140B, 0x04, ODT_REC, &ODObjs.o_140B_RPDO_CommunicationParameter, NULL}, - {0x140C, 0x04, ODT_REC, &ODObjs.o_140C_RPDO_CommunicationParameter, NULL}, - {0x140D, 0x04, ODT_REC, &ODObjs.o_140D_RPDO_CommunicationParameter, NULL}, - {0x140E, 0x04, ODT_REC, &ODObjs.o_140E_RPDO_CommunicationParameter, NULL}, - {0x140F, 0x04, ODT_REC, &ODObjs.o_140F_RPDO_CommunicationParameter, NULL}, - {0x1600, 0x09, ODT_REC, &ODObjs.o_1600_RPDO_MappingParameter, NULL}, - {0x1601, 0x09, ODT_REC, &ODObjs.o_1601_RPDO_MappingParameter, NULL}, - {0x1602, 0x09, ODT_REC, &ODObjs.o_1602_RPDO_MappingParameter, NULL}, - {0x1603, 0x09, ODT_REC, &ODObjs.o_1603_RPDO_MappingParameter, NULL}, - {0x1604, 0x09, ODT_REC, &ODObjs.o_1604_RPDO_MappingParameter, NULL}, - {0x1605, 0x09, ODT_REC, &ODObjs.o_1605_RPDO_MappingParameter, NULL}, - {0x1606, 0x09, ODT_REC, &ODObjs.o_1606_RPDO_MappingParameter, NULL}, - {0x1607, 0x09, ODT_REC, &ODObjs.o_1607_RPDO_MappingParameter, NULL}, - {0x1608, 0x09, ODT_REC, &ODObjs.o_1608_RPDO_MappingParameter, NULL}, - {0x1609, 0x09, ODT_REC, &ODObjs.o_1609_RPDO_MappingParameter, NULL}, - {0x160A, 0x09, ODT_REC, &ODObjs.o_160A_RPDO_MappingParameter, NULL}, - {0x160B, 0x09, ODT_REC, &ODObjs.o_160B_RPDO_MappingParameter, NULL}, - {0x160C, 0x09, ODT_REC, &ODObjs.o_160C_RPDO_MappingParameter, NULL}, - {0x160D, 0x09, ODT_REC, &ODObjs.o_160D_RPDO_MappingParameter, NULL}, - {0x160E, 0x09, ODT_REC, &ODObjs.o_160E_RPDO_MappingParameter, NULL}, - {0x160F, 0x09, ODT_REC, &ODObjs.o_160F_RPDO_MappingParameter, NULL}, - {0x1800, 0x07, ODT_REC, &ODObjs.o_1800_TPDO_CommunicationParameter, NULL}, - {0x1801, 0x07, ODT_REC, &ODObjs.o_1801_TPDO_CommunicationParameter, NULL}, - {0x1802, 0x07, ODT_REC, &ODObjs.o_1802_TPDO_CommunicationParameter, NULL}, - {0x1803, 0x07, ODT_REC, &ODObjs.o_1803_TPDO_CommunicationParameter, NULL}, - {0x1804, 0x07, ODT_REC, &ODObjs.o_1804_TPDO_CommunicationParameter, NULL}, - {0x1805, 0x07, ODT_REC, &ODObjs.o_1805_TPDO_CommunicationParameter, NULL}, - {0x1806, 0x07, ODT_REC, &ODObjs.o_1806_TPDO_CommunicationParameter, NULL}, - {0x1807, 0x07, ODT_REC, &ODObjs.o_1807_TPDO_CommunicationParameter, NULL}, - {0x1808, 0x07, ODT_REC, &ODObjs.o_1808_TPDO_CommunicationParameter, NULL}, - {0x1809, 0x07, ODT_REC, &ODObjs.o_1809_TPDO_CommunicationParameter, NULL}, - {0x180A, 0x07, ODT_REC, &ODObjs.o_180A_TPDO_CommunicationParameter, NULL}, - {0x180B, 0x07, ODT_REC, &ODObjs.o_180B_TPDO_CommunicationParameter, NULL}, - {0x180C, 0x07, ODT_REC, &ODObjs.o_180C_TPDO_CommunicationParameter, NULL}, - {0x180D, 0x07, ODT_REC, &ODObjs.o_180D_TPDO_CommunicationParameter, NULL}, - {0x180E, 0x07, ODT_REC, &ODObjs.o_180E_TPDO_CommunicationParameter, NULL}, - {0x180F, 0x07, ODT_REC, &ODObjs.o_180F_TPDO_CommunicationParameter, NULL}, - {0x1A00, 0x09, ODT_REC, &ODObjs.o_1A00_TPDO_MappingParameter, NULL}, - {0x1A01, 0x09, ODT_REC, &ODObjs.o_1A01_TPDO_MappingParameter, NULL}, - {0x1A02, 0x09, ODT_REC, &ODObjs.o_1A02_TPDO_MappingParameter, NULL}, - {0x1A03, 0x09, ODT_REC, &ODObjs.o_1A03_TPDO_MappingParameter, NULL}, - {0x1A04, 0x09, ODT_REC, &ODObjs.o_1A04_TPDO_MappingParameter, NULL}, - {0x1A05, 0x09, ODT_REC, &ODObjs.o_1A05_TPDO_MappingParameter, NULL}, - {0x1A06, 0x09, ODT_REC, &ODObjs.o_1A06_TPDO_MappingParameter, NULL}, - {0x1A07, 0x09, ODT_REC, &ODObjs.o_1A07_TPDO_MappingParameter, NULL}, - {0x1A08, 0x09, ODT_REC, &ODObjs.o_1A08_TPDO_MappingParameter, NULL}, - {0x1A09, 0x09, ODT_REC, &ODObjs.o_1A09_TPDO_MappingParameter, NULL}, - {0x1A0A, 0x09, ODT_REC, &ODObjs.o_1A0A_TPDO_MappingParameter, NULL}, - {0x1A0B, 0x09, ODT_REC, &ODObjs.o_1A0B_TPDO_MappingParameter, NULL}, - {0x1A0C, 0x09, ODT_REC, &ODObjs.o_1A0C_TPDO_MappingParameter, NULL}, - {0x1A0D, 0x09, ODT_REC, &ODObjs.o_1A0D_TPDO_MappingParameter, NULL}, - {0x1A0E, 0x09, ODT_REC, &ODObjs.o_1A0E_TPDO_MappingParameter, NULL}, - {0x1A0F, 0x09, ODT_REC, &ODObjs.o_1A0F_TPDO_MappingParameter, NULL}, - {0x1F80, 0x01, ODT_VAR, &ODObjs.o_1F80_nmtstartup, NULL}, - {0x2000, 0x05, ODT_REC, &ODObjs.o_2000_BUS_Management, NULL}, - {0x2010, 0x01, ODT_VAR, &ODObjs.o_2010_SCET, NULL}, - {0x2011, 0x01, ODT_VAR, &ODObjs.o_2011_UTC, NULL}, - {0x2020, 0x04, ODT_ARR, &ODObjs.o_2020_MCU_UniqueDeviceID, NULL}, - {0x2021, 0x04, ODT_REC, &ODObjs.o_2021_MCU_Calibration, NULL}, - {0x2022, 0x09, ODT_REC, &ODObjs.o_2022_MCU_Sensors, NULL}, - {0x2100, 0x01, ODT_VAR, &ODObjs.o_2100_errorStatusBits, NULL}, - {0x6000, 0x07, ODT_REC, &ODObjs.o_6000_gyroscope, NULL}, - {0x6001, 0x07, ODT_REC, &ODObjs.o_6001_acceleration, NULL}, - {0x6002, 0x01, ODT_VAR, &ODObjs.o_6002_IMU_Temperature, NULL}, - {0x6003, 0x04, ODT_REC, &ODObjs.o_6003_magnetometerPZ1, NULL}, - {0x6004, 0x04, ODT_REC, &ODObjs.o_6004_magnetometerPZ2, NULL}, - {0x6005, 0x04, ODT_REC, &ODObjs.o_6005_magnetometerMZ1, NULL}, - {0x6006, 0x04, ODT_REC, &ODObjs.o_6006_magnetometerMZ2, NULL}, - {0x6007, 0x0A, ODT_REC, &ODObjs.o_6007_magnetorquer, NULL}, - {0x0000, 0x00, 0, NULL, NULL} -}; - -static OD_t _OD = { - (sizeof(ODList) / sizeof(ODList[0])) - 1, - &ODList[0] -}; - -OD_t *OD = &_OD; diff --git a/src/f0/app_adcs/source/ObjDict/OD.h b/src/f0/app_adcs/source/ObjDict/OD.h deleted file mode 100644 index ea63594f..00000000 --- a/src/f0/app_adcs/source/ObjDict/OD.h +++ /dev/null @@ -1,975 +0,0 @@ -#ifndef OD_H -#define OD_H - -#define OD_CNT_NMT 1 -#define OD_CNT_EM 1 -#define OD_CNT_SYNC 1 -#define OD_CNT_SYNC_PROD 1 -#define OD_CNT_STORAGE 1 -#define OD_CNT_EM_PROD 1 -#define OD_CNT_HB_CONS 1 -#define OD_CNT_HB_PROD 1 -#define OD_CNT_SDO_SRV 1 -#define OD_CNT_RPDO 16 -#define OD_CNT_TPDO 16 - -#define OD_CNT_ARR_1003 8 -#define OD_CNT_ARR_1010 4 -#define OD_CNT_ARR_1011 4 -#define OD_CNT_ARR_1016 8 -#define OD_CNT_ARR_1029 6 -#define OD_CNT_ARR_2020 3 - -typedef struct { - uint32_t x1000_deviceType; - char x1008_manufacturerDeviceName[12]; - char x1009_manufacturerHardwareVersion[4]; - char x100A_manufacturerSoftwareVersion[6]; - struct { - uint8_t highestSubIndexSupported; - uint32_t vendorID; - uint32_t productCode; - uint32_t revisionNumber; - uint32_t serialNumber; - } x1018_identity; - uint8_t x1029_errorBehavior_sub0; - uint8_t x1029_errorBehavior[OD_CNT_ARR_1029]; -} OD_ROM_t; - -typedef struct { - uint8_t x1001_errorRegister; - uint32_t x1002_manufacturerStatusRegister; - uint8_t x1003_preDefinedErrorField_sub0; - uint32_t x1003_preDefinedErrorField[OD_CNT_ARR_1003]; - uint8_t x1010_storeParameters_sub0; - uint32_t x1010_storeParameters[OD_CNT_ARR_1010]; - uint8_t x1011_restoreDefaultParameters_sub0; - uint32_t x1011_restoreDefaultParameters[OD_CNT_ARR_1011]; - uint64_t x2010_SCET; - uint64_t x2011_UTC; - uint8_t x2020_MCU_UniqueDeviceID_sub0; - uint32_t x2020_MCU_UniqueDeviceID[OD_CNT_ARR_2020]; - struct { - uint8_t highestSubIndexSupported; - uint16_t TS_CAL1; - uint16_t TS_CAL2; - uint16_t VREFINT_CAL; - } x2021_MCU_Calibration; - struct { - uint8_t highestSubIndexSupported; - int8_t temperature; - uint8_t VREFINT; - uint8_t VBAT; - uint8_t VBUSP_Current; - uint16_t temperatureRaw; - uint16_t VREFINT_Raw; - uint16_t VBAT_Raw; - uint16_t VBUSP_CurrentRaw; - } x2022_MCU_Sensors; - uint8_t x2100_errorStatusBits[10]; - struct { - uint8_t highestSubIndexSupported; - int16_t pitchRate; - int16_t yawRate; - int16_t rollRate; - uint16_t pitchRateRaw; - uint16_t yawRateRaw; - uint16_t rollRateRaw; - } x6000_gyroscope; - struct { - uint8_t highestSubIndexSupported; - int16_t accx; - int16_t accy; - int16_t accz; - uint16_t accXRaw; - uint16_t accyRaw; - uint16_t acczRaw; - } x6001_acceleration; - int8_t x6002_IMU_Temperature; - struct { - uint8_t highestSubIndexSupported; - int16_t magx; - int16_t magy; - int16_t magz; - } x6003_magnetometerPZ1; - struct { - uint8_t highestSubIndexSupported; - int16_t magx; - int16_t magy; - int16_t magz; - } x6004_magnetometerPZ2; - struct { - uint8_t highestSubIndexSupported; - int16_t magx; - int16_t magy; - int16_t magz; - } x6005_magnetometerMZ1; - struct { - uint8_t highestSubIndexSupported; - int16_t magx; - int16_t magy; - int16_t magz; - } x6006_magnetometerMZ2; - struct { - uint8_t highestSubIndexSupported; - int32_t setMagnetorquerXCurrent; - int32_t setMagnetorquerYCurrent; - int32_t setMagnetorquerZCurrent; - int16_t magnetorquerXPWM_DutyCycle; - int16_t magnetorquerYPWM_DutyCycle; - int16_t magnetorquerZPWM_DutyCycle; - int32_t magnetorquerXCurrent; - int32_t magnetorquerYCurrent; - int32_t magnetorquerZCurrent; - } x6007_magnetorquer; -} OD_RAM_t; - -typedef struct { - uint32_t x1005_COB_ID_SYNC_Message; - uint32_t x1006_communicationCyclePeriod; - uint32_t x1007_synchronousWindowLength; - uint32_t x1014_COB_ID_EMCY; - uint16_t x1015_inhibitTimeEMCY; - uint8_t x1016_consumerHeartbeatTime_sub0; - uint32_t x1016_consumerHeartbeatTime[OD_CNT_ARR_1016]; - uint16_t x1017_producerHeartbeatTime; - uint8_t x1019_synchronousCounterOverflowValue; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_ClientToServer; - uint32_t COB_ID_ServerToClient; - uint8_t nodeID_OfTheSDO_Client; - } x1200_SDO_ServerParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1400_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1401_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1402_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1403_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1404_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1405_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1406_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1407_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1408_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x1409_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x140A_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x140B_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x140C_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x140D_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x140E_RPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByRPDO; - uint8_t transmissionType; - uint16_t eventTimer; - } x140F_RPDO_CommunicationParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1600_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1601_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1602_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1603_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1604_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1605_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1606_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1607_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1608_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1609_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x160A_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x160B_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x160C_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x160D_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x160E_RPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x160F_RPDO_MappingParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1800_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1801_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1802_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1803_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1804_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1805_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1806_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1807_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1808_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x1809_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x180A_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x180B_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x180C_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x180D_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x180E_TPDO_CommunicationParameter; - struct { - uint8_t highestSubIndexSupported; - uint32_t COB_ID_UsedByTPDO; - uint8_t transmissionType; - uint16_t inhibitTime; - uint8_t compatibilityEntry; - uint16_t eventTimer; - uint8_t SYNC_StartValue; - } x180F_TPDO_CommunicationParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A00_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A01_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A02_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A03_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A04_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A05_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A06_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A07_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A08_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A09_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A0A_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A0B_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A0C_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A0D_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A0E_TPDO_MappingParameter; - struct { - uint8_t numberOfMappedApplicationObjectsInPDO; - uint32_t applicationObject_1; - uint32_t applicationObject_2; - uint32_t applicationObject_3; - uint32_t applicationObject_4; - uint32_t applicationObject_5; - uint32_t applicationObject_6; - uint32_t applicationObject_7; - uint32_t applicationObject_8; - } x1A0F_TPDO_MappingParameter; - uint32_t x1F80_nmtstartup; -} OD_PERSIST_COMM_t; - -typedef struct { - struct { - uint8_t highestSubIndexSupported; - uint8_t bdefault; - uint8_t ttoggle; - uint8_t ntoggle; - uint8_t ctoggle; - } x2000_BUS_Management; -} OD_PERSIST_MFR_t; - -#ifndef OD_ATTR_ROM -#define OD_ATTR_ROM -#endif -extern OD_ATTR_ROM OD_ROM_t OD_ROM; - -#ifndef OD_ATTR_RAM -#define OD_ATTR_RAM -#endif -extern OD_ATTR_RAM OD_RAM_t OD_RAM; - -#ifndef OD_ATTR_PERSIST_COMM -#define OD_ATTR_PERSIST_COMM -#endif -extern OD_ATTR_PERSIST_COMM OD_PERSIST_COMM_t OD_PERSIST_COMM; - -#ifndef OD_ATTR_PERSIST_MFR -#define OD_ATTR_PERSIST_MFR -#endif -extern OD_ATTR_PERSIST_MFR OD_PERSIST_MFR_t OD_PERSIST_MFR; - -#ifndef OD_ATTR_OD -#define OD_ATTR_OD -#endif -extern OD_ATTR_OD OD_t *OD; - -#define OD_ENTRY_H1000 &OD->list[0] -#define OD_ENTRY_H1001 &OD->list[1] -#define OD_ENTRY_H1002 &OD->list[2] -#define OD_ENTRY_H1003 &OD->list[3] -#define OD_ENTRY_H1005 &OD->list[4] -#define OD_ENTRY_H1006 &OD->list[5] -#define OD_ENTRY_H1007 &OD->list[6] -#define OD_ENTRY_H1008 &OD->list[7] -#define OD_ENTRY_H1009 &OD->list[8] -#define OD_ENTRY_H100A &OD->list[9] -#define OD_ENTRY_H1010 &OD->list[10] -#define OD_ENTRY_H1011 &OD->list[11] -#define OD_ENTRY_H1014 &OD->list[12] -#define OD_ENTRY_H1015 &OD->list[13] -#define OD_ENTRY_H1016 &OD->list[14] -#define OD_ENTRY_H1017 &OD->list[15] -#define OD_ENTRY_H1018 &OD->list[16] -#define OD_ENTRY_H1019 &OD->list[17] -#define OD_ENTRY_H1029 &OD->list[18] -#define OD_ENTRY_H1200 &OD->list[19] -#define OD_ENTRY_H1400 &OD->list[20] -#define OD_ENTRY_H1401 &OD->list[21] -#define OD_ENTRY_H1402 &OD->list[22] -#define OD_ENTRY_H1403 &OD->list[23] -#define OD_ENTRY_H1404 &OD->list[24] -#define OD_ENTRY_H1405 &OD->list[25] -#define OD_ENTRY_H1406 &OD->list[26] -#define OD_ENTRY_H1407 &OD->list[27] -#define OD_ENTRY_H1408 &OD->list[28] -#define OD_ENTRY_H1409 &OD->list[29] -#define OD_ENTRY_H140A &OD->list[30] -#define OD_ENTRY_H140B &OD->list[31] -#define OD_ENTRY_H140C &OD->list[32] -#define OD_ENTRY_H140D &OD->list[33] -#define OD_ENTRY_H140E &OD->list[34] -#define OD_ENTRY_H140F &OD->list[35] -#define OD_ENTRY_H1600 &OD->list[36] -#define OD_ENTRY_H1601 &OD->list[37] -#define OD_ENTRY_H1602 &OD->list[38] -#define OD_ENTRY_H1603 &OD->list[39] -#define OD_ENTRY_H1604 &OD->list[40] -#define OD_ENTRY_H1605 &OD->list[41] -#define OD_ENTRY_H1606 &OD->list[42] -#define OD_ENTRY_H1607 &OD->list[43] -#define OD_ENTRY_H1608 &OD->list[44] -#define OD_ENTRY_H1609 &OD->list[45] -#define OD_ENTRY_H160A &OD->list[46] -#define OD_ENTRY_H160B &OD->list[47] -#define OD_ENTRY_H160C &OD->list[48] -#define OD_ENTRY_H160D &OD->list[49] -#define OD_ENTRY_H160E &OD->list[50] -#define OD_ENTRY_H160F &OD->list[51] -#define OD_ENTRY_H1800 &OD->list[52] -#define OD_ENTRY_H1801 &OD->list[53] -#define OD_ENTRY_H1802 &OD->list[54] -#define OD_ENTRY_H1803 &OD->list[55] -#define OD_ENTRY_H1804 &OD->list[56] -#define OD_ENTRY_H1805 &OD->list[57] -#define OD_ENTRY_H1806 &OD->list[58] -#define OD_ENTRY_H1807 &OD->list[59] -#define OD_ENTRY_H1808 &OD->list[60] -#define OD_ENTRY_H1809 &OD->list[61] -#define OD_ENTRY_H180A &OD->list[62] -#define OD_ENTRY_H180B &OD->list[63] -#define OD_ENTRY_H180C &OD->list[64] -#define OD_ENTRY_H180D &OD->list[65] -#define OD_ENTRY_H180E &OD->list[66] -#define OD_ENTRY_H180F &OD->list[67] -#define OD_ENTRY_H1A00 &OD->list[68] -#define OD_ENTRY_H1A01 &OD->list[69] -#define OD_ENTRY_H1A02 &OD->list[70] -#define OD_ENTRY_H1A03 &OD->list[71] -#define OD_ENTRY_H1A04 &OD->list[72] -#define OD_ENTRY_H1A05 &OD->list[73] -#define OD_ENTRY_H1A06 &OD->list[74] -#define OD_ENTRY_H1A07 &OD->list[75] -#define OD_ENTRY_H1A08 &OD->list[76] -#define OD_ENTRY_H1A09 &OD->list[77] -#define OD_ENTRY_H1A0A &OD->list[78] -#define OD_ENTRY_H1A0B &OD->list[79] -#define OD_ENTRY_H1A0C &OD->list[80] -#define OD_ENTRY_H1A0D &OD->list[81] -#define OD_ENTRY_H1A0E &OD->list[82] -#define OD_ENTRY_H1A0F &OD->list[83] -#define OD_ENTRY_H1F80 &OD->list[84] -#define OD_ENTRY_H2000 &OD->list[85] -#define OD_ENTRY_H2010 &OD->list[86] -#define OD_ENTRY_H2011 &OD->list[87] -#define OD_ENTRY_H2020 &OD->list[88] -#define OD_ENTRY_H2021 &OD->list[89] -#define OD_ENTRY_H2022 &OD->list[90] -#define OD_ENTRY_H2100 &OD->list[91] -#define OD_ENTRY_H6000 &OD->list[92] -#define OD_ENTRY_H6001 &OD->list[93] -#define OD_ENTRY_H6002 &OD->list[94] -#define OD_ENTRY_H6003 &OD->list[95] -#define OD_ENTRY_H6004 &OD->list[96] -#define OD_ENTRY_H6005 &OD->list[97] -#define OD_ENTRY_H6006 &OD->list[98] -#define OD_ENTRY_H6007 &OD->list[99] - -#define OD_ENTRY_H1000_deviceType &OD->list[0] -#define OD_ENTRY_H1001_errorRegister &OD->list[1] -#define OD_ENTRY_H1002_manufacturerStatusRegister &OD->list[2] -#define OD_ENTRY_H1003_preDefinedErrorField &OD->list[3] -#define OD_ENTRY_H1005_COB_ID_SYNC_Message &OD->list[4] -#define OD_ENTRY_H1006_communicationCyclePeriod &OD->list[5] -#define OD_ENTRY_H1007_synchronousWindowLength &OD->list[6] -#define OD_ENTRY_H1008_manufacturerDeviceName &OD->list[7] -#define OD_ENTRY_H1009_manufacturerHardwareVersion &OD->list[8] -#define OD_ENTRY_H100A_manufacturerSoftwareVersion &OD->list[9] -#define OD_ENTRY_H1010_storeParameters &OD->list[10] -#define OD_ENTRY_H1011_restoreDefaultParameters &OD->list[11] -#define OD_ENTRY_H1014_COB_ID_EMCY &OD->list[12] -#define OD_ENTRY_H1015_inhibitTimeEMCY &OD->list[13] -#define OD_ENTRY_H1016_consumerHeartbeatTime &OD->list[14] -#define OD_ENTRY_H1017_producerHeartbeatTime &OD->list[15] -#define OD_ENTRY_H1018_identity &OD->list[16] -#define OD_ENTRY_H1019_synchronousCounterOverflowValue &OD->list[17] -#define OD_ENTRY_H1029_errorBehavior &OD->list[18] -#define OD_ENTRY_H1200_SDO_ServerParameter &OD->list[19] -#define OD_ENTRY_H1400_RPDO_CommunicationParameter &OD->list[20] -#define OD_ENTRY_H1401_RPDO_CommunicationParameter &OD->list[21] -#define OD_ENTRY_H1402_RPDO_CommunicationParameter &OD->list[22] -#define OD_ENTRY_H1403_RPDO_CommunicationParameter &OD->list[23] -#define OD_ENTRY_H1404_RPDO_CommunicationParameter &OD->list[24] -#define OD_ENTRY_H1405_RPDO_CommunicationParameter &OD->list[25] -#define OD_ENTRY_H1406_RPDO_CommunicationParameter &OD->list[26] -#define OD_ENTRY_H1407_RPDO_CommunicationParameter &OD->list[27] -#define OD_ENTRY_H1408_RPDO_CommunicationParameter &OD->list[28] -#define OD_ENTRY_H1409_RPDO_CommunicationParameter &OD->list[29] -#define OD_ENTRY_H140A_RPDO_CommunicationParameter &OD->list[30] -#define OD_ENTRY_H140B_RPDO_CommunicationParameter &OD->list[31] -#define OD_ENTRY_H140C_RPDO_CommunicationParameter &OD->list[32] -#define OD_ENTRY_H140D_RPDO_CommunicationParameter &OD->list[33] -#define OD_ENTRY_H140E_RPDO_CommunicationParameter &OD->list[34] -#define OD_ENTRY_H140F_RPDO_CommunicationParameter &OD->list[35] -#define OD_ENTRY_H1600_RPDO_MappingParameter &OD->list[36] -#define OD_ENTRY_H1601_RPDO_MappingParameter &OD->list[37] -#define OD_ENTRY_H1602_RPDO_MappingParameter &OD->list[38] -#define OD_ENTRY_H1603_RPDO_MappingParameter &OD->list[39] -#define OD_ENTRY_H1604_RPDO_MappingParameter &OD->list[40] -#define OD_ENTRY_H1605_RPDO_MappingParameter &OD->list[41] -#define OD_ENTRY_H1606_RPDO_MappingParameter &OD->list[42] -#define OD_ENTRY_H1607_RPDO_MappingParameter &OD->list[43] -#define OD_ENTRY_H1608_RPDO_MappingParameter &OD->list[44] -#define OD_ENTRY_H1609_RPDO_MappingParameter &OD->list[45] -#define OD_ENTRY_H160A_RPDO_MappingParameter &OD->list[46] -#define OD_ENTRY_H160B_RPDO_MappingParameter &OD->list[47] -#define OD_ENTRY_H160C_RPDO_MappingParameter &OD->list[48] -#define OD_ENTRY_H160D_RPDO_MappingParameter &OD->list[49] -#define OD_ENTRY_H160E_RPDO_MappingParameter &OD->list[50] -#define OD_ENTRY_H160F_RPDO_MappingParameter &OD->list[51] -#define OD_ENTRY_H1800_TPDO_CommunicationParameter &OD->list[52] -#define OD_ENTRY_H1801_TPDO_CommunicationParameter &OD->list[53] -#define OD_ENTRY_H1802_TPDO_CommunicationParameter &OD->list[54] -#define OD_ENTRY_H1803_TPDO_CommunicationParameter &OD->list[55] -#define OD_ENTRY_H1804_TPDO_CommunicationParameter &OD->list[56] -#define OD_ENTRY_H1805_TPDO_CommunicationParameter &OD->list[57] -#define OD_ENTRY_H1806_TPDO_CommunicationParameter &OD->list[58] -#define OD_ENTRY_H1807_TPDO_CommunicationParameter &OD->list[59] -#define OD_ENTRY_H1808_TPDO_CommunicationParameter &OD->list[60] -#define OD_ENTRY_H1809_TPDO_CommunicationParameter &OD->list[61] -#define OD_ENTRY_H180A_TPDO_CommunicationParameter &OD->list[62] -#define OD_ENTRY_H180B_TPDO_CommunicationParameter &OD->list[63] -#define OD_ENTRY_H180C_TPDO_CommunicationParameter &OD->list[64] -#define OD_ENTRY_H180D_TPDO_CommunicationParameter &OD->list[65] -#define OD_ENTRY_H180E_TPDO_CommunicationParameter &OD->list[66] -#define OD_ENTRY_H180F_TPDO_CommunicationParameter &OD->list[67] -#define OD_ENTRY_H1A00_TPDO_MappingParameter &OD->list[68] -#define OD_ENTRY_H1A01_TPDO_MappingParameter &OD->list[69] -#define OD_ENTRY_H1A02_TPDO_MappingParameter &OD->list[70] -#define OD_ENTRY_H1A03_TPDO_MappingParameter &OD->list[71] -#define OD_ENTRY_H1A04_TPDO_MappingParameter &OD->list[72] -#define OD_ENTRY_H1A05_TPDO_MappingParameter &OD->list[73] -#define OD_ENTRY_H1A06_TPDO_MappingParameter &OD->list[74] -#define OD_ENTRY_H1A07_TPDO_MappingParameter &OD->list[75] -#define OD_ENTRY_H1A08_TPDO_MappingParameter &OD->list[76] -#define OD_ENTRY_H1A09_TPDO_MappingParameter &OD->list[77] -#define OD_ENTRY_H1A0A_TPDO_MappingParameter &OD->list[78] -#define OD_ENTRY_H1A0B_TPDO_MappingParameter &OD->list[79] -#define OD_ENTRY_H1A0C_TPDO_MappingParameter &OD->list[80] -#define OD_ENTRY_H1A0D_TPDO_MappingParameter &OD->list[81] -#define OD_ENTRY_H1A0E_TPDO_MappingParameter &OD->list[82] -#define OD_ENTRY_H1A0F_TPDO_MappingParameter &OD->list[83] -#define OD_ENTRY_H1F80_nmtstartup &OD->list[84] -#define OD_ENTRY_H2000_BUS_Management &OD->list[85] -#define OD_ENTRY_H2010_SCET &OD->list[86] -#define OD_ENTRY_H2011_UTC &OD->list[87] -#define OD_ENTRY_H2020_MCU_UniqueDeviceID &OD->list[88] -#define OD_ENTRY_H2021_MCU_Calibration &OD->list[89] -#define OD_ENTRY_H2022_MCU_Sensors &OD->list[90] -#define OD_ENTRY_H2100_errorStatusBits &OD->list[91] -#define OD_ENTRY_H6000_gyroscope &OD->list[92] -#define OD_ENTRY_H6001_acceleration &OD->list[93] -#define OD_ENTRY_H6002_IMU_Temperature &OD->list[94] -#define OD_ENTRY_H6003_magnetometerPZ1 &OD->list[95] -#define OD_ENTRY_H6004_magnetometerPZ2 &OD->list[96] -#define OD_ENTRY_H6005_magnetometerMZ1 &OD->list[97] -#define OD_ENTRY_H6006_magnetometerMZ2 &OD->list[98] -#define OD_ENTRY_H6007_magnetorquer &OD->list[99] - -#endif /* OD_H */ diff --git a/src/f0/app_adcs/source/ObjDict/app.eds b/src/f0/app_adcs/source/ObjDict/app.eds deleted file mode 100644 index 2e2c4cd9..00000000 --- a/src/f0/app_adcs/source/ObjDict/app.eds +++ /dev/null @@ -1,5415 +0,0 @@ -[FileInfo] -FileName=app.eds -FileVersion=0 -FileRevision=1 -EDSVersion=4.0 -Description=OreSat IMU Application Object Dictionary -CreationTime=02:51PM -CreationDate=08-12-2019 -CreatedBy=Miles Simpson -ModificationTime=11:21AM -ModificationDate=11-28-2021 -ModifiedBy=Ryan Meidick - -[DeviceInfo] -VendorName=Portland State Aerospace Society -VendorNumber=0 -ProductName=OreSat IMU -ProductNumber=0 -RevisionNumber=0 -OrderCode= -BaudRate_10=1 -BaudRate_20=1 -BaudRate_50=1 -BaudRate_125=1 -BaudRate_250=1 -BaudRate_500=1 -BaudRate_800=1 -BaudRate_1000=1 -SimpleBootUpMaster=0 -SimpleBootUpSlave=0 -Granularity=0 -DynamicChannelsSupported=0 -GroupMessaging=0 -NrOfRXPDO=16 -NrOfTXPDO=16 -LSS_Supported=0 - -[DummyUsage] -Dummy0000=1 -Dummy0001=1 -Dummy0002=1 -Dummy0003=1 -Dummy0004=1 -Dummy0005=1 -Dummy0006=1 -Dummy0007=1 - -[Comments] -Lines=0 - -[MandatoryObjects] -SupportedObjects=3 -1=0x1000 -2=0x1001 -3=0x1018 - -[1000] -ParameterName=Device type -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1001] -ParameterName=Error register -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=ro -DefaultValue=0x00 -PDOMapping=1 - -[1018] -ParameterName=Identity -ObjectType=0x09 -;StorageLocation=ROM -SubNumber=5 - -[1018sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=const -DefaultValue=0x04 - -[1018sub1] -ParameterName=Vendor-ID -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1018sub2] -ParameterName=Product code -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1018sub3] -ParameterName=Revision number -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1018sub4] -ParameterName=Serial number -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[OptionalObjects] -SupportedObjects=89 -1=0x1002 -2=0x1003 -3=0x1005 -4=0x1006 -5=0x1007 -6=0x1008 -7=0x1009 -8=0x100A -9=0x1010 -10=0x1011 -11=0x1014 -12=0x1015 -13=0x1016 -14=0x1017 -15=0x1019 -16=0x1029 -17=0x1200 -18=0x1400 -19=0x1401 -20=0x1402 -21=0x1403 -22=0x1404 -23=0x1405 -24=0x1406 -25=0x1407 -26=0x1408 -27=0x1409 -28=0x140A -29=0x140B -30=0x140C -31=0x140D -32=0x140E -33=0x140F -34=0x1600 -35=0x1601 -36=0x1602 -37=0x1603 -38=0x1604 -39=0x1605 -40=0x1606 -41=0x1607 -42=0x1608 -43=0x1609 -44=0x160A -45=0x160B -46=0x160C -47=0x160D -48=0x160E -49=0x160F -50=0x1800 -51=0x1801 -52=0x1802 -53=0x1803 -54=0x1804 -55=0x1805 -56=0x1806 -57=0x1807 -58=0x1808 -59=0x1809 -60=0x180A -61=0x180B -62=0x180C -63=0x180D -64=0x180E -65=0x180F -66=0x1A00 -67=0x1A01 -68=0x1A02 -69=0x1A03 -70=0x1A04 -71=0x1A05 -72=0x1A06 -73=0x1A07 -74=0x1A08 -75=0x1A09 -76=0x1A0A -77=0x1A0B -78=0x1A0C -79=0x1A0D -80=0x1A0E -81=0x1A0F -82=0x1F80 -83=0x6000 -84=0x6001 -85=0x6002 -86=0x6003 -87=0x6004 -88=0x6005 -89=0x6006 -90=0x6007 - -[1002] -ParameterName=Manufacturer status register -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[1003] -ParameterName=Pre-defined error field -ObjectType=0x08 -;StorageLocation=RAM -SubNumber=9 - -[1003sub0] -ParameterName=Number of errors -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1003sub1] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub2] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub3] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub4] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub5] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub6] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub7] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1003sub8] -ParameterName=Standard error field -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0x00000000 - -[1005] -ParameterName=COB-ID SYNC message -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000080 - -[1006] -ParameterName=Communication cycle period -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0 - -[1007] -ParameterName=Synchronous window length -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0 - -[1008] -ParameterName=Manufacturer device name -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0009 -AccessType=ro -DefaultValue=OreSat Node - -[1009] -ParameterName=Manufacturer hardware version -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0009 -AccessType=ro -DefaultValue=0.0 - -[100A] -ParameterName=Manufacturer software version -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0009 -AccessType=ro -DefaultValue=0.0.0 - -[1010] -ParameterName=Store parameters -ObjectType=0x08 -;StorageLocation=RAM -SubNumber=5 - -[1010sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x04 - -[1010sub1] -ParameterName=Save all parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1010sub2] -ParameterName=Save communication parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1010sub3] -ParameterName=Save application parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1010sub4] -ParameterName=Save manufacturer defined parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1011] -ParameterName=Restore default parameters -ObjectType=0x08 -;StorageLocation=RAM -SubNumber=5 - -[1011sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x04 - -[1011sub1] -ParameterName=Restore all default parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1011sub2] -ParameterName=Restore communication default parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1011sub3] -ParameterName=Restore application default parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1011sub4] -ParameterName=Restore manufacturer defined default parameters -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000001 - -[1014] -ParameterName=COB-ID EMCY -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80+$NODEID - -[1015] -ParameterName=Inhibit time EMCY -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1016] -ParameterName=Consumer heartbeat time -ObjectType=0x08 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1016sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1016sub1] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub2] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub3] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub4] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub5] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub6] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub7] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1016sub8] -ParameterName=Consumer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1017] -ParameterName=Producer heartbeat time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=1000 - -[1019] -ParameterName=Synchronous counter overflow value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1029] -ParameterName=Error behavior -ObjectType=0x08 -;StorageLocation=ROM -SubNumber=7 - -[1029sub0] -ParameterName=max sub-index -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1029sub1] -ParameterName=Communication -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1029sub2] -ParameterName=Communication other -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1029sub3] -ParameterName=Communication passive -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1029sub4] -ParameterName=Generic -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1029sub5] -ParameterName=Device profile -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1029sub6] -ParameterName=Manufacturer specific -ObjectType=0x07 -;StorageLocation=ROM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1200] -ParameterName=SDO server parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1200sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1200sub1] -ParameterName=COB-ID client to server -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000000 -PDOMapping=1 - -[1200sub2] -ParameterName=COB-ID server to client -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000000 -PDOMapping=1 - -[1200sub3] -ParameterName=Node-ID of the SDO client -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0x01 - -[1400] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1400sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1400sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000200+$NODEID - -[1400sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1400sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1401] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1401sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1401sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000300+$NODEID - -[1401sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1401sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1402] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1402sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1402sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000400+$NODEID - -[1402sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1402sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1403] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1403sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1403sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000500+$NODEID - -[1403sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1403sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1404] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1404sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1404sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000200+$NODEID - -[1404sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1404sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1405] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1405sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1405sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000300+$NODEID - -[1405sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1405sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1406] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1406sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1406sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000400+$NODEID - -[1406sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1406sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1407] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1407sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1407sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000500+$NODEID - -[1407sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1407sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1408] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1408sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1408sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000200+$NODEID - -[1408sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1408sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1409] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[1409sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[1409sub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000300+$NODEID - -[1409sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1409sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[140A] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[140Asub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[140Asub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000400+$NODEID - -[140Asub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[140Asub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[140B] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[140Bsub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[140Bsub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000500+$NODEID - -[140Bsub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[140Bsub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[140C] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[140Csub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[140Csub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000200+$NODEID - -[140Csub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[140Csub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[140D] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[140Dsub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[140Dsub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000300+$NODEID - -[140Dsub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[140Dsub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[140E] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[140Esub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[140Esub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000400+$NODEID - -[140Esub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[140Esub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[140F] -ParameterName=RPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=4 - -[140Fsub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[140Fsub1] -ParameterName=COB-ID used by RPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x80000500+$NODEID - -[140Fsub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[140Fsub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1600] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1600sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1600sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1600sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1601sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1601sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1601sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1602sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1602sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1602sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1603sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1603sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1603sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1604sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1604sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1604sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1605sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1605sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1605sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1606sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1606sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1606sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1607sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1607sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1607sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1608sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1608sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1608sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1609sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1609sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1609sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160A] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[160Asub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[160Asub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Asub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160B] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[160Bsub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[160Bsub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Bsub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160C] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[160Csub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[160Csub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Csub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160D] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[160Dsub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[160Dsub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Dsub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160E] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[160Esub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[160Esub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Esub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160F] -ParameterName=RPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[160Fsub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[160Fsub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[160Fsub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1800] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1800sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1800sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x40000180+$NODEID - -[1800sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1800sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1800sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1800sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=10000 - -[1800sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1801] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1801sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1801sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x40000280+$NODEID - -[1801sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1801sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1801sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1801sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=10000 - -[1801sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1802] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1802sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1802sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x40000380+$NODEID - -[1802sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1802sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1802sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1802sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=10000 - -[1802sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1803] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1803sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1803sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x40000480+$NODEID - -[1803sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1803sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1803sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1803sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1803sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1804] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1804sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1804sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x40000180+$NODEID - -[1804sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1804sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1804sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1804sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1804sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1805] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1805sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1805sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x40000280+$NODEID - -[1805sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1805sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1805sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1805sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1805sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1806] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1806sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1806sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000380+$NODEID - -[1806sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1806sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1806sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1806sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1806sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1807] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1807sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1807sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000480+$NODEID - -[1807sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1807sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1807sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1807sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1807sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1808] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1808sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1808sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000180+$NODEID - -[1808sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1808sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1808sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1808sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1808sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1809] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[1809sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[1809sub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000280+$NODEID - -[1809sub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[1809sub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1809sub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[1809sub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[1809sub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[180A] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[180Asub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[180Asub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000380+$NODEID - -[180Asub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[180Asub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Asub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[180Asub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Asub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[180B] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[180Bsub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[180Bsub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000480+$NODEID - -[180Bsub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[180Bsub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Bsub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[180Bsub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Bsub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[180C] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[180Csub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[180Csub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000180+$NODEID - -[180Csub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[180Csub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Csub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[180Csub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Csub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[180D] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[180Dsub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[180Dsub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000280+$NODEID - -[180Dsub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[180Dsub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Dsub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[180Dsub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Dsub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[180E] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[180Esub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[180Esub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000380+$NODEID - -[180Esub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[180Esub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Esub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[180Esub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Esub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[180F] -ParameterName=TPDO communication parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=7 - -[180Fsub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[180Fsub1] -ParameterName=COB-ID used by TPDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0xC0000480+$NODEID - -[180Fsub2] -ParameterName=Transmission type -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=254 - -[180Fsub3] -ParameterName=Inhibit time -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Fsub4] -ParameterName=compatibility entry -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=ro -DefaultValue=0 - -[180Fsub5] -ParameterName=Event timer -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0006 -AccessType=rw -DefaultValue=0 - -[180Fsub6] -ParameterName=SYNC start value -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[1A00] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A00sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A00sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60000110 - -[1A00sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60000210 - -[1A00sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60000310 - -[1A00sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A00sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A00sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A00sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A00sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A01] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A01sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A01sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60010110 - -[1A01sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60010210 - -[1A01sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60010310 - -[1A01sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A01sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A01sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A01sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A01sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A02sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A02sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60020008 - -[1A02sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A02sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A03] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A03sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A03sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60030110 - -[1A03sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60030210 - -[1A03sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60030310 - -[1A03sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60040110 - -[1A03sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A03sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A03sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A03sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A04] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A04sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A04sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60040210 - -[1A04sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60040310 - -[1A04sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60050110 - -[1A04sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60050210 - -[1A04sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A04sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A04sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A04sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A05] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A05sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A05sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60050310 - -[1A05sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60060110 - -[1A05sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60060210 - -[1A05sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x60060310 - -[1A05sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A05sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A05sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A05sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A06sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A06sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A06sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A07sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A07sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A07sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A08sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A08sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A08sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A09sub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A09sub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A09sub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0A] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A0Asub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A0Asub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Asub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0B] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A0Bsub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A0Bsub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Bsub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0C] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A0Csub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A0Csub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Csub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0D] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A0Dsub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A0Dsub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Dsub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0E] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A0Esub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A0Esub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Esub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0F] -ParameterName=TPDO mapping parameter -ObjectType=0x09 -;StorageLocation=PERSIST_COMM -SubNumber=9 - -[1A0Fsub0] -ParameterName=Number of mapped application objects in PDO -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[1A0Fsub1] -ParameterName=Application object 1 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub2] -ParameterName=Application object 2 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub3] -ParameterName=Application object 3 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub4] -ParameterName=Application object 4 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub5] -ParameterName=Application object 5 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub6] -ParameterName=Application object 6 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub7] -ParameterName=Application object 7 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1A0Fsub8] -ParameterName=Application object 8 -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000000 - -[1F80] -ParameterName=NMTStartup -ObjectType=0x07 -;StorageLocation=PERSIST_COMM -DataType=0x0007 -AccessType=rw -DefaultValue=0x00000008 - -[6000] -ParameterName=Gyroscope -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=7 - -[6000sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[6000sub1] -ParameterName=Pitch rate -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6000sub2] -ParameterName=Yaw rate -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6000sub3] -ParameterName=Roll rate -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6000sub4] -ParameterName=Pitch rate raw -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6000sub5] -ParameterName=Yaw rate raw -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6000sub6] -ParameterName=Roll rate raw -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6001] -ParameterName=Acceleration -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=7 - -[6001sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x06 - -[6001sub1] -ParameterName=accX -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6001sub2] -ParameterName=accY -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6001sub3] -ParameterName=accZ -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6001sub4] -ParameterName=acc X raw -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6001sub5] -ParameterName=accY raw -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6001sub6] -ParameterName=accZ raw -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6002] -ParameterName=IMU Temperature -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0002 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6003] -ParameterName=Magnetometer PZ1 -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=4 - -[6003sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[6003sub1] -ParameterName=magX -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6003sub2] -ParameterName=magY -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6003sub3] -ParameterName=magZ -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6004] -ParameterName=Magnetometer PZ2 -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=4 - -[6004sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[6004sub1] -ParameterName=magX -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6004sub2] -ParameterName=magY -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6004sub3] -ParameterName=magZ -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6005] -ParameterName=Magnetometer MZ1 -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=4 - -[6005sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[6005sub1] -ParameterName=magX -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6005sub2] -ParameterName=magY -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6005sub3] -ParameterName=magZ -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6006] -ParameterName=Magnetometer MZ2 -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=4 - -[6006sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[6006sub1] -ParameterName=magX -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6006sub2] -ParameterName=magY -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6006sub3] -ParameterName=magZ -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - - - - -[6007] -ParameterName=Magnetorquer -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=10 - -[6007sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[6007sub1] -ParameterName=set magnetorquer X Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0004 -AccessType=rw -DefaultValue=0 -PDOMapping=1 - -[6007sub2] -ParameterName=set magnetorquer Y Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0004 -AccessType=rw -DefaultValue=0 -PDOMapping=1 - -[6007sub3] -ParameterName=set magnetorquer Z Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0004 -AccessType=rw -DefaultValue=0 -PDOMapping=1 - -[6007sub4] -ParameterName=magnetorquer X PWM Duty Cycle -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=r -DefaultValue=0 -PDOMapping=1 - -[6007sub5] -ParameterName=magnetorquer Y PWM duty Cycle -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=r -DefaultValue=0 -PDOMapping=1 - -[6007sub6] -ParameterName=magnetorquer Z PWM duty Cycle -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0003 -AccessType=r -DefaultValue=0 -PDOMapping=1 - -[6007sub7] -ParameterName=magnetorquer X Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0004 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6007sub8] -ParameterName=magnetorquer Y Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0004 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[6007sub9] -ParameterName=magnetorquer Z Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0004 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - - - - - - - - - - -[ManufacturerObjects] -SupportedObjects=7 -1=0x2000 -2=0x2010 -3=0x2011 -4=0x2020 -5=0x2021 -6=0x2022 -7=0x2100 - -[2000] -ParameterName=BUS Management -ObjectType=0x09 -;StorageLocation=PERSIST_MFR -SubNumber=5 - -[2000sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=PERSIST_MFR -DataType=0x0005 -AccessType=const -DefaultValue=0x04 - -[2000sub1] -ParameterName=Bdefault -ObjectType=0x07 -;StorageLocation=PERSIST_MFR -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[2000sub2] -ParameterName=Ttoggle -ObjectType=0x07 -;StorageLocation=PERSIST_MFR -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[2000sub3] -ParameterName=Ntoggle -ObjectType=0x07 -;StorageLocation=PERSIST_MFR -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[2000sub4] -ParameterName=Ctoggle -ObjectType=0x07 -;StorageLocation=PERSIST_MFR -DataType=0x0005 -AccessType=rw -DefaultValue=0 - -[2010] -ParameterName=SCET -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x001B -AccessType=rw -DefaultValue=0 -PDOMapping=1 - -[2011] -ParameterName=UTC -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x001B -AccessType=rw -DefaultValue=0 -PDOMapping=1 - -[2020] -ParameterName=MCU Unique Device ID -ObjectType=0x08 -;StorageLocation=RAM -SubNumber=4 - -[2020sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[2020sub1] -ParameterName=UID -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0 - -[2020sub2] -ParameterName=UID -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0 - -[2020sub3] -ParameterName=UID -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0007 -AccessType=ro -DefaultValue=0 - -[2021] -ParameterName=MCU Calibration -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=4 - -[2021sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x03 - -[2021sub1] -ParameterName=TS_CAL1 -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 - -[2021sub2] -ParameterName=TS_CAL2 -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 - -[2021sub3] -ParameterName=VREFINT_CAL -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 - -[2022] -ParameterName=MCU Sensors -ObjectType=0x09 -;StorageLocation=RAM -SubNumber=9 - -[2022sub0] -ParameterName=Highest sub-index supported -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=const -DefaultValue=0x08 - -[2022sub1] -ParameterName=Temperature -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0002 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub2] -ParameterName=VREFINT -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub3] -ParameterName=VBAT -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub4] -ParameterName=VBUSP Current -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0005 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub5] -ParameterName=Temperature (Raw) -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub6] -ParameterName=VREFINT (Raw) -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub7] -ParameterName=VBAT (Raw) -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2022sub8] -ParameterName=VBUSP Current (Raw) -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x0006 -AccessType=ro -DefaultValue=0 -PDOMapping=1 - -[2100] -ParameterName=Error Status Bits -ObjectType=0x07 -;StorageLocation=RAM -DataType=0x000A -AccessType=ro -DefaultValue=00000000000000000000 - diff --git a/src/f0/app_adcs/source/ObjDict/app.xdd b/src/f0/app_adcs/source/ObjDict/app.xdd deleted file mode 100644 index 2ae00683..00000000 --- a/src/f0/app_adcs/source/ObjDict/app.xdd +++ /dev/null @@ -1,7005 +0,0 @@ - - - - - - - CANopen device profile - 1.1 - - - Device - - 1 - 1 - CANopen - - - - - Portland State Aerospace Society - 0 - OreSat IMU - 0 - - OreSat IMU Application Object Dictionary - - 0 - 0 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * bit 16-31: Additional information -* bit 0-15: Device profile number - - - - - - - * bit 7: manufacturer specific -* bit 6: Reserved (always 0) -* bit 5: device profile specific -* bit 4: communication error (overrun, error state) -* bit 3: temperature -* bit 2: voltage -* bit 1: current -* bit 0: generic error - - - - - - - - - - - * Sub Index 0: Contains number of actual errors. 0 can be written to clear error history. -* sub-index 1 and above: - * bit 16-31: Manufacturer specific additional information - * bit 0-15: Error code as transmited in the Emergency object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * bit 31: set to 0 -* bit 30: If set, CANopen device generates SYNC object -* bit 11-29: set to 0 -* bit 0-10: 11-bit CAN-ID - - - - - - - Period of SYNC transmission in µs (0 = transmission disabled). - - - - - - - Synchronous window leghth in µs (0 = not used). All synchronous PDOs must be transmitted within this time window. - - - - - - - - - - - - - - - - - - - - - - - - Sub-indexes 1 and above: -* Reading provides information about its storage functionality: - * bit 1: If set, CANopen device saves parameters autonomously - * bit 0: If set, CANopen device saves parameters on command -* Writing value 0x65766173 ('s','a','v','e' from LSB to MSB) stores corresponding data. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sub-indexes 1 and above: -* Reading provides information about its restoring capability: - * bit 0: If set, CANopen device restores parameters -* Writing value 0x64616F6C ('l','o','a','d' from LSB to MSB) restores corresponding data. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * bit 31: If set, EMCY does NOT exist / is NOT valid -* bit 11-30: set to 0 -* bit 0-10: 11-bit CAN-ID - - - - - - - Inhibit time of emergency message in multiples of 100µs. The value 0 disables the inhibit time. - - - - - - Consumer Heartbeat Time: - * bit 24-31: set to 0 - * bit 16-23: Node ID of the monitored node. If 0 or greater than 127, sub-entry is not used. - * bit 0-15: Heartbeat time in ms (if 0, sub-intry is not used). Value should be higher than the corresponding producer heartbeat time. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Heartbeat producer time in ms (0 = disable transmission). - - - - - - - * Vendor-ID, assigned by CiA -* Product code, manufacturer specific -* Revision number: - * bit 16-31: Major revision number (CANopen behavior has changed) - * bit 0-15: Minor revision num. (CANopen behavior has not changed) -* Serial number, manufacturer specific - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Value 0: SYNC message is transmitted with data length 0. -* Value 1: reserved. -* Value 2-240: SYNC message has one data byte, which contains the counter. -* Value 241-255: reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Emergency consumer 1 to 127: -* bit 31: If set, EMCY consumer does NOT exist / is NOT valid -* bit 11-30: set to 0 -* bit 0-10: 11-bit CAN-ID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If error is detected and operating NMT state is NMT operational, this object defines behavior of the device. - -Value definition for all subindexes: - 0x00 - if operational, switch to NMT pre-operational - 0x01 - do nothing - 0x02 - switch to NMT stopped - -01 - Communication error - bus off or Heartbeat consumer error. -02 - Communication other error (critical errors - see 'Error status bits') except CAN bus passive but including bus off or Heartbeat consumer. -03 - Communication passive - any communication error including CAN bus passive. -04 - Generic error (critical errors - see 'Error status bits'). -05 - Device profile error - bit 5 in error register is set. -06 - Manufacturer specific error - bit 7 in error register is set. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Sub-indexes 1 and 2: - * bit 31: If set, SDO does NOT exist / is NOT valid - * bit 30: If set, value is assigned dynamically - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Node-ID of the SDO client, 0x01 to 0x7F - - - - - - - - - - - - - - - - - - - - - - - - - - * Sub-indexes 1 and 2: - * bit 31: If set, SDO does NOT exist / is NOT valid - * bit 30: If set, value is assigned dynamically - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Node-ID of the SDO client, 0x01 to 0x7F - - - - - - - - - - - - - - - - - - - - - - - - - - - * Sub-indexes 1 and 2: - * bit 31: If set, SDO does NOT exist / is NOT valid - * bit 30: If set, value is assigned dynamically - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Node-ID of the SDO server, 0x01 to 0x7F - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 11-30: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0-240: synchronous, processed after next reception of SYNC object - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Event timer in ms (0 = disabled) for deadline monitoring. - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * COB-ID used by RPDO: - * bit 31: If set, PDO does not exist / is not valid - * bit 30: If set, NO RTR is allowed on this PDO - * bit 11-29: set to 0 - * bit 0-10: 11-bit CAN-ID -* Transmission type: - * Value 0: synchronous (acyclic) - * Value 1-240: synchronous (cyclic every (1-240)-th sync) - * Value 241-253: not used - * Value 254: event-driven (manufacturer-specific) - * Value 255: event-driven (device profile and application profile specific) -* Inhibit time in multiple of 100µs, if the transmission type is set to 254 or 255 (0 = disabled). -* Event timer interval in ms, if the transmission type is set to 254 or 255 (0 = disabled). -* SYNC start value - * Value 0: Counter of the SYNC message shall not be processed. - * Value 1-240: The SYNC message with the counter value equal to this value shall be regarded as the first received SYNC message. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Number of mapped application objects in PDO: - * Value 0: mapping is disabled. - * Value 1: sub-index 0x01 is valid. - * Value 2-8: sub-indexes 0x01 to (0x02 to 0x08) are valid. -* Application object 1-8: - * bit 16-31: index - * bit 8-15: sub-index - * bit 0-7: data length in bits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This object configures the start-up behavior of a device that is able to perform the NMT. - - - - - - CAN Bus redundancy management as defined in ECSS-E-ST-50-15C - - - - - - - - - - Bdefault specifies the bus to be considered active after a node power-on, node hardware reset. - - - - - Ttoggle specifies the number of Consumer Heartbeat times during which the node is required to be listeningfor an NMT HB message on a particular bus before switching to the other bus. - - - - - Ntoggle specifies the number of toggles between the Nominal and Redundant bus in case of no HB message being detected. If an even number is used the last toggle puts the system into Bdefault. - - - - - The counter of Ntoggles (bus toggles) shows the count of the number of toggles that have already been performed by the device. - - - - - CCSDS Unsegmented Time Code (CUC) object for Spacecraft Elapsed Time (SCET) get/set methods - - - - - CCSDS Day Segmented Time Code (CDS) object for UTC time get/set methods - - - - - Unique Device ID of MCU - - - - - - - - - - - - - - - - - - - - - - - - Calibration values as read from the MCU - - - - - - - - - Temperature Sensor Calibration 1 - - - - - Temperature Sensor Calibration 2 - - - - - Interal VREF calibration value - - - - - Common MCU sensors between all boards. This provides the calculated values based on calibration data as well as the raw values read from the sensors directly. - - - - - - - - - MCU temperature in 1°C. - - - - - MCU Internal VREF voltage in 0.02V. - - - - - MCU VBAT voltage in 0.02V. - - - - - VBUSP current draw in 0.02mA. - - - - - Raw MCU temperature sensor value. - - - - - Raw MCU Internal VREF sensor value. - - - - - Raw MCU VBAT sensor value. - - - - - Raw VBUSP Current sensor value. - - - - - Error Status Bits indicates error conditions inside stack or inside application. Specific bit is set by CO_errorReport() function, when error occurs in program. It can be reset by CO_errorReset() function, if error is solved. Emergency message is sent on each change of any Error Status Bit. If critical bits are set, node will not be able to stay in operational state. For more information see file CO_Emergency.h. - -Default error status bits are: - -Communication or protocol errors from driver (informative): -00 - ERROR_NO_ERROR - Error Reset or No Error. -01 - ERROR_CAN_BUS_WARNING - CAN bus warning. -02 - ERROR_RXMSG_WRONG_LENGTH - Wrong data length of received CAN message. -03 - ERROR_RXMSG_OVERFLOW - Previous received CAN message wasn't processed yet. -04 - ERROR_RPDO_WRONG_LENGTH - Wrong data length of received PDO. -05 - ERROR_RPDO_OVERFLOW - Previous received PDO wasn't processed yet. -06 - ERROR_CAN_RX_BUS_PASSIVE - CAN receive bus is passive. -07 - ERROR_CAN_TX_BUS_PASSIVE - CAN transmit bus is passive. - -Communication or protocol errors from driver (critical): -08 - ERROR_08_reserved - (reserved) -09 - ERROR_09_reserved - (reserved) -0A - ERROR_CAN_TX_BUS_OFF - CAN transmit bus is off. -0B - ERROR_CAN_RXB_OVERFLOW - CAN module receive buffer has overflowed. -0C - ERROR_CAN_TX_OVERFLOW - CAN transmit buffer has overflowed. -0D - ERROR_TPDO_OUTSIDE_WINDOW - TPDO is outside SYNC window. -0E - ERROR_CAN_CONFIGURATION_FAILED - Configuration of CAN module CAN failed (Rx or Tx). -0F - ERROR_0F_reserved - (reserved) - -Communication or protocol errors (informative): -10 - ERROR_NMT_WRONG_COMMAND - Wrong NMT command received. -11 - ERROR_SYNC_EARLY - SYNC message was too early. -12 - ERROR_12_reserved - (reserved) -13 - ERROR_13_reserved - (reserved) -14 - ERROR_14_reserved - (reserved) -15 - ERROR_15_reserved - (reserved) -16 - ERROR_16_reserved - (reserved) -17 - ERROR_17_reserved - (reserved) - -Communication or protocol errors (critical): -18 - ERROR_SYNC_TIME_OUT - SYNC message timeout. -19 - ERROR_SYNC_LENGTH - Unexpected SYNC data length -1A - ERROR_PDO_WRONG_MAPPING - Error with PDO mapping. -1B - ERROR_HEARTBEAT_CONSUMER - Heartbeat consumer timeout. -1C - ERROR_HEARTBEAT_CONSUMER_REMOTE_RESET - Heartbeat consumer detected remote node reset. -1D - ERROR_1D_reserved - (reserved) -1E - ERROR_1E_reserved - (reserved) -1F - ERROR_1F_reserved - (reserved) - -Generic errors (informative): -20 - ERROR_20_reserved - (reserved) -21 - ERROR_21_reserved - (reserved) -22 - ERROR_22_reserved - (reserved) -23 - ERROR_23_reserved - (reserved) -24 - ERROR_24_reserved - (reserved) -25 - ERROR_25_reserved - (reserved) -26 - ERROR_26_reserved - (reserved) -27 - ERROR_27_reserved - (reserved) - -Generic errors (critical): -28 - ERROR_WRONG_ERROR_REPORT - Wrong parameters to <CO_errorReport()> function. -29 - ERROR_ISR_TIMER_OVERFLOW - Timer task has overflowed. -2A - ERROR_MEMORY_ALLOCATION_ERROR - Unable to allocate memory for objects. -2B - ERROR_GENERIC_ERROR - Generic error, test usage. -2C - ERROR_MAIN_TIMER_OVERFLOW - Mainline function exceeded maximum execution time. -2D - ERROR_INTERNAL_STATE_APPL - Error in application software internal state. -2E - ERROR_2E_reserved - (reserved) -2F - ERROR_2F_reserved - (reserved) - -Manufacturer specific errors: -Manufacturer may define its own constants up to index 0xFF. Of course, he must then define large enough buffer for error status bits (up to 32 bytes). - - - - - - - - - - - - - - Hundredths of degrees per second (DDD.DD format) - - - - - Hundredths of degrees per second (DDD.DD format) - - - - - Hundredths of degrees per second (DDD.DD format) - - - - - ADC units, for debugging - - - - - ADC units, for debugging - - - - - ADC units, for debugging - - - - - - - - - - - - - - Thousandths of meters per second squared (DD.DDD format) - - - - - Thousandths of meters per second squared (DD.DDD format) - - - - - Thousandths of meters per second squared (DD.DDD format) - - - - - ADC units for debugging - - - - - ADC units for debugging - - - - - ADC units for debugging - - - - - Degrees Celsius - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CANopen communication network profile - 1.1 - - - CommunicationNetwork - - 1 - 1 - CANopen - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 23815f0a..280699ab 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -288,78 +288,78 @@ int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t } void handle_can_open_data(void) { - g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent * 100, 0); - g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent * 100, 1); - g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent * 100, 2); + g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_set.x * 100, 0); + g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_set.y * 100, 1); + g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_set.z * 100, 2); - OD_RAM.x6000_gyroscope.pitchRate = g_adcs_data.gyro_sample.gyro_x; - OD_RAM.x6000_gyroscope.yawRate = g_adcs_data.gyro_sample.gyro_y; - OD_RAM.x6000_gyroscope.rollRate = g_adcs_data.gyro_sample.gyro_z; - OD_RAM.x6000_gyroscope.pitchRateRaw = g_adcs_data.gyro_sample.gyro_x_raw; - OD_RAM.x6000_gyroscope.yawRateRaw = g_adcs_data.gyro_sample.gyro_y_raw; - OD_RAM.x6000_gyroscope.rollRateRaw = g_adcs_data.gyro_sample.gyro_z_raw; + OD_RAM.x4000_gyroscope.pitch_rate = g_adcs_data.gyro_sample.gyro_x; + OD_RAM.x4000_gyroscope.yaw_rate = g_adcs_data.gyro_sample.gyro_y; + OD_RAM.x4000_gyroscope.roll_rate = g_adcs_data.gyro_sample.gyro_z; + OD_RAM.x4000_gyroscope.pitch_rate_raw = g_adcs_data.gyro_sample.gyro_x_raw; + OD_RAM.x4000_gyroscope.yaw_rate_raw = g_adcs_data.gyro_sample.gyro_y_raw; + OD_RAM.x4000_gyroscope.roll_rate_raw = g_adcs_data.gyro_sample.gyro_z_raw; - OD_RAM.x6001_acceleration.accx = g_adcs_data.accl_data.accl_x; - OD_RAM.x6001_acceleration.accy = g_adcs_data.accl_data.accl_y; - OD_RAM.x6001_acceleration.accz = g_adcs_data.accl_data.accl_z; - OD_RAM.x6001_acceleration.accXRaw = g_adcs_data.accl_data.accl_x_raw; - OD_RAM.x6001_acceleration.accyRaw = g_adcs_data.accl_data.accl_y_raw; - OD_RAM.x6001_acceleration.acczRaw = g_adcs_data.accl_data.accl_z_raw; + OD_RAM.x4001_accelerometer.x = g_adcs_data.accl_data.accl_x; + OD_RAM.x4001_accelerometer.y = g_adcs_data.accl_data.accl_y; + OD_RAM.x4001_accelerometer.z = g_adcs_data.accl_data.accl_z; + OD_RAM.x4001_accelerometer.x_raw = g_adcs_data.accl_data.accl_x_raw; + OD_RAM.x4001_accelerometer.y_raw = g_adcs_data.accl_data.accl_y_raw; + OD_RAM.x4001_accelerometer.z_raw = g_adcs_data.accl_data.accl_z_raw; - OD_RAM.x6002_IMU_Temperature = g_adcs_data.temp_c; + OD_RAM.x4002_temperature = g_adcs_data.temp_c; - OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; - OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; - OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer_current.x = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer_current.y = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer_current.z = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; - OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = g_adcs_data.mt_pwm_data[0].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = g_adcs_data.mt_pwm_data[1].current_pwm_percent; - OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = g_adcs_data.mt_pwm_data[2].current_pwm_percent; + OD_RAM.x4009_magnetorquer_pwm_percent.x = g_adcs_data.mt_pwm_data[0].current_pwm_percent; + OD_RAM.x4009_magnetorquer_pwm_percent.y = g_adcs_data.mt_pwm_data[1].current_pwm_percent; + OD_RAM.x4009_magnetorquer_pwm_percent.z = g_adcs_data.mt_pwm_data[2].current_pwm_percent; if (g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].is_working) { - OD_RAM.x6003_magnetometerPZ1.magx = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mx; - OD_RAM.x6003_magnetometerPZ1.magy = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.my; - OD_RAM.x6003_magnetometerPZ1.magz = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mz; + OD_RAM.x4003_pos_z_magnetometer_1.x = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mx; + OD_RAM.x4003_pos_z_magnetometer_1.y = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.my; + OD_RAM.x4003_pos_z_magnetometer_1.z = g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].data.mz; } else { - OD_RAM.x6003_magnetometerPZ1.magx = INT16_MAX; - OD_RAM.x6003_magnetometerPZ1.magy = INT16_MAX; - OD_RAM.x6003_magnetometerPZ1.magz = INT16_MAX; + OD_RAM.x4003_pos_z_magnetometer_1.x = INT16_MAX; + OD_RAM.x4003_pos_z_magnetometer_1.y = INT16_MAX; + OD_RAM.x4003_pos_z_magnetometer_1.z = INT16_MAX; } if (g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].is_working) { - OD_RAM.x6004_magnetometerPZ2.magx = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mx; - OD_RAM.x6004_magnetometerPZ2.magy = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.my; - OD_RAM.x6004_magnetometerPZ2.magz = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mz; + OD_RAM.x4004_pos_z_magnetometer_2.x = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mx; + OD_RAM.x4004_pos_z_magnetometer_2.y = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.my; + OD_RAM.x4004_pos_z_magnetometer_2.z = g_adcs_data.magetometer_data[EC_MAG_3_PZ_2].data.mz; } else { - OD_RAM.x6004_magnetometerPZ2.magx = INT16_MAX; - OD_RAM.x6004_magnetometerPZ2.magy = INT16_MAX; - OD_RAM.x6004_magnetometerPZ2.magz = INT16_MAX; + OD_RAM.x4004_pos_z_magnetometer_2.x = INT16_MAX; + OD_RAM.x4004_pos_z_magnetometer_2.y = INT16_MAX; + OD_RAM.x4004_pos_z_magnetometer_2.z = INT16_MAX; } if (g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].is_working) { - OD_RAM.x6005_magnetometerMZ1.magx = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mx; - OD_RAM.x6005_magnetometerMZ1.magy = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.my; - OD_RAM.x6005_magnetometerMZ1.magz = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mz; + OD_RAM.x4005_min_z_magnetometer_1.x = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mx; + OD_RAM.x4005_min_z_magnetometer_1.y = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.my; + OD_RAM.x4005_min_z_magnetometer_1.z = g_adcs_data.magetometer_data[EC_MAG_0_MZ_1].data.mz; } else { - OD_RAM.x6005_magnetometerMZ1.magx = INT16_MAX; - OD_RAM.x6005_magnetometerMZ1.magy = INT16_MAX; - OD_RAM.x6005_magnetometerMZ1.magz = INT16_MAX; + OD_RAM.x4005_min_z_magnetometer_1.x = INT16_MAX; + OD_RAM.x4005_min_z_magnetometer_1.y = INT16_MAX; + OD_RAM.x4005_min_z_magnetometer_1.z = INT16_MAX; } if (g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].is_working) { - OD_RAM.x6006_magnetometerMZ2.magx = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mx; - OD_RAM.x6006_magnetometerMZ2.magy = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.my; - OD_RAM.x6006_magnetometerMZ2.magz = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mz; + OD_RAM.x4006_min_z_magnetometer_2.x = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mx; + OD_RAM.x4006_min_z_magnetometer_2.y = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.my; + OD_RAM.x4006_min_z_magnetometer_2.z = g_adcs_data.magetometer_data[EC_MAG_1_MZ_2].data.mz; } else { - OD_RAM.x6006_magnetometerMZ2.magx = INT16_MAX; - OD_RAM.x6006_magnetometerMZ2.magy = INT16_MAX; - OD_RAM.x6006_magnetometerMZ2.magz = INT16_MAX; + OD_RAM.x4006_min_z_magnetometer_2.x = INT16_MAX; + OD_RAM.x4006_min_z_magnetometer_2.y = INT16_MAX; + OD_RAM.x4006_min_z_magnetometer_2.z = INT16_MAX; } } @@ -677,49 +677,49 @@ void print_debug_output(void) { chprintf(DEBUG_SD, "================\r\n"); chprintf(DEBUG_SD, "CANOpen Data:\r\n"); - chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.pitchRate = %d\r\n", OD_RAM.x6000_gyroscope.pitchRate); - chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.yawRate = %d\r\n", OD_RAM.x6000_gyroscope.yawRate); - chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.rollRate = %d\r\n", OD_RAM.x6000_gyroscope.rollRate); - chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.pitchRateRaw = %d\r\n", OD_RAM.x6000_gyroscope.pitchRateRaw); - chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.yawRateRaw = %d\r\n", OD_RAM.x6000_gyroscope.yawRateRaw); - chprintf(DEBUG_SD, " OD_RAM.x6000_gyroscope.rollRateRaw = %d\r\n", OD_RAM.x6000_gyroscope.rollRateRaw); - - chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accx = %d\r\n", OD_RAM.x6001_acceleration.accx); - chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accy = %d\r\n", OD_RAM.x6001_acceleration.accy); - chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accz = %d\r\n", OD_RAM.x6001_acceleration.accz); - chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accXRaw = %d\r\n", OD_RAM.x6001_acceleration.accXRaw); - chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.accyRaw = %d\r\n", OD_RAM.x6001_acceleration.accyRaw); - chprintf(DEBUG_SD, " OD_RAM.x6001_acceleration.acczRaw = %d\r\n", OD_RAM.x6001_acceleration.acczRaw); - - chprintf(DEBUG_SD, " OD_RAM.x6002_IMU_Temperature = %d\r\n", OD_RAM.x6002_IMU_Temperature); - - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.setMagnetorquerXCurrent); - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.setMagnetorquerYCurrent); - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.setMagnetorquerZCurrent); - - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerXPWM_DutyCycle); - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerYPWM_DutyCycle); - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerZPWM_DutyCycle); - - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerXCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerXCurrent); - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerYCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerYCurrent); - chprintf(DEBUG_SD, " OD_RAM.x6007_magnetorquer.magnetorquerZCurrent = %d\r\n", OD_RAM.x6007_magnetorquer.magnetorquerZCurrent); - - chprintf(DEBUG_SD, " OD_RAM.x6003_magnetometerPZ1.magx = %d\r\n", OD_RAM.x6003_magnetometerPZ1.magx); - chprintf(DEBUG_SD, " OD_RAM.x6003_magnetometerPZ1.magy = %d\r\n", OD_RAM.x6003_magnetometerPZ1.magy); - chprintf(DEBUG_SD, " OD_RAM.x6003_magnetometerPZ1.magz = %d\r\n", OD_RAM.x6003_magnetometerPZ1.magz); - - chprintf(DEBUG_SD, " OD_RAM.x6004_magnetometerPZ2.magx = %d\r\n", OD_RAM.x6004_magnetometerPZ2.magx); - chprintf(DEBUG_SD, " OD_RAM.x6004_magnetometerPZ2.magy = %d\r\n", OD_RAM.x6004_magnetometerPZ2.magy); - chprintf(DEBUG_SD, " OD_RAM.x6004_magnetometerPZ2.magz = %d\r\n", OD_RAM.x6004_magnetometerPZ2.magz); - - chprintf(DEBUG_SD, " OD_RAM.x6005_magnetometerMZ1.magx = %d\r\n", OD_RAM.x6005_magnetometerMZ1.magx); - chprintf(DEBUG_SD, " OD_RAM.x6005_magnetometerMZ1.magy = %d\r\n", OD_RAM.x6005_magnetometerMZ1.magy); - chprintf(DEBUG_SD, " OD_RAM.x6005_magnetometerMZ1.magz = %d\r\n", OD_RAM.x6005_magnetometerMZ1.magz); - - chprintf(DEBUG_SD, " OD_RAM.x6006_magnetometerMZ2.magx = %d\r\n", OD_RAM.x6006_magnetometerMZ2.magx); - chprintf(DEBUG_SD, " OD_RAM.x6006_magnetometerMZ2.magy = %d\r\n", OD_RAM.x6006_magnetometerMZ2.magy); - chprintf(DEBUG_SD, " OD_RAM.x6006_magnetometerMZ2.magz = %d\r\n", OD_RAM.x6006_magnetometerMZ2.magz); + chprintf(DEBUG_SD, " OD_RAM.x4000_gyroscope.pitch_rate = %d\r\n", OD_RAM.x4000_gyroscope.pitch_rate); + chprintf(DEBUG_SD, " OD_RAM.x4000_gyroscope.yaw_rate = %d\r\n", OD_RAM.x4000_gyroscope.yaw_rate); + chprintf(DEBUG_SD, " OD_RAM.x4000_gyroscope.roll_rate = %d\r\n", OD_RAM.x4000_gyroscope.roll_rate); + chprintf(DEBUG_SD, " OD_RAM.x4000_gyroscope.pitch_rate_raw = %d\r\n", OD_RAM.x4000_gyroscope.pitch_rate_raw); + chprintf(DEBUG_SD, " OD_RAM.x4000_gyroscope.yaw_rate_raw = %d\r\n", OD_RAM.x4000_gyroscope.yaw_rate_raw); + chprintf(DEBUG_SD, " OD_RAM.x4000_gyroscope.roll_rate_raw = %d\r\n", OD_RAM.x4000_gyroscope.roll_rate_raw); + + chprintf(DEBUG_SD, " OD_RAM.x4001_accelerometer.x = %d\r\n", OD_RAM.x4001_accelerometer.x); + chprintf(DEBUG_SD, " OD_RAM.x4001_accelerometer.y = %d\r\n", OD_RAM.x4001_accelerometer.y); + chprintf(DEBUG_SD, " OD_RAM.x4001_accelerometer.z = %d\r\n", OD_RAM.x4001_accelerometer.z); + chprintf(DEBUG_SD, " OD_RAM.x4001_accelerometer.x_raw = %d\r\n", OD_RAM.x4001_accelerometer.x_raw); + chprintf(DEBUG_SD, " OD_RAM.x4001_accelerometer.y_raw = %d\r\n", OD_RAM.x4001_accelerometer.y_raw); + chprintf(DEBUG_SD, " OD_RAM.x4001_accelerometer.z_raw = %d\r\n", OD_RAM.x4001_accelerometer.z_raw); + + chprintf(DEBUG_SD, " OD_RAM.x4002_temperature = %d\r\n", OD_RAM.x4002_temperature); + + chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_set.x = %d\r\n", OD_RAM.x4008_magnetorquer_current_set.x); + chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_set.y = %d\r\n", OD_RAM.x4008_magnetorquer_current_set.y); + chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_set.z = %d\r\n", OD_RAM.x4008_magnetorquer_current_set.z); + + chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_pwm_percent.x = %d\r\n", OD_RAM.x4009_magnetorquer_pwm_percent.x); + chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_pwm_percent.y = %d\r\n", OD_RAM.x4009_magnetorquer_pwm_percent.y); + chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_pwm_percent.z = %d\r\n", OD_RAM.x4009_magnetorquer_pwm_percent.z); + + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.x = %d\r\n", OD_RAM.x4007_magnetorquer_current.x); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.y = %d\r\n", OD_RAM.x4007_magnetorquer_current.y); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.z = %d\r\n", OD_RAM.x4007_magnetorquer_current.z); + + chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.x = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.x); + chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.y = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.y); + chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.z = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.z); + + chprintf(DEBUG_SD, " OD_RAM.x4004_pos_z_magnetometer_2.x = %d\r\n", OD_RAM.x4004_pos_z_magnetometer_2.x); + chprintf(DEBUG_SD, " OD_RAM.x4004_pos_z_magnetometer_2.y = %d\r\n", OD_RAM.x4004_pos_z_magnetometer_2.y); + chprintf(DEBUG_SD, " OD_RAM.x4004_pos_z_magnetometer_2.z = %d\r\n", OD_RAM.x4004_pos_z_magnetometer_2.z); + + chprintf(DEBUG_SD, " OD_RAM.x4005_min_z_magnetometer_1.x = %d\r\n", OD_RAM.x4005_min_z_magnetometer_1.x); + chprintf(DEBUG_SD, " OD_RAM.x4005_min_z_magnetometer_1.y = %d\r\n", OD_RAM.x4005_min_z_magnetometer_1.y); + chprintf(DEBUG_SD, " OD_RAM.x4005_min_z_magnetometer_1.z = %d\r\n", OD_RAM.x4005_min_z_magnetometer_1.z); + + chprintf(DEBUG_SD, " OD_RAM.x4005_min_z_magnetometer_1.x = %d\r\n", OD_RAM.x4006_min_z_magnetometer_2.x); + chprintf(DEBUG_SD, " OD_RAM.x4005_min_z_magnetometer_1.y = %d\r\n", OD_RAM.x4006_min_z_magnetometer_2.y); + chprintf(DEBUG_SD, " OD_RAM.x4005_min_z_magnetometer_1.z = %d\r\n", OD_RAM.x4006_min_z_magnetometer_2.z); From 2ce2e35679014cfbfe746bc372b7a08c4ed6eae4 Mon Sep 17 00:00:00 2001 From: DC Date: Wed, 8 Nov 2023 22:27:30 -0800 Subject: [PATCH 17/20] Updates to ADCS code to reflect new changes in can open --- src/f0/app_adcs/od/OD.c | 212 +++++++++++++++++++++++----------- src/f0/app_adcs/od/OD.h | 174 ++++++++++++++++------------ src/f0/app_adcs/source/adcs.c | 36 +++--- 3 files changed, 259 insertions(+), 163 deletions(-) diff --git a/src/f0/app_adcs/od/OD.c b/src/f0/app_adcs/od/OD.c index f776a528..06859769 100644 --- a/src/f0/app_adcs/od/OD.c +++ b/src/f0/app_adcs/od/OD.c @@ -100,7 +100,7 @@ OD_ATTR_RAM OD_RAM_t OD_RAM = { .cob_id = 0x180, .transmission_type = 0xFE, .inhibit_time = 0x0, - .event_timer = 0x0, + .event_timer = 0x3E8, .sync_start_value = 0x0, }, .x1809_tpdo_10_communication_parameters = { @@ -111,6 +111,14 @@ OD_ATTR_RAM OD_RAM_t OD_RAM = { .event_timer = 0x3E8, .sync_start_value = 0x0, }, + .x180A_tpdo_11_communication_parameters = { + .highest_index_supported = 0x6, + .cob_id = 0x380, + .transmission_type = 0xFE, + .inhibit_time = 0x0, + .event_timer = 0x3E8, + .sync_start_value = 0x0, + }, .x1A00_tpdo_1_mapping_parameters = { .highest_index_supported = 0x3, .mapping_object_1 = 0x40000110, @@ -152,22 +160,25 @@ OD_ATTR_RAM OD_RAM_t OD_RAM = { .mapping_object_3 = 0x40060310, }, .x1A07_tpdo_8_mapping_parameters = { - .highest_index_supported = 0x3, + .highest_index_supported = 0x2, .mapping_object_1 = 0x40070120, .mapping_object_2 = 0x40070220, - .mapping_object_3 = 0x40070310, }, .x1A08_tpdo_9_mapping_parameters = { - .highest_index_supported = 0x3, + .highest_index_supported = 0x2, .mapping_object_1 = 0x40080120, .mapping_object_2 = 0x40080220, - .mapping_object_3 = 0x40080310, }, .x1A09_tpdo_10_mapping_parameters = { - .highest_index_supported = 0x3, + .highest_index_supported = 0x2, .mapping_object_1 = 0x40090120, .mapping_object_2 = 0x40090220, - .mapping_object_3 = 0x40090310, + }, + .x1A0A_tpdo_11_mapping_parameters = { + .highest_index_supported = 0x3, + .mapping_object_1 = 0x40100110, + .mapping_object_2 = 0x40100210, + .mapping_object_3 = 0x40100310, }, .x2010_scet = 0x0, .x2011_utc = 0x0, @@ -227,19 +238,22 @@ OD_ATTR_RAM OD_RAM_t OD_RAM = { .y = 0x0, .z = 0x0, }, - .x4007_magnetorquer_current = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, + .x4007_magnetorquer_current_x = { + .highest_index_supported = 0x2, + .current_feedback = 0x0, + .current_set = 0x0, }, - .x4008_magnetorquer_current_set = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, + .x4008_magnetorquer_current_y = { + .highest_index_supported = 0x2, + .current_feedback = 0x0, + .current_set = 0x0, }, - .x4009_magnetorquer_pwm_percent = { + .x4009_magnetorquer_current_z = { + .highest_index_supported = 0x2, + .current_feedback = 0x0, + .current_set = 0x0, + }, + .x4010_magnetorquer_pwm_percent = { .highest_index_supported = 0x3, .x = 0x0, .y = 0x0, @@ -269,6 +283,7 @@ typedef struct { OD_obj_record_t o_1807_tpdo_8_communication_parameters[6]; OD_obj_record_t o_1808_tpdo_9_communication_parameters[6]; OD_obj_record_t o_1809_tpdo_10_communication_parameters[6]; + OD_obj_record_t o_180A_tpdo_11_communication_parameters[6]; OD_obj_record_t o_1A00_tpdo_1_mapping_parameters[4]; OD_obj_record_t o_1A01_tpdo_2_mapping_parameters[4]; OD_obj_record_t o_1A02_tpdo_3_mapping_parameters[2]; @@ -276,9 +291,10 @@ typedef struct { OD_obj_record_t o_1A04_tpdo_5_mapping_parameters[4]; OD_obj_record_t o_1A05_tpdo_6_mapping_parameters[4]; OD_obj_record_t o_1A06_tpdo_7_mapping_parameters[4]; - OD_obj_record_t o_1A07_tpdo_8_mapping_parameters[4]; - OD_obj_record_t o_1A08_tpdo_9_mapping_parameters[4]; - OD_obj_record_t o_1A09_tpdo_10_mapping_parameters[4]; + OD_obj_record_t o_1A07_tpdo_8_mapping_parameters[3]; + OD_obj_record_t o_1A08_tpdo_9_mapping_parameters[3]; + OD_obj_record_t o_1A09_tpdo_10_mapping_parameters[3]; + OD_obj_record_t o_1A0A_tpdo_11_mapping_parameters[4]; OD_obj_var_t o_2010_scet; OD_obj_var_t o_2011_utc; OD_obj_var_t o_3000_satellite_id; @@ -292,9 +308,10 @@ typedef struct { OD_obj_record_t o_4004_pos_z_magnetometer_2[4]; OD_obj_record_t o_4005_min_z_magnetometer_1[4]; OD_obj_record_t o_4006_min_z_magnetometer_2[4]; - OD_obj_record_t o_4007_magnetorquer_current[4]; - OD_obj_record_t o_4008_magnetorquer_current_set[4]; - OD_obj_record_t o_4009_magnetorquer_pwm_percent[4]; + OD_obj_record_t o_4007_magnetorquer_current_x[3]; + OD_obj_record_t o_4008_magnetorquer_current_y[3]; + OD_obj_record_t o_4009_magnetorquer_current_z[3]; + OD_obj_record_t o_4010_magnetorquer_pwm_percent[4]; } ODObjs_t; static CO_PROGMEM ODObjs_t ODObjs = { @@ -787,6 +804,44 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataLength = 1 }, }, + .o_180A_tpdo_11_communication_parameters = { + { + .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.cob_id, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.transmission_type, + .subIndex = 2, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.inhibit_time, + .subIndex = 3, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.event_timer, + .subIndex = 5, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 2 + }, + { + .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.sync_start_value, + .subIndex = 6, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + }, .o_1A00_tpdo_1_mapping_parameters = { { .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.highest_index_supported, @@ -976,12 +1031,6 @@ static CO_PROGMEM ODObjs_t ODObjs = { .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, - { - .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, }, .o_1A08_tpdo_9_mapping_parameters = { { @@ -1002,12 +1051,6 @@ static CO_PROGMEM ODObjs_t ODObjs = { .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, - { - .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, }, .o_1A09_tpdo_10_mapping_parameters = { { @@ -1028,8 +1071,28 @@ static CO_PROGMEM ODObjs_t ODObjs = { .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 }, + }, + .o_1A0A_tpdo_11_mapping_parameters = { { - .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.mapping_object_3, + .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.mapping_object_1, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.mapping_object_2, + .subIndex = 2, + .attribute = ODA_SDO_R | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.mapping_object_3, .subIndex = 3, .attribute = ODA_SDO_R | ODA_MB, .dataLength = 4 @@ -1298,79 +1361,87 @@ static CO_PROGMEM ODObjs_t ODObjs = { .dataLength = 2 }, }, - .o_4007_magnetorquer_current = { + .o_4007_magnetorquer_current_x = { { - .dataOrig = &OD_RAM.x4007_magnetorquer_current.highest_index_supported, + .dataOrig = &OD_RAM.x4007_magnetorquer_current_x.highest_index_supported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x4007_magnetorquer_current.x, + .dataOrig = &OD_RAM.x4007_magnetorquer_current_x.current_feedback, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_RAM.x4007_magnetorquer_current.y, + .dataOrig = &OD_RAM.x4007_magnetorquer_current_x.current_set, .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 4 }, - { - .dataOrig = &OD_RAM.x4007_magnetorquer_current.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, }, - .o_4008_magnetorquer_current_set = { + .o_4008_magnetorquer_current_y = { { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.highest_index_supported, + .dataOrig = &OD_RAM.x4008_magnetorquer_current_y.highest_index_supported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.x, + .dataOrig = &OD_RAM.x4008_magnetorquer_current_y.current_feedback, .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 4 }, { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.y, + .dataOrig = &OD_RAM.x4008_magnetorquer_current_y.current_set, .subIndex = 2, .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, .dataLength = 4 }, + }, + .o_4009_magnetorquer_current_z = { { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_set.z, - .subIndex = 3, + .dataOrig = &OD_RAM.x4009_magnetorquer_current_z.highest_index_supported, + .subIndex = 0, + .attribute = ODA_SDO_R, + .dataLength = 1 + }, + { + .dataOrig = &OD_RAM.x4009_magnetorquer_current_z.current_feedback, + .subIndex = 1, + .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, + .dataLength = 4 + }, + { + .dataOrig = &OD_RAM.x4009_magnetorquer_current_z.current_set, + .subIndex = 2, .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 2 + .dataLength = 4 }, }, - .o_4009_magnetorquer_pwm_percent = { + .o_4010_magnetorquer_pwm_percent = { { - .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.highest_index_supported, + .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.highest_index_supported, .subIndex = 0, .attribute = ODA_SDO_R, .dataLength = 1 }, { - .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.x, + .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.x, .subIndex = 1, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 + .dataLength = 2 }, { - .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.y, + .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.y, .subIndex = 2, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 + .dataLength = 2 }, { - .dataOrig = &OD_RAM.x4009_magnetorquer_pwm_percent.z, + .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.z, .subIndex = 3, .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, .dataLength = 2 @@ -1400,6 +1471,7 @@ static OD_ATTR_OD OD_entry_t ODList[] = { {0x1807, 0x06, ODT_REC, &ODObjs.o_1807_tpdo_8_communication_parameters, NULL}, {0x1808, 0x06, ODT_REC, &ODObjs.o_1808_tpdo_9_communication_parameters, NULL}, {0x1809, 0x06, ODT_REC, &ODObjs.o_1809_tpdo_10_communication_parameters, NULL}, + {0x180A, 0x06, ODT_REC, &ODObjs.o_180A_tpdo_11_communication_parameters, NULL}, {0x1A00, 0x04, ODT_REC, &ODObjs.o_1A00_tpdo_1_mapping_parameters, NULL}, {0x1A01, 0x04, ODT_REC, &ODObjs.o_1A01_tpdo_2_mapping_parameters, NULL}, {0x1A02, 0x02, ODT_REC, &ODObjs.o_1A02_tpdo_3_mapping_parameters, NULL}, @@ -1407,9 +1479,10 @@ static OD_ATTR_OD OD_entry_t ODList[] = { {0x1A04, 0x04, ODT_REC, &ODObjs.o_1A04_tpdo_5_mapping_parameters, NULL}, {0x1A05, 0x04, ODT_REC, &ODObjs.o_1A05_tpdo_6_mapping_parameters, NULL}, {0x1A06, 0x04, ODT_REC, &ODObjs.o_1A06_tpdo_7_mapping_parameters, NULL}, - {0x1A07, 0x04, ODT_REC, &ODObjs.o_1A07_tpdo_8_mapping_parameters, NULL}, - {0x1A08, 0x04, ODT_REC, &ODObjs.o_1A08_tpdo_9_mapping_parameters, NULL}, - {0x1A09, 0x04, ODT_REC, &ODObjs.o_1A09_tpdo_10_mapping_parameters, NULL}, + {0x1A07, 0x03, ODT_REC, &ODObjs.o_1A07_tpdo_8_mapping_parameters, NULL}, + {0x1A08, 0x03, ODT_REC, &ODObjs.o_1A08_tpdo_9_mapping_parameters, NULL}, + {0x1A09, 0x03, ODT_REC, &ODObjs.o_1A09_tpdo_10_mapping_parameters, NULL}, + {0x1A0A, 0x04, ODT_REC, &ODObjs.o_1A0A_tpdo_11_mapping_parameters, NULL}, {0x2010, 0x01, ODT_VAR, &ODObjs.o_2010_scet, NULL}, {0x2011, 0x01, ODT_VAR, &ODObjs.o_2011_utc, NULL}, {0x3000, 0x01, ODT_VAR, &ODObjs.o_3000_satellite_id, NULL}, @@ -1423,9 +1496,10 @@ static OD_ATTR_OD OD_entry_t ODList[] = { {0x4004, 0x04, ODT_REC, &ODObjs.o_4004_pos_z_magnetometer_2, NULL}, {0x4005, 0x04, ODT_REC, &ODObjs.o_4005_min_z_magnetometer_1, NULL}, {0x4006, 0x04, ODT_REC, &ODObjs.o_4006_min_z_magnetometer_2, NULL}, - {0x4007, 0x04, ODT_REC, &ODObjs.o_4007_magnetorquer_current, NULL}, - {0x4008, 0x04, ODT_REC, &ODObjs.o_4008_magnetorquer_current_set, NULL}, - {0x4009, 0x04, ODT_REC, &ODObjs.o_4009_magnetorquer_pwm_percent, NULL}, + {0x4007, 0x03, ODT_REC, &ODObjs.o_4007_magnetorquer_current_x, NULL}, + {0x4008, 0x03, ODT_REC, &ODObjs.o_4008_magnetorquer_current_y, NULL}, + {0x4009, 0x03, ODT_REC, &ODObjs.o_4009_magnetorquer_current_z, NULL}, + {0x4010, 0x04, ODT_REC, &ODObjs.o_4010_magnetorquer_pwm_percent, NULL}, {0x0000, 0x00, 0, NULL, NULL} }; diff --git a/src/f0/app_adcs/od/OD.h b/src/f0/app_adcs/od/OD.h index 5c7d7f08..1d66dbe5 100644 --- a/src/f0/app_adcs/od/OD.h +++ b/src/f0/app_adcs/od/OD.h @@ -10,7 +10,7 @@ #define OD_CNT_HB_CONS 1 #define OD_CNT_HB_PROD 1 #define OD_CNT_SDO_SRV 1 -#define OD_CNT_TPDO 10 +#define OD_CNT_TPDO 11 #define OD_CNT_ARR_1003 8 #define OD_CNT_ARR_1016 1 @@ -120,6 +120,14 @@ typedef struct { uint16_t event_timer; uint8_t sync_start_value; } x1809_tpdo_10_communication_parameters; + struct { + uint8_t highest_index_supported; + uint32_t cob_id; + uint8_t transmission_type; + uint16_t inhibit_time; + uint16_t event_timer; + uint8_t sync_start_value; + } x180A_tpdo_11_communication_parameters; struct { uint8_t highest_index_supported; uint32_t mapping_object_1; @@ -164,20 +172,23 @@ typedef struct { uint8_t highest_index_supported; uint32_t mapping_object_1; uint32_t mapping_object_2; - uint32_t mapping_object_3; } x1A07_tpdo_8_mapping_parameters; struct { uint8_t highest_index_supported; uint32_t mapping_object_1; uint32_t mapping_object_2; - uint32_t mapping_object_3; } x1A08_tpdo_9_mapping_parameters; struct { uint8_t highest_index_supported; uint32_t mapping_object_1; uint32_t mapping_object_2; - uint32_t mapping_object_3; } x1A09_tpdo_10_mapping_parameters; + struct { + uint8_t highest_index_supported; + uint32_t mapping_object_1; + uint32_t mapping_object_2; + uint32_t mapping_object_3; + } x1A0A_tpdo_11_mapping_parameters; uint64_t x2010_scet; uint64_t x2011_utc; uint8_t x3000_satellite_id; @@ -238,22 +249,25 @@ typedef struct { } x4006_min_z_magnetometer_2; struct { uint8_t highest_index_supported; - int32_t x; - int32_t y; - int16_t z; - } x4007_magnetorquer_current; + int32_t current_feedback; + int32_t current_set; + } x4007_magnetorquer_current_x; struct { uint8_t highest_index_supported; - int32_t x; - int32_t y; - int16_t z; - } x4008_magnetorquer_current_set; + int32_t current_feedback; + int32_t current_set; + } x4008_magnetorquer_current_y; struct { uint8_t highest_index_supported; - int32_t x; - int32_t y; + int32_t current_feedback; + int32_t current_set; + } x4009_magnetorquer_current_z; + struct { + uint8_t highest_index_supported; + int16_t x; + int16_t y; int16_t z; - } x4009_magnetorquer_pwm_percent; + } x4010_magnetorquer_pwm_percent; } OD_RAM_t; #ifndef OD_ATTR_RAM @@ -287,32 +301,35 @@ extern OD_ATTR_OD OD_t *OD; #define OD_ENTRY_H1807 &OD->list[18] #define OD_ENTRY_H1808 &OD->list[19] #define OD_ENTRY_H1809 &OD->list[20] -#define OD_ENTRY_H1A00 &OD->list[21] -#define OD_ENTRY_H1A01 &OD->list[22] -#define OD_ENTRY_H1A02 &OD->list[23] -#define OD_ENTRY_H1A03 &OD->list[24] -#define OD_ENTRY_H1A04 &OD->list[25] -#define OD_ENTRY_H1A05 &OD->list[26] -#define OD_ENTRY_H1A06 &OD->list[27] -#define OD_ENTRY_H1A07 &OD->list[28] -#define OD_ENTRY_H1A08 &OD->list[29] -#define OD_ENTRY_H1A09 &OD->list[30] -#define OD_ENTRY_H2010 &OD->list[31] -#define OD_ENTRY_H2011 &OD->list[32] -#define OD_ENTRY_H3000 &OD->list[33] -#define OD_ENTRY_H3001 &OD->list[34] -#define OD_ENTRY_H3002 &OD->list[35] -#define OD_ENTRY_H3003 &OD->list[36] -#define OD_ENTRY_H4000 &OD->list[37] -#define OD_ENTRY_H4001 &OD->list[38] -#define OD_ENTRY_H4002 &OD->list[39] -#define OD_ENTRY_H4003 &OD->list[40] -#define OD_ENTRY_H4004 &OD->list[41] -#define OD_ENTRY_H4005 &OD->list[42] -#define OD_ENTRY_H4006 &OD->list[43] -#define OD_ENTRY_H4007 &OD->list[44] -#define OD_ENTRY_H4008 &OD->list[45] -#define OD_ENTRY_H4009 &OD->list[46] +#define OD_ENTRY_H180A &OD->list[21] +#define OD_ENTRY_H1A00 &OD->list[22] +#define OD_ENTRY_H1A01 &OD->list[23] +#define OD_ENTRY_H1A02 &OD->list[24] +#define OD_ENTRY_H1A03 &OD->list[25] +#define OD_ENTRY_H1A04 &OD->list[26] +#define OD_ENTRY_H1A05 &OD->list[27] +#define OD_ENTRY_H1A06 &OD->list[28] +#define OD_ENTRY_H1A07 &OD->list[29] +#define OD_ENTRY_H1A08 &OD->list[30] +#define OD_ENTRY_H1A09 &OD->list[31] +#define OD_ENTRY_H1A0A &OD->list[32] +#define OD_ENTRY_H2010 &OD->list[33] +#define OD_ENTRY_H2011 &OD->list[34] +#define OD_ENTRY_H3000 &OD->list[35] +#define OD_ENTRY_H3001 &OD->list[36] +#define OD_ENTRY_H3002 &OD->list[37] +#define OD_ENTRY_H3003 &OD->list[38] +#define OD_ENTRY_H4000 &OD->list[39] +#define OD_ENTRY_H4001 &OD->list[40] +#define OD_ENTRY_H4002 &OD->list[41] +#define OD_ENTRY_H4003 &OD->list[42] +#define OD_ENTRY_H4004 &OD->list[43] +#define OD_ENTRY_H4005 &OD->list[44] +#define OD_ENTRY_H4006 &OD->list[45] +#define OD_ENTRY_H4007 &OD->list[46] +#define OD_ENTRY_H4008 &OD->list[47] +#define OD_ENTRY_H4009 &OD->list[48] +#define OD_ENTRY_H4010 &OD->list[49] #define OD_ENTRY_H1000_DEVICE_TYPE &OD->list[0] #define OD_ENTRY_H1001_ERROR_REGISTER &OD->list[1] @@ -335,32 +352,35 @@ extern OD_ATTR_OD OD_t *OD; #define OD_ENTRY_H1807_TPDO_8_COMMUNICATION_PARAMETERS &OD->list[18] #define OD_ENTRY_H1808_TPDO_9_COMMUNICATION_PARAMETERS &OD->list[19] #define OD_ENTRY_H1809_TPDO_10_COMMUNICATION_PARAMETERS &OD->list[20] -#define OD_ENTRY_H1A00_TPDO_1_MAPPING_PARAMETERS &OD->list[21] -#define OD_ENTRY_H1A01_TPDO_2_MAPPING_PARAMETERS &OD->list[22] -#define OD_ENTRY_H1A02_TPDO_3_MAPPING_PARAMETERS &OD->list[23] -#define OD_ENTRY_H1A03_TPDO_4_MAPPING_PARAMETERS &OD->list[24] -#define OD_ENTRY_H1A04_TPDO_5_MAPPING_PARAMETERS &OD->list[25] -#define OD_ENTRY_H1A05_TPDO_6_MAPPING_PARAMETERS &OD->list[26] -#define OD_ENTRY_H1A06_TPDO_7_MAPPING_PARAMETERS &OD->list[27] -#define OD_ENTRY_H1A07_TPDO_8_MAPPING_PARAMETERS &OD->list[28] -#define OD_ENTRY_H1A08_TPDO_9_MAPPING_PARAMETERS &OD->list[29] -#define OD_ENTRY_H1A09_TPDO_10_MAPPING_PARAMETERS &OD->list[30] -#define OD_ENTRY_H2010_SCET &OD->list[31] -#define OD_ENTRY_H2011_UTC &OD->list[32] -#define OD_ENTRY_H3000_SATELLITE_ID &OD->list[33] -#define OD_ENTRY_H3001_FLIGHT_MODE &OD->list[34] -#define OD_ENTRY_H3002_VERSIONS &OD->list[35] -#define OD_ENTRY_H3003_SYSTEM &OD->list[36] -#define OD_ENTRY_H4000_GYROSCOPE &OD->list[37] -#define OD_ENTRY_H4001_ACCELEROMETER &OD->list[38] -#define OD_ENTRY_H4002_TEMPERATURE &OD->list[39] -#define OD_ENTRY_H4003_POS_Z_MAGNETOMETER_1 &OD->list[40] -#define OD_ENTRY_H4004_POS_Z_MAGNETOMETER_2 &OD->list[41] -#define OD_ENTRY_H4005_MIN_Z_MAGNETOMETER_1 &OD->list[42] -#define OD_ENTRY_H4006_MIN_Z_MAGNETOMETER_2 &OD->list[43] -#define OD_ENTRY_H4007_MAGNETORQUER_CURRENT &OD->list[44] -#define OD_ENTRY_H4008_MAGNETORQUER_CURRENT_SET &OD->list[45] -#define OD_ENTRY_H4009_MAGNETORQUER_PWM_PERCENT &OD->list[46] +#define OD_ENTRY_H180A_TPDO_11_COMMUNICATION_PARAMETERS &OD->list[21] +#define OD_ENTRY_H1A00_TPDO_1_MAPPING_PARAMETERS &OD->list[22] +#define OD_ENTRY_H1A01_TPDO_2_MAPPING_PARAMETERS &OD->list[23] +#define OD_ENTRY_H1A02_TPDO_3_MAPPING_PARAMETERS &OD->list[24] +#define OD_ENTRY_H1A03_TPDO_4_MAPPING_PARAMETERS &OD->list[25] +#define OD_ENTRY_H1A04_TPDO_5_MAPPING_PARAMETERS &OD->list[26] +#define OD_ENTRY_H1A05_TPDO_6_MAPPING_PARAMETERS &OD->list[27] +#define OD_ENTRY_H1A06_TPDO_7_MAPPING_PARAMETERS &OD->list[28] +#define OD_ENTRY_H1A07_TPDO_8_MAPPING_PARAMETERS &OD->list[29] +#define OD_ENTRY_H1A08_TPDO_9_MAPPING_PARAMETERS &OD->list[30] +#define OD_ENTRY_H1A09_TPDO_10_MAPPING_PARAMETERS &OD->list[31] +#define OD_ENTRY_H1A0A_TPDO_11_MAPPING_PARAMETERS &OD->list[32] +#define OD_ENTRY_H2010_SCET &OD->list[33] +#define OD_ENTRY_H2011_UTC &OD->list[34] +#define OD_ENTRY_H3000_SATELLITE_ID &OD->list[35] +#define OD_ENTRY_H3001_FLIGHT_MODE &OD->list[36] +#define OD_ENTRY_H3002_VERSIONS &OD->list[37] +#define OD_ENTRY_H3003_SYSTEM &OD->list[38] +#define OD_ENTRY_H4000_GYROSCOPE &OD->list[39] +#define OD_ENTRY_H4001_ACCELEROMETER &OD->list[40] +#define OD_ENTRY_H4002_TEMPERATURE &OD->list[41] +#define OD_ENTRY_H4003_POS_Z_MAGNETOMETER_1 &OD->list[42] +#define OD_ENTRY_H4004_POS_Z_MAGNETOMETER_2 &OD->list[43] +#define OD_ENTRY_H4005_MIN_Z_MAGNETOMETER_1 &OD->list[44] +#define OD_ENTRY_H4006_MIN_Z_MAGNETOMETER_2 &OD->list[45] +#define OD_ENTRY_H4007_MAGNETORQUER_CURRENT_X &OD->list[46] +#define OD_ENTRY_H4008_MAGNETORQUER_CURRENT_Y &OD->list[47] +#define OD_ENTRY_H4009_MAGNETORQUER_CURRENT_Z &OD->list[48] +#define OD_ENTRY_H4010_MAGNETORQUER_PWM_PERCENT &OD->list[49] #define OD_INDEX_SCET 0x2010 @@ -417,17 +437,19 @@ extern OD_ATTR_OD OD_t *OD; #define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_Y 0x2 #define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_Z 0x3 -#define OD_INDEX_MAGNETORQUER_CURRENT 0x4007 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_X 0x1 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Y 0x2 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Z 0x3 +#define OD_INDEX_MAGNETORQUER_CURRENT_X 0x4007 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_X_CURRENT_FEEDBACK 0x1 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_X_CURRENT_SET 0x2 + +#define OD_INDEX_MAGNETORQUER_CURRENT_Y 0x4008 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Y_CURRENT_FEEDBACK 0x1 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Y_CURRENT_SET 0x2 -#define OD_INDEX_MAGNETORQUER_CURRENT_SET 0x4008 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_SET_X 0x1 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_SET_Y 0x2 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_SET_Z 0x3 +#define OD_INDEX_MAGNETORQUER_CURRENT_Z 0x4009 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Z_CURRENT_FEEDBACK 0x1 +#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Z_CURRENT_SET 0x2 -#define OD_INDEX_MAGNETORQUER_PWM_PERCENT 0x4009 +#define OD_INDEX_MAGNETORQUER_PWM_PERCENT 0x4010 #define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_X 0x1 #define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_Y 0x2 #define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_Z 0x3 diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index 280699ab..d04605f7 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -288,9 +288,9 @@ int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t } void handle_can_open_data(void) { - g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_set.x * 100, 0); - g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_set.y * 100, 1); - g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_set.z * 100, 2); + g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4007_magnetorquer_current_x.current_set * 100, 0); + g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_y.current_set * 100, 1); + g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4009_magnetorquer_current_z.current_set * 100, 2); @@ -311,13 +311,13 @@ void handle_can_open_data(void) { OD_RAM.x4002_temperature = g_adcs_data.temp_c; - OD_RAM.x4007_magnetorquer_current.x = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; - OD_RAM.x4007_magnetorquer_current.y = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; - OD_RAM.x4007_magnetorquer_current.z = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer_current_x.current_feedback = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; + OD_RAM.x4008_magnetorquer_current_y.current_feedback = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; + OD_RAM.x4009_magnetorquer_current_z.current_feedback = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; - OD_RAM.x4009_magnetorquer_pwm_percent.x = g_adcs_data.mt_pwm_data[0].current_pwm_percent; - OD_RAM.x4009_magnetorquer_pwm_percent.y = g_adcs_data.mt_pwm_data[1].current_pwm_percent; - OD_RAM.x4009_magnetorquer_pwm_percent.z = g_adcs_data.mt_pwm_data[2].current_pwm_percent; + OD_RAM.x4010_magnetorquer_pwm_percent.x = g_adcs_data.mt_pwm_data[0].current_pwm_percent; + OD_RAM.x4010_magnetorquer_pwm_percent.y = g_adcs_data.mt_pwm_data[1].current_pwm_percent; + OD_RAM.x4010_magnetorquer_pwm_percent.z = g_adcs_data.mt_pwm_data[2].current_pwm_percent; if (g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].is_working) { @@ -693,17 +693,17 @@ void print_debug_output(void) { chprintf(DEBUG_SD, " OD_RAM.x4002_temperature = %d\r\n", OD_RAM.x4002_temperature); - chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_set.x = %d\r\n", OD_RAM.x4008_magnetorquer_current_set.x); - chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_set.y = %d\r\n", OD_RAM.x4008_magnetorquer_current_set.y); - chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_set.z = %d\r\n", OD_RAM.x4008_magnetorquer_current_set.z); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current_x.current_set = %d\r\n", OD_RAM.x4007_magnetorquer_current_x.current_set); + chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_y.current_set = %d\r\n", OD_RAM.x4008_magnetorquer_current_y.current_set); + chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_current_z.current_set = %d\r\n", OD_RAM.x4009_magnetorquer_current_z.current_set); - chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_pwm_percent.x = %d\r\n", OD_RAM.x4009_magnetorquer_pwm_percent.x); - chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_pwm_percent.y = %d\r\n", OD_RAM.x4009_magnetorquer_pwm_percent.y); - chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_pwm_percent.z = %d\r\n", OD_RAM.x4009_magnetorquer_pwm_percent.z); + chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.x = %d\r\n", OD_RAM.x4010_magnetorquer_pwm_percent.x); + chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.y = %d\r\n", OD_RAM.x4010_magnetorquer_pwm_percent.y); + chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.z = %d\r\n", OD_RAM.x4010_magnetorquer_pwm_percent.z); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.x = %d\r\n", OD_RAM.x4007_magnetorquer_current.x); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.y = %d\r\n", OD_RAM.x4007_magnetorquer_current.y); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.z = %d\r\n", OD_RAM.x4007_magnetorquer_current.z); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.x = %d\r\n", OD_RAM.x4007_magnetorquer_current_x.current_feedback); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.y = %d\r\n", OD_RAM.x4008_magnetorquer_current_y.current_feedback); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.z = %d\r\n", OD_RAM.x4009_magnetorquer_current_z.current_feedback); chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.x = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.x); chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.y = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.y); From edb2689bc870ee53c18df56583d618a1ee3255c9 Mon Sep 17 00:00:00 2001 From: DC Date: Thu, 9 Nov 2023 21:23:02 -0800 Subject: [PATCH 18/20] Updates to can open data structure references --- src/f0/app_adcs/source/adcs.c | 36 +++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/f0/app_adcs/source/adcs.c b/src/f0/app_adcs/source/adcs.c index d04605f7..a7a1f592 100644 --- a/src/f0/app_adcs/source/adcs.c +++ b/src/f0/app_adcs/source/adcs.c @@ -288,9 +288,9 @@ int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t } void handle_can_open_data(void) { - g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4007_magnetorquer_current_x.current_set * 100, 0); - g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4008_magnetorquer_current_y.current_set * 100, 1); - g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4009_magnetorquer_current_z.current_set * 100, 2); + g_adcs_data.mt_pwm_data[0].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4007_magnetorquer.current_x_setpoint * 100, 0); + g_adcs_data.mt_pwm_data[1].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4007_magnetorquer.current_y_setpoint * 100, 1); + g_adcs_data.mt_pwm_data[2].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(OD_RAM.x4007_magnetorquer.current_z_setpoint * 100, 2); @@ -311,13 +311,13 @@ void handle_can_open_data(void) { OD_RAM.x4002_temperature = g_adcs_data.temp_c; - OD_RAM.x4007_magnetorquer_current_x.current_feedback = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; - OD_RAM.x4008_magnetorquer_current_y.current_feedback = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; - OD_RAM.x4009_magnetorquer_current_z.current_feedback = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer.current_x = g_adcs_data.mt_pwm_data[0].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer.current_y = g_adcs_data.mt_pwm_data[1].current_feedback_measurement_uA; + OD_RAM.x4007_magnetorquer.current_z = g_adcs_data.mt_pwm_data[2].current_feedback_measurement_uA; - OD_RAM.x4010_magnetorquer_pwm_percent.x = g_adcs_data.mt_pwm_data[0].current_pwm_percent; - OD_RAM.x4010_magnetorquer_pwm_percent.y = g_adcs_data.mt_pwm_data[1].current_pwm_percent; - OD_RAM.x4010_magnetorquer_pwm_percent.z = g_adcs_data.mt_pwm_data[2].current_pwm_percent; + OD_RAM.x4007_magnetorquer.pwm_x = g_adcs_data.mt_pwm_data[0].current_pwm_percent; + OD_RAM.x4007_magnetorquer.pwm_y = g_adcs_data.mt_pwm_data[1].current_pwm_percent; + OD_RAM.x4007_magnetorquer.pwm_z = g_adcs_data.mt_pwm_data[2].current_pwm_percent; if (g_adcs_data.magetometer_data[EC_MAG_2_PZ_1].is_working) { @@ -693,17 +693,17 @@ void print_debug_output(void) { chprintf(DEBUG_SD, " OD_RAM.x4002_temperature = %d\r\n", OD_RAM.x4002_temperature); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current_x.current_set = %d\r\n", OD_RAM.x4007_magnetorquer_current_x.current_set); - chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_y.current_set = %d\r\n", OD_RAM.x4008_magnetorquer_current_y.current_set); - chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_current_z.current_set = %d\r\n", OD_RAM.x4009_magnetorquer_current_z.current_set); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current_x.current_set = %d\r\n", OD_RAM.x4007_magnetorquer.current_x_setpoint); + chprintf(DEBUG_SD, " OD_RAM.x4008_magnetorquer_current_y.current_set = %d\r\n", OD_RAM.x4007_magnetorquer.current_y_setpoint); + chprintf(DEBUG_SD, " OD_RAM.x4009_magnetorquer_current_z.current_set = %d\r\n", OD_RAM.x4007_magnetorquer.current_z_setpoint); - chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.x = %d\r\n", OD_RAM.x4010_magnetorquer_pwm_percent.x); - chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.y = %d\r\n", OD_RAM.x4010_magnetorquer_pwm_percent.y); - chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.z = %d\r\n", OD_RAM.x4010_magnetorquer_pwm_percent.z); + chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.x = %d\r\n", OD_RAM.x4007_magnetorquer.pwm_x); + chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.y = %d\r\n", OD_RAM.x4007_magnetorquer.pwm_y); + chprintf(DEBUG_SD, " OD_RAM.x4010_magnetorquer_pwm_percent.z = %d\r\n", OD_RAM.x4007_magnetorquer.pwm_z); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.x = %d\r\n", OD_RAM.x4007_magnetorquer_current_x.current_feedback); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.y = %d\r\n", OD_RAM.x4008_magnetorquer_current_y.current_feedback); - chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.z = %d\r\n", OD_RAM.x4009_magnetorquer_current_z.current_feedback); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.x = %d\r\n", OD_RAM.x4007_magnetorquer.current_x); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.y = %d\r\n", OD_RAM.x4007_magnetorquer.current_y); + chprintf(DEBUG_SD, " OD_RAM.x4007_magnetorquer_current.z = %d\r\n", OD_RAM.x4007_magnetorquer.current_z); chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.x = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.x); chprintf(DEBUG_SD, " OD_RAM.x4003_pos_z_magnetometer_1.y = %d\r\n", OD_RAM.x4003_pos_z_magnetometer_1.y); From 2c0c5f02b4905338299520e107d070bf7a2d2cfb Mon Sep 17 00:00:00 2001 From: DC Date: Thu, 16 Nov 2023 19:30:19 -0800 Subject: [PATCH 19/20] removed auto generated files --- src/f0/app_adcs/od/OD.c | 1511 --------------------------------------- src/f0/app_adcs/od/OD.h | 457 ------------ 2 files changed, 1968 deletions(-) delete mode 100644 src/f0/app_adcs/od/OD.c delete mode 100644 src/f0/app_adcs/od/OD.h diff --git a/src/f0/app_adcs/od/OD.c b/src/f0/app_adcs/od/OD.c deleted file mode 100644 index 06859769..00000000 --- a/src/f0/app_adcs/od/OD.c +++ /dev/null @@ -1,1511 +0,0 @@ -#define OD_DEFINITION -#include "301/CO_ODinterface.h" -#include "OD.h" - -#if CO_VERSION_MAJOR < 4 -#error This file is only comatible with CANopenNode v4 and above -#endif - -OD_ATTR_RAM OD_RAM_t OD_RAM = { - .x1000_device_type = 0x0, - .x1001_error_register = 0x0, - .x1003_predefined_error_field_sub0 = 8, - .x1003_predefined_error_field = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - .x1005_cob_id_sync = 0x80, - .x1006_communication_cycle_period = 0x0, - .x1014_cob_id_emergency_message = 0xB8, - .x1015_inhibit_time_emcy = 0x0, - .x1016_consumer_heartbeat_time_sub0 = 1, - .x1016_consumer_heartbeat_time = {0x3E8}, - .x1017_producer_heartbeat_time = 0x3E8, - .x1018_identity = { - .highest_index_supported = 0x4, - .vendor_id = 0x0, - .product_code = 0x0, - .revision_number = 0x0, - .serial_number = 0x0, - }, - .x1200_sdo_server_parameter = { - .highest_index_supported = 0x3, - .cob_id_client_to_server = 0x80000000, - .cob_id_server_to_client = 0x80000000, - .node_id_od_sdo_client = 0x1, - }, - .x1800_tpdo_1_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x180, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1801_tpdo_2_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x280, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1802_tpdo_3_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x380, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1803_tpdo_4_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x480, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1804_tpdo_5_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x180, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1805_tpdo_6_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x280, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1806_tpdo_7_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x380, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1807_tpdo_8_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x480, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1808_tpdo_9_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x180, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1809_tpdo_10_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x280, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x180A_tpdo_11_communication_parameters = { - .highest_index_supported = 0x6, - .cob_id = 0x380, - .transmission_type = 0xFE, - .inhibit_time = 0x0, - .event_timer = 0x3E8, - .sync_start_value = 0x0, - }, - .x1A00_tpdo_1_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40000110, - .mapping_object_2 = 0x40000210, - .mapping_object_3 = 0x40000310, - }, - .x1A01_tpdo_2_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40010110, - .mapping_object_2 = 0x40010210, - .mapping_object_3 = 0x40010310, - }, - .x1A02_tpdo_3_mapping_parameters = { - .highest_index_supported = 0x1, - .mapping_object_1 = 0x40020008, - }, - .x1A03_tpdo_4_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40030110, - .mapping_object_2 = 0x40030210, - .mapping_object_3 = 0x40030310, - }, - .x1A04_tpdo_5_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40040110, - .mapping_object_2 = 0x40040210, - .mapping_object_3 = 0x40040310, - }, - .x1A05_tpdo_6_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40050110, - .mapping_object_2 = 0x40050210, - .mapping_object_3 = 0x40050310, - }, - .x1A06_tpdo_7_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40060110, - .mapping_object_2 = 0x40060210, - .mapping_object_3 = 0x40060310, - }, - .x1A07_tpdo_8_mapping_parameters = { - .highest_index_supported = 0x2, - .mapping_object_1 = 0x40070120, - .mapping_object_2 = 0x40070220, - }, - .x1A08_tpdo_9_mapping_parameters = { - .highest_index_supported = 0x2, - .mapping_object_1 = 0x40080120, - .mapping_object_2 = 0x40080220, - }, - .x1A09_tpdo_10_mapping_parameters = { - .highest_index_supported = 0x2, - .mapping_object_1 = 0x40090120, - .mapping_object_2 = 0x40090220, - }, - .x1A0A_tpdo_11_mapping_parameters = { - .highest_index_supported = 0x3, - .mapping_object_1 = 0x40100110, - .mapping_object_2 = 0x40100210, - .mapping_object_3 = 0x40100310, - }, - .x2010_scet = 0x0, - .x2011_utc = 0x0, - .x3000_satellite_id = 0x2, - .x3001_flight_mode = 1, - .x3002_versions = { - .highest_index_supported = 0x4, - .hw_version = {'0', '.', '0', 0}, - .configs_version = {'0', '.', '1', '.', '0', 0}, - .fw_version = {'0', '.', '0', '.', '0', 0}, - }, - .x3003_system = { - .highest_index_supported = 0x8, - .temperature = 0x0, - .vrefint = 0x0, - }, - .x4000_gyroscope = { - .highest_index_supported = 0x6, - .pitch_rate = 0x0, - .yaw_rate = 0x0, - .roll_rate = 0x0, - .pitch_rate_raw = 0x0, - .yaw_rate_raw = 0x0, - .roll_rate_raw = 0x0, - }, - .x4001_accelerometer = { - .highest_index_supported = 0x6, - .x = 0x0, - .y = 0x0, - .z = 0x0, - .x_raw = 0x0, - .y_raw = 0x0, - .z_raw = 0x0, - }, - .x4002_temperature = 0x0, - .x4003_pos_z_magnetometer_1 = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, - }, - .x4004_pos_z_magnetometer_2 = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, - }, - .x4005_min_z_magnetometer_1 = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, - }, - .x4006_min_z_magnetometer_2 = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, - }, - .x4007_magnetorquer_current_x = { - .highest_index_supported = 0x2, - .current_feedback = 0x0, - .current_set = 0x0, - }, - .x4008_magnetorquer_current_y = { - .highest_index_supported = 0x2, - .current_feedback = 0x0, - .current_set = 0x0, - }, - .x4009_magnetorquer_current_z = { - .highest_index_supported = 0x2, - .current_feedback = 0x0, - .current_set = 0x0, - }, - .x4010_magnetorquer_pwm_percent = { - .highest_index_supported = 0x3, - .x = 0x0, - .y = 0x0, - .z = 0x0, - }, -}; - -typedef struct { - OD_obj_var_t o_1000_device_type; - OD_obj_var_t o_1001_error_register; - OD_obj_array_t o_1003_predefined_error_field; - OD_obj_var_t o_1005_cob_id_sync; - OD_obj_var_t o_1006_communication_cycle_period; - OD_obj_var_t o_1014_cob_id_emergency_message; - OD_obj_var_t o_1015_inhibit_time_emcy; - OD_obj_array_t o_1016_consumer_heartbeat_time; - OD_obj_var_t o_1017_producer_heartbeat_time; - OD_obj_record_t o_1018_identity[5]; - OD_obj_record_t o_1200_sdo_server_parameter[4]; - OD_obj_record_t o_1800_tpdo_1_communication_parameters[6]; - OD_obj_record_t o_1801_tpdo_2_communication_parameters[6]; - OD_obj_record_t o_1802_tpdo_3_communication_parameters[6]; - OD_obj_record_t o_1803_tpdo_4_communication_parameters[6]; - OD_obj_record_t o_1804_tpdo_5_communication_parameters[6]; - OD_obj_record_t o_1805_tpdo_6_communication_parameters[6]; - OD_obj_record_t o_1806_tpdo_7_communication_parameters[6]; - OD_obj_record_t o_1807_tpdo_8_communication_parameters[6]; - OD_obj_record_t o_1808_tpdo_9_communication_parameters[6]; - OD_obj_record_t o_1809_tpdo_10_communication_parameters[6]; - OD_obj_record_t o_180A_tpdo_11_communication_parameters[6]; - OD_obj_record_t o_1A00_tpdo_1_mapping_parameters[4]; - OD_obj_record_t o_1A01_tpdo_2_mapping_parameters[4]; - OD_obj_record_t o_1A02_tpdo_3_mapping_parameters[2]; - OD_obj_record_t o_1A03_tpdo_4_mapping_parameters[4]; - OD_obj_record_t o_1A04_tpdo_5_mapping_parameters[4]; - OD_obj_record_t o_1A05_tpdo_6_mapping_parameters[4]; - OD_obj_record_t o_1A06_tpdo_7_mapping_parameters[4]; - OD_obj_record_t o_1A07_tpdo_8_mapping_parameters[3]; - OD_obj_record_t o_1A08_tpdo_9_mapping_parameters[3]; - OD_obj_record_t o_1A09_tpdo_10_mapping_parameters[3]; - OD_obj_record_t o_1A0A_tpdo_11_mapping_parameters[4]; - OD_obj_var_t o_2010_scet; - OD_obj_var_t o_2011_utc; - OD_obj_var_t o_3000_satellite_id; - OD_obj_var_t o_3001_flight_mode; - OD_obj_record_t o_3002_versions[4]; - OD_obj_record_t o_3003_system[3]; - OD_obj_record_t o_4000_gyroscope[7]; - OD_obj_record_t o_4001_accelerometer[7]; - OD_obj_var_t o_4002_temperature; - OD_obj_record_t o_4003_pos_z_magnetometer_1[4]; - OD_obj_record_t o_4004_pos_z_magnetometer_2[4]; - OD_obj_record_t o_4005_min_z_magnetometer_1[4]; - OD_obj_record_t o_4006_min_z_magnetometer_2[4]; - OD_obj_record_t o_4007_magnetorquer_current_x[3]; - OD_obj_record_t o_4008_magnetorquer_current_y[3]; - OD_obj_record_t o_4009_magnetorquer_current_z[3]; - OD_obj_record_t o_4010_magnetorquer_pwm_percent[4]; -} ODObjs_t; - -static CO_PROGMEM ODObjs_t ODObjs = { - .o_1000_device_type = { - .dataOrig = &OD_RAM.x1000_device_type, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - .o_1001_error_register = { - .dataOrig = &OD_RAM.x1001_error_register, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - .o_1003_predefined_error_field = { - .dataOrig0 = &OD_RAM.x1003_predefined_error_field_sub0, - .dataOrig = &OD_RAM.x1003_predefined_error_field[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_1005_cob_id_sync = { - .dataOrig = &OD_RAM.x1005_cob_id_sync, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1006_communication_cycle_period = { - .dataOrig = &OD_RAM.x1006_communication_cycle_period, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1014_cob_id_emergency_message = { - .dataOrig = &OD_RAM.x1014_cob_id_emergency_message, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - .o_1015_inhibit_time_emcy = { - .dataOrig = &OD_RAM.x1015_inhibit_time_emcy, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - .o_1016_consumer_heartbeat_time = { - .dataOrig0 = &OD_RAM.x1016_consumer_heartbeat_time_sub0, - .dataOrig = &OD_RAM.x1016_consumer_heartbeat_time[0], - .attribute0 = ODA_SDO_R, - .attribute = ODA_SDO_RW | ODA_MB, - .dataElementLength = 4, - .dataElementSizeof = sizeof(uint32_t), - }, - .o_1017_producer_heartbeat_time = { - .dataOrig = &OD_RAM.x1017_producer_heartbeat_time, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 2 - }, - .o_1018_identity = { - { - .dataOrig = &OD_RAM.x1018_identity.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1018_identity.vendor_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1018_identity.product_code, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1018_identity.revision_number, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1018_identity.serial_number, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1200_sdo_server_parameter = { - { - .dataOrig = &OD_RAM.x1200_sdo_server_parameter.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1200_sdo_server_parameter.cob_id_client_to_server, - .subIndex = 1, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1200_sdo_server_parameter.cob_id_server_to_client, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1200_sdo_server_parameter.node_id_od_sdo_client, - .subIndex = 3, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 4 - }, - }, - .o_1800_tpdo_1_communication_parameters = { - { - .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1800_tpdo_1_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1801_tpdo_2_communication_parameters = { - { - .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1801_tpdo_2_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1802_tpdo_3_communication_parameters = { - { - .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1802_tpdo_3_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1803_tpdo_4_communication_parameters = { - { - .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1803_tpdo_4_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1804_tpdo_5_communication_parameters = { - { - .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1804_tpdo_5_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1805_tpdo_6_communication_parameters = { - { - .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1805_tpdo_6_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1806_tpdo_7_communication_parameters = { - { - .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1806_tpdo_7_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1807_tpdo_8_communication_parameters = { - { - .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1807_tpdo_8_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1808_tpdo_9_communication_parameters = { - { - .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1808_tpdo_9_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1809_tpdo_10_communication_parameters = { - { - .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x1809_tpdo_10_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_180A_tpdo_11_communication_parameters = { - { - .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.cob_id, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.transmission_type, - .subIndex = 2, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.inhibit_time, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.event_timer, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x180A_tpdo_11_communication_parameters.sync_start_value, - .subIndex = 6, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - }, - .o_1A00_tpdo_1_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A00_tpdo_1_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A01_tpdo_2_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A01_tpdo_2_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A02_tpdo_3_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A02_tpdo_3_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A02_tpdo_3_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A03_tpdo_4_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A03_tpdo_4_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A04_tpdo_5_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A04_tpdo_5_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A05_tpdo_6_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A05_tpdo_6_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A06_tpdo_7_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A06_tpdo_7_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A07_tpdo_8_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A07_tpdo_8_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A08_tpdo_9_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A08_tpdo_9_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A09_tpdo_10_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A09_tpdo_10_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_1A0A_tpdo_11_mapping_parameters = { - { - .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.mapping_object_1, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.mapping_object_2, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x1A0A_tpdo_11_mapping_parameters.mapping_object_3, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_MB, - .dataLength = 4 - }, - }, - .o_2010_scet = { - .dataOrig = &OD_RAM.x2010_scet, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 8 - }, - .o_2011_utc = { - .dataOrig = &OD_RAM.x2011_utc, - .attribute = ODA_SDO_RW | ODA_MB, - .dataLength = 8 - }, - .o_3000_satellite_id = { - .dataOrig = &OD_RAM.x3000_satellite_id, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - .o_3001_flight_mode = { - .dataOrig = &OD_RAM.x3001_flight_mode, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - .o_3002_versions = { - { - .dataOrig = &OD_RAM.x3002_versions.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x3002_versions.hw_version[0], - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_STR, - .dataLength = 3 - }, - { - .dataOrig = &OD_RAM.x3002_versions.configs_version[0], - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_STR, - .dataLength = 5 - }, - { - .dataOrig = &OD_RAM.x3002_versions.fw_version[0], - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_STR, - .dataLength = 5 - }, - }, - .o_3003_system = { - { - .dataOrig = &OD_RAM.x3003_system.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x3003_system.temperature, - .subIndex = 7, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x3003_system.vrefint, - .subIndex = 8, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - }, - .o_4000_gyroscope = { - { - .dataOrig = &OD_RAM.x4000_gyroscope.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4000_gyroscope.pitch_rate, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4000_gyroscope.yaw_rate, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4000_gyroscope.roll_rate, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4000_gyroscope.pitch_rate_raw, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4000_gyroscope.yaw_rate_raw, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4000_gyroscope.roll_rate_raw, - .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_4001_accelerometer = { - { - .dataOrig = &OD_RAM.x4001_accelerometer.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4001_accelerometer.x, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4001_accelerometer.y, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4001_accelerometer.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4001_accelerometer.x_raw, - .subIndex = 4, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4001_accelerometer.y_raw, - .subIndex = 5, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4001_accelerometer.z_raw, - .subIndex = 6, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_4002_temperature = { - .dataOrig = &OD_RAM.x4002_temperature, - .attribute = ODA_SDO_R | ODA_TPDO, - .dataLength = 1 - }, - .o_4003_pos_z_magnetometer_1 = { - { - .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.x, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.y, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4003_pos_z_magnetometer_1.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_4004_pos_z_magnetometer_2 = { - { - .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.x, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.y, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4004_pos_z_magnetometer_2.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_4005_min_z_magnetometer_1 = { - { - .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.x, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.y, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4005_min_z_magnetometer_1.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_4006_min_z_magnetometer_2 = { - { - .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.x, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.y, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4006_min_z_magnetometer_2.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, - .o_4007_magnetorquer_current_x = { - { - .dataOrig = &OD_RAM.x4007_magnetorquer_current_x.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4007_magnetorquer_current_x.current_feedback, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x4007_magnetorquer_current_x.current_set, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - }, - .o_4008_magnetorquer_current_y = { - { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_y.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_y.current_feedback, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x4008_magnetorquer_current_y.current_set, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - }, - .o_4009_magnetorquer_current_z = { - { - .dataOrig = &OD_RAM.x4009_magnetorquer_current_z.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4009_magnetorquer_current_z.current_feedback, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 4 - }, - { - .dataOrig = &OD_RAM.x4009_magnetorquer_current_z.current_set, - .subIndex = 2, - .attribute = ODA_SDO_RW | ODA_TRPDO | ODA_MB, - .dataLength = 4 - }, - }, - .o_4010_magnetorquer_pwm_percent = { - { - .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.highest_index_supported, - .subIndex = 0, - .attribute = ODA_SDO_R, - .dataLength = 1 - }, - { - .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.x, - .subIndex = 1, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.y, - .subIndex = 2, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - { - .dataOrig = &OD_RAM.x4010_magnetorquer_pwm_percent.z, - .subIndex = 3, - .attribute = ODA_SDO_R | ODA_TPDO | ODA_MB, - .dataLength = 2 - }, - }, -}; - -static OD_ATTR_OD OD_entry_t ODList[] = { - {0x1000, 0x01, ODT_VAR, &ODObjs.o_1000_device_type, NULL}, - {0x1001, 0x01, ODT_VAR, &ODObjs.o_1001_error_register, NULL}, - {0x1003, 0x09, ODT_ARR, &ODObjs.o_1003_predefined_error_field, NULL}, - {0x1005, 0x01, ODT_VAR, &ODObjs.o_1005_cob_id_sync, NULL}, - {0x1006, 0x01, ODT_VAR, &ODObjs.o_1006_communication_cycle_period, NULL}, - {0x1014, 0x01, ODT_VAR, &ODObjs.o_1014_cob_id_emergency_message, NULL}, - {0x1015, 0x01, ODT_VAR, &ODObjs.o_1015_inhibit_time_emcy, NULL}, - {0x1016, 0x02, ODT_ARR, &ODObjs.o_1016_consumer_heartbeat_time, NULL}, - {0x1017, 0x01, ODT_VAR, &ODObjs.o_1017_producer_heartbeat_time, NULL}, - {0x1018, 0x05, ODT_REC, &ODObjs.o_1018_identity, NULL}, - {0x1200, 0x04, ODT_REC, &ODObjs.o_1200_sdo_server_parameter, NULL}, - {0x1800, 0x06, ODT_REC, &ODObjs.o_1800_tpdo_1_communication_parameters, NULL}, - {0x1801, 0x06, ODT_REC, &ODObjs.o_1801_tpdo_2_communication_parameters, NULL}, - {0x1802, 0x06, ODT_REC, &ODObjs.o_1802_tpdo_3_communication_parameters, NULL}, - {0x1803, 0x06, ODT_REC, &ODObjs.o_1803_tpdo_4_communication_parameters, NULL}, - {0x1804, 0x06, ODT_REC, &ODObjs.o_1804_tpdo_5_communication_parameters, NULL}, - {0x1805, 0x06, ODT_REC, &ODObjs.o_1805_tpdo_6_communication_parameters, NULL}, - {0x1806, 0x06, ODT_REC, &ODObjs.o_1806_tpdo_7_communication_parameters, NULL}, - {0x1807, 0x06, ODT_REC, &ODObjs.o_1807_tpdo_8_communication_parameters, NULL}, - {0x1808, 0x06, ODT_REC, &ODObjs.o_1808_tpdo_9_communication_parameters, NULL}, - {0x1809, 0x06, ODT_REC, &ODObjs.o_1809_tpdo_10_communication_parameters, NULL}, - {0x180A, 0x06, ODT_REC, &ODObjs.o_180A_tpdo_11_communication_parameters, NULL}, - {0x1A00, 0x04, ODT_REC, &ODObjs.o_1A00_tpdo_1_mapping_parameters, NULL}, - {0x1A01, 0x04, ODT_REC, &ODObjs.o_1A01_tpdo_2_mapping_parameters, NULL}, - {0x1A02, 0x02, ODT_REC, &ODObjs.o_1A02_tpdo_3_mapping_parameters, NULL}, - {0x1A03, 0x04, ODT_REC, &ODObjs.o_1A03_tpdo_4_mapping_parameters, NULL}, - {0x1A04, 0x04, ODT_REC, &ODObjs.o_1A04_tpdo_5_mapping_parameters, NULL}, - {0x1A05, 0x04, ODT_REC, &ODObjs.o_1A05_tpdo_6_mapping_parameters, NULL}, - {0x1A06, 0x04, ODT_REC, &ODObjs.o_1A06_tpdo_7_mapping_parameters, NULL}, - {0x1A07, 0x03, ODT_REC, &ODObjs.o_1A07_tpdo_8_mapping_parameters, NULL}, - {0x1A08, 0x03, ODT_REC, &ODObjs.o_1A08_tpdo_9_mapping_parameters, NULL}, - {0x1A09, 0x03, ODT_REC, &ODObjs.o_1A09_tpdo_10_mapping_parameters, NULL}, - {0x1A0A, 0x04, ODT_REC, &ODObjs.o_1A0A_tpdo_11_mapping_parameters, NULL}, - {0x2010, 0x01, ODT_VAR, &ODObjs.o_2010_scet, NULL}, - {0x2011, 0x01, ODT_VAR, &ODObjs.o_2011_utc, NULL}, - {0x3000, 0x01, ODT_VAR, &ODObjs.o_3000_satellite_id, NULL}, - {0x3001, 0x01, ODT_VAR, &ODObjs.o_3001_flight_mode, NULL}, - {0x3002, 0x04, ODT_REC, &ODObjs.o_3002_versions, NULL}, - {0x3003, 0x03, ODT_REC, &ODObjs.o_3003_system, NULL}, - {0x4000, 0x07, ODT_REC, &ODObjs.o_4000_gyroscope, NULL}, - {0x4001, 0x07, ODT_REC, &ODObjs.o_4001_accelerometer, NULL}, - {0x4002, 0x01, ODT_VAR, &ODObjs.o_4002_temperature, NULL}, - {0x4003, 0x04, ODT_REC, &ODObjs.o_4003_pos_z_magnetometer_1, NULL}, - {0x4004, 0x04, ODT_REC, &ODObjs.o_4004_pos_z_magnetometer_2, NULL}, - {0x4005, 0x04, ODT_REC, &ODObjs.o_4005_min_z_magnetometer_1, NULL}, - {0x4006, 0x04, ODT_REC, &ODObjs.o_4006_min_z_magnetometer_2, NULL}, - {0x4007, 0x03, ODT_REC, &ODObjs.o_4007_magnetorquer_current_x, NULL}, - {0x4008, 0x03, ODT_REC, &ODObjs.o_4008_magnetorquer_current_y, NULL}, - {0x4009, 0x03, ODT_REC, &ODObjs.o_4009_magnetorquer_current_z, NULL}, - {0x4010, 0x04, ODT_REC, &ODObjs.o_4010_magnetorquer_pwm_percent, NULL}, - {0x0000, 0x00, 0, NULL, NULL} -}; - -static OD_t _OD = { - (sizeof(ODList) / sizeof(ODList[0])) - 1, - &ODList[0] -}; - -OD_t *OD = &_OD; diff --git a/src/f0/app_adcs/od/OD.h b/src/f0/app_adcs/od/OD.h deleted file mode 100644 index 1d66dbe5..00000000 --- a/src/f0/app_adcs/od/OD.h +++ /dev/null @@ -1,457 +0,0 @@ -#ifndef OD_H -#define OD_H - -#define OD_CNT_NMT 1 -#define OD_CNT_EM 1 -#define OD_CNT_SYNC 1 -#define OD_CNT_SYNC_PROD 1 -#define OD_CNT_STORAGE 1 -#define OD_CNT_EM_PROD 1 -#define OD_CNT_HB_CONS 1 -#define OD_CNT_HB_PROD 1 -#define OD_CNT_SDO_SRV 1 -#define OD_CNT_TPDO 11 - -#define OD_CNT_ARR_1003 8 -#define OD_CNT_ARR_1016 1 - -typedef struct { - uint32_t x1000_device_type; - uint8_t x1001_error_register; - uint8_t x1003_predefined_error_field_sub0; - uint32_t x1003_predefined_error_field[OD_CNT_ARR_1003]; - uint32_t x1005_cob_id_sync; - uint32_t x1006_communication_cycle_period; - uint32_t x1014_cob_id_emergency_message; - uint16_t x1015_inhibit_time_emcy; - uint8_t x1016_consumer_heartbeat_time_sub0; - uint32_t x1016_consumer_heartbeat_time[OD_CNT_ARR_1016]; - uint16_t x1017_producer_heartbeat_time; - struct { - uint8_t highest_index_supported; - uint32_t vendor_id; - uint32_t product_code; - uint32_t revision_number; - uint32_t serial_number; - } x1018_identity; - struct { - uint8_t highest_index_supported; - uint32_t cob_id_client_to_server; - uint32_t cob_id_server_to_client; - uint32_t node_id_od_sdo_client; - } x1200_sdo_server_parameter; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1800_tpdo_1_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1801_tpdo_2_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1802_tpdo_3_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1803_tpdo_4_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1804_tpdo_5_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1805_tpdo_6_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1806_tpdo_7_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1807_tpdo_8_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1808_tpdo_9_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x1809_tpdo_10_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t cob_id; - uint8_t transmission_type; - uint16_t inhibit_time; - uint16_t event_timer; - uint8_t sync_start_value; - } x180A_tpdo_11_communication_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A00_tpdo_1_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A01_tpdo_2_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - } x1A02_tpdo_3_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A03_tpdo_4_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A04_tpdo_5_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A05_tpdo_6_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A06_tpdo_7_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - } x1A07_tpdo_8_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - } x1A08_tpdo_9_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - } x1A09_tpdo_10_mapping_parameters; - struct { - uint8_t highest_index_supported; - uint32_t mapping_object_1; - uint32_t mapping_object_2; - uint32_t mapping_object_3; - } x1A0A_tpdo_11_mapping_parameters; - uint64_t x2010_scet; - uint64_t x2011_utc; - uint8_t x3000_satellite_id; - bool_t x3001_flight_mode; - struct { - uint8_t highest_index_supported; - char hw_version[4]; - char configs_version[6]; - char fw_version[6]; - } x3002_versions; - struct { - uint8_t highest_index_supported; - int8_t temperature; - uint8_t vrefint; - } x3003_system; - struct { - uint8_t highest_index_supported; - int16_t pitch_rate; - int16_t yaw_rate; - int16_t roll_rate; - uint16_t pitch_rate_raw; - uint16_t yaw_rate_raw; - uint16_t roll_rate_raw; - } x4000_gyroscope; - struct { - uint8_t highest_index_supported; - int16_t x; - int16_t y; - int16_t z; - uint16_t x_raw; - uint16_t y_raw; - uint16_t z_raw; - } x4001_accelerometer; - int8_t x4002_temperature; - struct { - uint8_t highest_index_supported; - int16_t x; - int16_t y; - int16_t z; - } x4003_pos_z_magnetometer_1; - struct { - uint8_t highest_index_supported; - int16_t x; - int16_t y; - int16_t z; - } x4004_pos_z_magnetometer_2; - struct { - uint8_t highest_index_supported; - int16_t x; - int16_t y; - int16_t z; - } x4005_min_z_magnetometer_1; - struct { - uint8_t highest_index_supported; - int16_t x; - int16_t y; - int16_t z; - } x4006_min_z_magnetometer_2; - struct { - uint8_t highest_index_supported; - int32_t current_feedback; - int32_t current_set; - } x4007_magnetorquer_current_x; - struct { - uint8_t highest_index_supported; - int32_t current_feedback; - int32_t current_set; - } x4008_magnetorquer_current_y; - struct { - uint8_t highest_index_supported; - int32_t current_feedback; - int32_t current_set; - } x4009_magnetorquer_current_z; - struct { - uint8_t highest_index_supported; - int16_t x; - int16_t y; - int16_t z; - } x4010_magnetorquer_pwm_percent; -} OD_RAM_t; - -#ifndef OD_ATTR_RAM -#define OD_ATTR_RAM -#endif -extern OD_ATTR_RAM OD_RAM_t OD_RAM; - -#ifndef OD_ATTR_OD -#define OD_ATTR_OD -#endif -extern OD_ATTR_OD OD_t *OD; - -#define OD_ENTRY_H1000 &OD->list[0] -#define OD_ENTRY_H1001 &OD->list[1] -#define OD_ENTRY_H1003 &OD->list[2] -#define OD_ENTRY_H1005 &OD->list[3] -#define OD_ENTRY_H1006 &OD->list[4] -#define OD_ENTRY_H1014 &OD->list[5] -#define OD_ENTRY_H1015 &OD->list[6] -#define OD_ENTRY_H1016 &OD->list[7] -#define OD_ENTRY_H1017 &OD->list[8] -#define OD_ENTRY_H1018 &OD->list[9] -#define OD_ENTRY_H1200 &OD->list[10] -#define OD_ENTRY_H1800 &OD->list[11] -#define OD_ENTRY_H1801 &OD->list[12] -#define OD_ENTRY_H1802 &OD->list[13] -#define OD_ENTRY_H1803 &OD->list[14] -#define OD_ENTRY_H1804 &OD->list[15] -#define OD_ENTRY_H1805 &OD->list[16] -#define OD_ENTRY_H1806 &OD->list[17] -#define OD_ENTRY_H1807 &OD->list[18] -#define OD_ENTRY_H1808 &OD->list[19] -#define OD_ENTRY_H1809 &OD->list[20] -#define OD_ENTRY_H180A &OD->list[21] -#define OD_ENTRY_H1A00 &OD->list[22] -#define OD_ENTRY_H1A01 &OD->list[23] -#define OD_ENTRY_H1A02 &OD->list[24] -#define OD_ENTRY_H1A03 &OD->list[25] -#define OD_ENTRY_H1A04 &OD->list[26] -#define OD_ENTRY_H1A05 &OD->list[27] -#define OD_ENTRY_H1A06 &OD->list[28] -#define OD_ENTRY_H1A07 &OD->list[29] -#define OD_ENTRY_H1A08 &OD->list[30] -#define OD_ENTRY_H1A09 &OD->list[31] -#define OD_ENTRY_H1A0A &OD->list[32] -#define OD_ENTRY_H2010 &OD->list[33] -#define OD_ENTRY_H2011 &OD->list[34] -#define OD_ENTRY_H3000 &OD->list[35] -#define OD_ENTRY_H3001 &OD->list[36] -#define OD_ENTRY_H3002 &OD->list[37] -#define OD_ENTRY_H3003 &OD->list[38] -#define OD_ENTRY_H4000 &OD->list[39] -#define OD_ENTRY_H4001 &OD->list[40] -#define OD_ENTRY_H4002 &OD->list[41] -#define OD_ENTRY_H4003 &OD->list[42] -#define OD_ENTRY_H4004 &OD->list[43] -#define OD_ENTRY_H4005 &OD->list[44] -#define OD_ENTRY_H4006 &OD->list[45] -#define OD_ENTRY_H4007 &OD->list[46] -#define OD_ENTRY_H4008 &OD->list[47] -#define OD_ENTRY_H4009 &OD->list[48] -#define OD_ENTRY_H4010 &OD->list[49] - -#define OD_ENTRY_H1000_DEVICE_TYPE &OD->list[0] -#define OD_ENTRY_H1001_ERROR_REGISTER &OD->list[1] -#define OD_ENTRY_H1003_PREDEFINED_ERROR_FIELD &OD->list[2] -#define OD_ENTRY_H1005_COB_ID_SYNC &OD->list[3] -#define OD_ENTRY_H1006_COMMUNICATION_CYCLE_PERIOD &OD->list[4] -#define OD_ENTRY_H1014_COB_ID_EMERGENCY_MESSAGE &OD->list[5] -#define OD_ENTRY_H1015_INHIBIT_TIME_EMCY &OD->list[6] -#define OD_ENTRY_H1016_CONSUMER_HEARTBEAT_TIME &OD->list[7] -#define OD_ENTRY_H1017_PRODUCER_HEARTBEAT_TIME &OD->list[8] -#define OD_ENTRY_H1018_IDENTITY &OD->list[9] -#define OD_ENTRY_H1200_SDO_SERVER_PARAMETER &OD->list[10] -#define OD_ENTRY_H1800_TPDO_1_COMMUNICATION_PARAMETERS &OD->list[11] -#define OD_ENTRY_H1801_TPDO_2_COMMUNICATION_PARAMETERS &OD->list[12] -#define OD_ENTRY_H1802_TPDO_3_COMMUNICATION_PARAMETERS &OD->list[13] -#define OD_ENTRY_H1803_TPDO_4_COMMUNICATION_PARAMETERS &OD->list[14] -#define OD_ENTRY_H1804_TPDO_5_COMMUNICATION_PARAMETERS &OD->list[15] -#define OD_ENTRY_H1805_TPDO_6_COMMUNICATION_PARAMETERS &OD->list[16] -#define OD_ENTRY_H1806_TPDO_7_COMMUNICATION_PARAMETERS &OD->list[17] -#define OD_ENTRY_H1807_TPDO_8_COMMUNICATION_PARAMETERS &OD->list[18] -#define OD_ENTRY_H1808_TPDO_9_COMMUNICATION_PARAMETERS &OD->list[19] -#define OD_ENTRY_H1809_TPDO_10_COMMUNICATION_PARAMETERS &OD->list[20] -#define OD_ENTRY_H180A_TPDO_11_COMMUNICATION_PARAMETERS &OD->list[21] -#define OD_ENTRY_H1A00_TPDO_1_MAPPING_PARAMETERS &OD->list[22] -#define OD_ENTRY_H1A01_TPDO_2_MAPPING_PARAMETERS &OD->list[23] -#define OD_ENTRY_H1A02_TPDO_3_MAPPING_PARAMETERS &OD->list[24] -#define OD_ENTRY_H1A03_TPDO_4_MAPPING_PARAMETERS &OD->list[25] -#define OD_ENTRY_H1A04_TPDO_5_MAPPING_PARAMETERS &OD->list[26] -#define OD_ENTRY_H1A05_TPDO_6_MAPPING_PARAMETERS &OD->list[27] -#define OD_ENTRY_H1A06_TPDO_7_MAPPING_PARAMETERS &OD->list[28] -#define OD_ENTRY_H1A07_TPDO_8_MAPPING_PARAMETERS &OD->list[29] -#define OD_ENTRY_H1A08_TPDO_9_MAPPING_PARAMETERS &OD->list[30] -#define OD_ENTRY_H1A09_TPDO_10_MAPPING_PARAMETERS &OD->list[31] -#define OD_ENTRY_H1A0A_TPDO_11_MAPPING_PARAMETERS &OD->list[32] -#define OD_ENTRY_H2010_SCET &OD->list[33] -#define OD_ENTRY_H2011_UTC &OD->list[34] -#define OD_ENTRY_H3000_SATELLITE_ID &OD->list[35] -#define OD_ENTRY_H3001_FLIGHT_MODE &OD->list[36] -#define OD_ENTRY_H3002_VERSIONS &OD->list[37] -#define OD_ENTRY_H3003_SYSTEM &OD->list[38] -#define OD_ENTRY_H4000_GYROSCOPE &OD->list[39] -#define OD_ENTRY_H4001_ACCELEROMETER &OD->list[40] -#define OD_ENTRY_H4002_TEMPERATURE &OD->list[41] -#define OD_ENTRY_H4003_POS_Z_MAGNETOMETER_1 &OD->list[42] -#define OD_ENTRY_H4004_POS_Z_MAGNETOMETER_2 &OD->list[43] -#define OD_ENTRY_H4005_MIN_Z_MAGNETOMETER_1 &OD->list[44] -#define OD_ENTRY_H4006_MIN_Z_MAGNETOMETER_2 &OD->list[45] -#define OD_ENTRY_H4007_MAGNETORQUER_CURRENT_X &OD->list[46] -#define OD_ENTRY_H4008_MAGNETORQUER_CURRENT_Y &OD->list[47] -#define OD_ENTRY_H4009_MAGNETORQUER_CURRENT_Z &OD->list[48] -#define OD_ENTRY_H4010_MAGNETORQUER_PWM_PERCENT &OD->list[49] - -#define OD_INDEX_SCET 0x2010 - -#define OD_INDEX_UTC 0x2011 - -#define OD_INDEX_SATELLITE_ID 0x3000 - -#define OD_INDEX_FLIGHT_MODE 0x3001 - -#define OD_INDEX_VERSIONS 0x3002 -#define OD_SUBINDEX_VERSIONS_HW_VERSION 0x1 -#define OD_SUBINDEX_VERSIONS_CONFIGS_VERSION 0x2 -#define OD_SUBINDEX_VERSIONS_FW_VERSION 0x4 - -#define OD_INDEX_SYSTEM 0x3003 -#define OD_SUBINDEX_SYSTEM_TEMPERATURE 0x7 -#define OD_SUBINDEX_SYSTEM_VREFINT 0x8 - -#define OD_INDEX_GYROSCOPE 0x4000 -#define OD_SUBINDEX_GYROSCOPE_PITCH_RATE 0x1 -#define OD_SUBINDEX_GYROSCOPE_YAW_RATE 0x2 -#define OD_SUBINDEX_GYROSCOPE_ROLL_RATE 0x3 -#define OD_SUBINDEX_GYROSCOPE_PITCH_RATE_RAW 0x4 -#define OD_SUBINDEX_GYROSCOPE_YAW_RATE_RAW 0x5 -#define OD_SUBINDEX_GYROSCOPE_ROLL_RATE_RAW 0x6 - -#define OD_INDEX_ACCELEROMETER 0x4001 -#define OD_SUBINDEX_ACCELEROMETER_X 0x1 -#define OD_SUBINDEX_ACCELEROMETER_Y 0x2 -#define OD_SUBINDEX_ACCELEROMETER_Z 0x3 -#define OD_SUBINDEX_ACCELEROMETER_X_RAW 0x4 -#define OD_SUBINDEX_ACCELEROMETER_Y_RAW 0x5 -#define OD_SUBINDEX_ACCELEROMETER_Z_RAW 0x6 - -#define OD_INDEX_TEMPERATURE 0x4002 - -#define OD_INDEX_POS_Z_MAGNETOMETER_1 0x4003 -#define OD_SUBINDEX_POS_Z_MAGNETOMETER_1_X 0x1 -#define OD_SUBINDEX_POS_Z_MAGNETOMETER_1_Y 0x2 -#define OD_SUBINDEX_POS_Z_MAGNETOMETER_1_Z 0x3 - -#define OD_INDEX_POS_Z_MAGNETOMETER_2 0x4004 -#define OD_SUBINDEX_POS_Z_MAGNETOMETER_2_X 0x1 -#define OD_SUBINDEX_POS_Z_MAGNETOMETER_2_Y 0x2 -#define OD_SUBINDEX_POS_Z_MAGNETOMETER_2_Z 0x3 - -#define OD_INDEX_MIN_Z_MAGNETOMETER_1 0x4005 -#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_1_X 0x1 -#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_1_Y 0x2 -#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_1_Z 0x3 - -#define OD_INDEX_MIN_Z_MAGNETOMETER_2 0x4006 -#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_X 0x1 -#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_Y 0x2 -#define OD_SUBINDEX_MIN_Z_MAGNETOMETER_2_Z 0x3 - -#define OD_INDEX_MAGNETORQUER_CURRENT_X 0x4007 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_X_CURRENT_FEEDBACK 0x1 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_X_CURRENT_SET 0x2 - -#define OD_INDEX_MAGNETORQUER_CURRENT_Y 0x4008 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Y_CURRENT_FEEDBACK 0x1 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Y_CURRENT_SET 0x2 - -#define OD_INDEX_MAGNETORQUER_CURRENT_Z 0x4009 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Z_CURRENT_FEEDBACK 0x1 -#define OD_SUBINDEX_MAGNETORQUER_CURRENT_Z_CURRENT_SET 0x2 - -#define OD_INDEX_MAGNETORQUER_PWM_PERCENT 0x4010 -#define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_X 0x1 -#define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_Y 0x2 -#define OD_SUBINDEX_MAGNETORQUER_PWM_PERCENT_Z 0x3 - -#endif /* OD_H */ From 75f5d97d9a59b3ed5822f254dba9a2c335e907ff Mon Sep 17 00:00:00 2001 From: DC Date: Thu, 16 Nov 2023 19:34:27 -0800 Subject: [PATCH 20/20] Added app_adcs to workflow test --- .github/workflows/tests.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 36169186..52198591 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -65,6 +65,7 @@ jobs: make -C src/f0/app_bootloader make -C src/f0/app_devboard make -C src/f0/app_imu + make -C src/f0/app_adcs make -C src/f0/app_solar - name: Compile f4 apps