| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- /******************************************************************************
- * @file vio.c
- * @brief Virtual I/O implementation template
- * @version V1.0.0
- * @date 23. March 2020
- ******************************************************************************/
- /*
- * Copyright (c) 2019-2020 Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * 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
- *
- * 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.
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdarg.h>
- #include "cmsis_vio.h"
- #include "RTE_Components.h" // Component selection
- #include CMSIS_device_header
- #if !defined CMSIS_VOUT || !defined CMSIS_VIN
- // Add user includes here:
- #endif
- // VIO input, output definitions
- #define VIO_PRINT_MAX_SIZE 64U // maximum size of print memory
- #define VIO_PRINTMEM_NUM 4U // number of print memories
- #define VIO_VALUE_NUM 3U // number of values
- #define VIO_VALUEXYZ_NUM 3U // number of XYZ values
- #define VIO_IPV4_ADDRESS_NUM 2U // number of IPv4 addresses
- #define VIO_IPV6_ADDRESS_NUM 2U // number of IPv6 addresses
- // VIO input, output variables
- __USED uint32_t vioSignalIn; // Memory for incoming signal
- __USED uint32_t vioSignalOut; // Memory for outgoing signal
- __USED char vioPrintMem[VIO_PRINTMEM_NUM][VIO_PRINT_MAX_SIZE]; // Memory for the last value for each level
- __USED int32_t vioValue [VIO_VALUE_NUM]; // Memory for value used in vioGetValue/vioSetValue
- __USED vioValueXYZ_t vioValueXYZ[VIO_VALUEXYZ_NUM]; // Memory for XYZ value for 3-D vector
- __USED vioAddrIPv4_t vioAddrIPv4[VIO_IPV4_ADDRESS_NUM]; // Memory for IPv4 address value used in vioSetIPv4/vioGetIPv4
- __USED vioAddrIPv6_t vioAddrIPv6[VIO_IPV6_ADDRESS_NUM]; // Memory for IPv6 address value used in vioSetIPv6/vioGetIPv6
- #if !defined CMSIS_VOUT
- // Add global user types, variables, functions here:
- #endif
- #if !defined CMSIS_VIN
- // Add global user types, variables, functions here:
- #endif
- // Initialize test input, output.
- void vioInit (void) {
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- #if !defined CMSIS_VIN
- // Add user variables here:
- #endif
- vioSignalIn = 0U;
- vioSignalOut = 0U;
- memset (vioPrintMem, 0, sizeof(vioPrintMem));
- memset (vioValue, 0, sizeof(vioValue));
- memset (vioValueXYZ, 0, sizeof(vioValueXYZ));
- memset (vioAddrIPv4, 0, sizeof(vioAddrIPv4));
- memset (vioAddrIPv6, 0, sizeof(vioAddrIPv6));
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- #if !defined CMSIS_VIN
- // Add user code here:
- #endif
- }
- // Print formated string to test terminal.
- int32_t vioPrint (uint32_t level, const char *format, ...) {
- va_list args;
- int32_t ret;
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- if (level > vioLevelError) {
- return (-1);
- }
- if (level > VIO_PRINTMEM_NUM) {
- return (-1);
- }
- va_start(args, format);
- ret = vsnprintf((char *)vioPrintMem[level], sizeof(vioPrintMem[level]), format, args);
- va_end(args);
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- return (ret);
- }
- // Set signal output.
- void vioSetSignal (uint32_t mask, uint32_t signal) {
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- vioSignalOut &= ~mask;
- vioSignalOut |= mask & signal;
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- }
- // Get signal input.
- uint32_t vioGetSignal (uint32_t mask) {
- uint32_t signal;
- #if !defined CMSIS_VIN
- // Add user variables here:
- #endif
- #if !defined CMSIS_VIN
- // Add user code here:
- // vioSignalIn = ...;
- #endif
- signal = vioSignalIn;
- return (signal & mask);
- }
- // Set value output.
- void vioSetValue (uint32_t id, int32_t value) {
- uint32_t index = id;
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- if (index >= VIO_VALUE_NUM) {
- return; /* return in case of out-of-range index */
- }
- vioValue[index] = value;
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- }
- // Get value input.
- int32_t vioGetValue (uint32_t id) {
- uint32_t index = id;
- int32_t value = 0;
- #if !defined CMSIS_VIN
- // Add user variables here:
- #endif
- if (index >= VIO_VALUE_NUM) {
- return value; /* return default in case of out-of-range index */
- }
- #if !defined CMSIS_VIN
- // Add user code here:
- // vioValue[index] = ...;
- #endif
- value = vioValue[index];
- return value;
- }
- // Set XYZ value output.
- void vioSetXYZ (uint32_t id, vioValueXYZ_t valueXYZ) {
- uint32_t index = id;
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- if (index >= VIO_VALUEXYZ_NUM) {
- return; /* return in case of out-of-range index */
- }
- vioValueXYZ[index] = valueXYZ;
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- }
- // Get XYZ value input.
- vioValueXYZ_t vioGetXYZ (uint32_t id) {
- uint32_t index = id;
- vioValueXYZ_t valueXYZ = {0, 0, 0};
- #if !defined CMSIS_VIN
- // Add user variables here:
- #endif
- if (index >= VIO_VALUEXYZ_NUM) {
- return valueXYZ; /* return default in case of out-of-range index */
- }
- #if !defined CMSIS_VIN
- // Add user code here:
- // vioValueXYZ[index] = ...;
- #endif
- valueXYZ = vioValueXYZ[index];
- return valueXYZ;
- }
- // Set IPv4 address output.
- void vioSetIPv4 (uint32_t id, vioAddrIPv4_t addrIPv4) {
- uint32_t index = id;
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- if (index >= VIO_IPV4_ADDRESS_NUM) {
- return; /* return in case of out-of-range index */
- }
- vioAddrIPv4[index] = addrIPv4;
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- }
- // Get IPv4 address input.
- vioAddrIPv4_t vioGetIPv4 (uint32_t id) {
- uint32_t index = id;
- vioAddrIPv4_t addrIPv4 = {0U, 0U, 0U, 0U};
- #if !defined CMSIS_VIN
- // Add user variables here:
- #endif
- if (index >= VIO_IPV4_ADDRESS_NUM) {
- return addrIPv4; /* return default in case of out-of-range index */
- }
- #if !defined CMSIS_VIN
- // Add user code here:
- // vioAddrIPv4[index] = ...;
- #endif
- addrIPv4 = vioAddrIPv4[index];
- return addrIPv4;
- }
- // Set IPv6 address output.
- void vioSetIPv6 (uint32_t id, vioAddrIPv6_t addrIPv6) {
- uint32_t index = id;
- #if !defined CMSIS_VOUT
- // Add user variables here:
- #endif
- if (index >= VIO_IPV6_ADDRESS_NUM) {
- return; /* return in case of out-of-range index */
- }
- vioAddrIPv6[index] = addrIPv6;
- #if !defined CMSIS_VOUT
- // Add user code here:
- #endif
- }
- // Get IPv6 address input.
- vioAddrIPv6_t vioGetIPv6 (uint32_t id) {
- uint32_t index = id;
- vioAddrIPv6_t addrIPv6 = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U,
- 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U};
- #if !defined CMSIS_VIN
- // Add user variables here:
- #endif
- if (index >= VIO_IPV6_ADDRESS_NUM) {
- return addrIPv6; /* return default in case of out-of-range index */
- }
- #if !defined CMSIS_VIN
- // Add user code here:
- // vioAddrIPv6[index] = ...;
- #endif
- addrIPv6 = vioAddrIPv6[index];
- return addrIPv6;
- }
|