mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-06-20 06:58:39 +03:00
Initial commit
This commit is contained in:
337
external/CMSIS_5/CMSIS/Driver/VIO/Source/vio.c
vendored
Normal file
337
external/CMSIS_5/CMSIS/Driver/VIO/Source/vio.c
vendored
Normal file
@ -0,0 +1,337 @@
|
||||
/******************************************************************************
|
||||
* @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;
|
||||
}
|
208
external/CMSIS_5/CMSIS/Driver/VIO/Source/vio_memory.c
vendored
Normal file
208
external/CMSIS_5/CMSIS/Driver/VIO/Source/vio_memory.c
vendored
Normal file
@ -0,0 +1,208 @@
|
||||
/******************************************************************************
|
||||
* @file vio_memory.c
|
||||
* @brief Virtual I/O implementation using memory only
|
||||
* @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
|
||||
|
||||
// VIO input, output definitions
|
||||
#define VIO_PRINT_MAX_SIZE 64U // maximum size of print memory
|
||||
#define VIO_PRINTMEM_NUM 4U // number of print memories
|
||||
#ifndef VIO_VALUE_NUM
|
||||
#define VIO_VALUE_NUM 3U // number of values
|
||||
#endif
|
||||
#ifndef VIO_VALUEXYZ_NUM
|
||||
#define VIO_VALUEXYZ_NUM 3U // number of XYZ values
|
||||
#endif
|
||||
#ifndef VIO_IPV4_ADDRESS_NUM
|
||||
#define VIO_IPV4_ADDRESS_NUM 2U // number of IPv4 addresses
|
||||
#endif
|
||||
#ifndef VIO_IPV6_ADDRESS_NUM
|
||||
#define VIO_IPV6_ADDRESS_NUM 2U // number of IPv6 addresses
|
||||
#endif
|
||||
|
||||
// VIO input, output variables
|
||||
__USED uint32_t vioSignalIn;
|
||||
__USED uint32_t vioSignalOut;
|
||||
__USED char vioPrintMem[VIO_PRINTMEM_NUM][VIO_PRINT_MAX_SIZE];
|
||||
__USED int32_t vioValue [VIO_VALUE_NUM];
|
||||
__USED vioValueXYZ_t vioValueXYZ[VIO_VALUEXYZ_NUM];
|
||||
__USED vioAddrIPv4_t vioAddrIPv4[VIO_IPV4_ADDRESS_NUM];
|
||||
__USED vioAddrIPv6_t vioAddrIPv6[VIO_IPV6_ADDRESS_NUM];
|
||||
|
||||
// Initialize test input, output.
|
||||
void vioInit (void) {
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
// Print formated string to test terminal.
|
||||
int32_t vioPrint (uint32_t level, const char *format, ...) {
|
||||
va_list args;
|
||||
int32_t ret;
|
||||
|
||||
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);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
// Set signal output.
|
||||
void vioSetSignal (uint32_t mask, uint32_t signal) {
|
||||
|
||||
vioSignalOut &= ~mask;
|
||||
vioSignalOut |= mask & signal;
|
||||
}
|
||||
|
||||
// Get signal input.
|
||||
uint32_t vioGetSignal (uint32_t mask) {
|
||||
uint32_t signal;
|
||||
|
||||
signal = vioSignalIn;
|
||||
|
||||
return (signal & mask);
|
||||
}
|
||||
|
||||
// Set value output.
|
||||
void vioSetValue (uint32_t id, int32_t value) {
|
||||
uint32_t index = id;
|
||||
|
||||
if (index >= VIO_VALUE_NUM) {
|
||||
return; /* return in case of out-of-range index */
|
||||
}
|
||||
|
||||
vioValue[index] = value;
|
||||
}
|
||||
|
||||
// Get value input.
|
||||
int32_t vioGetValue (uint32_t id) {
|
||||
uint32_t index = id;
|
||||
int32_t value = 0;
|
||||
|
||||
if (index >= VIO_VALUE_NUM) {
|
||||
return value; /* return default in case of out-of-range index */
|
||||
}
|
||||
|
||||
value = vioValue[index];
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
// Set XYZ value output.
|
||||
void vioSetXYZ (uint32_t id, vioValueXYZ_t valueXYZ) {
|
||||
uint32_t index = id;
|
||||
|
||||
if (index >= VIO_VALUEXYZ_NUM) {
|
||||
return; /* return in case of out-of-range index */
|
||||
}
|
||||
|
||||
vioValueXYZ[index] = valueXYZ;
|
||||
}
|
||||
|
||||
// Get XYZ value input.
|
||||
vioValueXYZ_t vioGetXYZ (uint32_t id) {
|
||||
uint32_t index = id;
|
||||
vioValueXYZ_t valueXYZ = {0, 0, 0};
|
||||
|
||||
if (index >= VIO_VALUEXYZ_NUM) {
|
||||
return valueXYZ; /* return default in case of out-of-range index */
|
||||
}
|
||||
|
||||
valueXYZ = vioValueXYZ[index];
|
||||
|
||||
return valueXYZ;
|
||||
}
|
||||
|
||||
// Set IPv4 address output.
|
||||
void vioSetIPv4 (uint32_t id, vioAddrIPv4_t addrIPv4) {
|
||||
uint32_t index = id;
|
||||
|
||||
if (index >= VIO_IPV4_ADDRESS_NUM) {
|
||||
return; /* return in case of out-of-range index */
|
||||
}
|
||||
|
||||
vioAddrIPv4[index] = addrIPv4;
|
||||
}
|
||||
|
||||
// Get IPv4 address input.
|
||||
vioAddrIPv4_t vioGetIPv4 (uint32_t id) {
|
||||
uint32_t index = id;
|
||||
vioAddrIPv4_t addrIPv4 = {0U, 0U, 0U, 0U};
|
||||
|
||||
if (index >= VIO_IPV4_ADDRESS_NUM) {
|
||||
return addrIPv4; /* return default in case of out-of-range index */
|
||||
}
|
||||
|
||||
addrIPv4 = vioAddrIPv4[index];
|
||||
|
||||
return addrIPv4;
|
||||
}
|
||||
|
||||
// Set IPv6 address output.
|
||||
void vioSetIPv6 (uint32_t id, vioAddrIPv6_t addrIPv6) {
|
||||
uint32_t index = id;
|
||||
|
||||
if (index >= VIO_IPV6_ADDRESS_NUM) {
|
||||
return; /* return in case of out-of-range index */
|
||||
}
|
||||
|
||||
vioAddrIPv6[index] = addrIPv6;
|
||||
}
|
||||
|
||||
// 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 (index >= VIO_IPV6_ADDRESS_NUM) {
|
||||
return addrIPv6; /* return default in case of out-of-range index */
|
||||
}
|
||||
|
||||
addrIPv6 = vioAddrIPv6[index];
|
||||
|
||||
return addrIPv6;
|
||||
}
|
Reference in New Issue
Block a user