Files
bacnet_stack/ports/atmega328/nvdata.h
T
Steve Karg 4781582204 Changed ATmega168 port to ATmega328 on Uno R3 with DFR0259 RS485 shield (#784)
* Changed ATmega168 example for ATmega328 on Arduino Uno R3 with DFR0259 RS485 shield. Added ADC interface from BDK port and mapped to some AV objects. Removed MS/TP MAC address DIP switch GPIO and moved MS/TP configuration to AV objects. Added AV units property. Added some Uno R3 Digital Inputs and outputs mapped to some BV. Added AVR EEPROM from BDK port and mapped some non-volatile data including MAC address and max manager and baud rate, device ID and names and description and location.
2024-09-27 14:42:47 -05:00

98 lines
3.1 KiB
C

/**
* @brief This module contains the map for internal AVR non-volatile data
* @author Steve Karg <skarg@users.sourceforge.net>
* @date 2007
* @copyright SPDX-License-Identifier: MIT
*/
#ifndef NVDATA_H
#define NVDATA_H
#include <stdbool.h>
#include <stdint.h>
#include "bacnet/bacdef.h"
#include "bacnet/bacerror.h"
#include "bacnet/bacstr.h"
#include "eeprom.h"
/*=============== EEPROM ================*/
#define NV_EEPROM_TYPE_ID 0xBAC0U
#define NV_EEPROM_VERSION_ID 1
#define NV_EEPROM_BYTES_MAX EEPROM_BYTES_MAX
/* note to developers: define each byte,
even if they are not used explicitly */
/* EEPROM Type ID to indicate initialized or not */
#define NV_EEPROM_TYPE_0 0
#define NV_EEPROM_TYPE_1 1
/* EEPROM Version ID to indicate schema change */
#define NV_EEPROM_VERSION 2
/* EEPROM free space - 3..9 */
/* BACnet MS/TP datalink layer */
#define NV_EEPROM_MSTP_MAC 10
/* 9=9.6k, 19=19.2k, 38=38.4k, 57=57.6k, 76=76.8k, 115=115.2k */
#define NV_EEPROM_MSTP_BAUD_K 11
#define NV_EEPROM_MSTP_MAX_MASTER 12
/* device instance is only 22 bits */
#define NV_EEPROM_DEVICE_0 13
#define NV_EEPROM_DEVICE_1 14
#define NV_EEPROM_DEVICE_2 15
/* EEPROM free space - 16..31 */
/* BACnet Names - 32 bytes of data each */
#define NV_EEPROM_NAME_LENGTH(n) ((n) + 0)
#define NV_EEPROM_NAME_ENCODING(n) ((n) + 1)
#define NV_EEPROM_NAME_STRING(n) ((n) + 2)
#define NV_EEPROM_NAME_SIZE 30
#define NV_EEPROM_NAME_OFFSET (1 + 1 + NV_EEPROM_NAME_SIZE)
/* Device Name - starting offset */
#define NV_EEPROM_DEVICE_NAME 32
/* Device Description - starting offset */
#define NV_EEPROM_DEVICE_DESCRIPTION \
(NV_EEPROM_DEVICE_NAME + NV_EEPROM_NAME_OFFSET)
/* Device Location - starting offset */
#define NV_EEPROM_DEVICE_LOCATION \
(NV_EEPROM_DEVICE_DESCRIPTION + NV_EEPROM_NAME_OFFSET)
/* EEPROM free space 128..1024 */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
uint64_t nvdata_unsigned64(uint32_t ee_address);
int nvdata_unsigned64_set(uint32_t ee_address, uint64_t long_value);
int nvdata_unsigned32_set(uint32_t ee_address, uint32_t long_value);
uint32_t nvdata_unsigned32(uint32_t ee_address);
int nvdata_unsigned24_set(uint32_t ee_address, uint32_t long_value);
uint32_t nvdata_unsigned24(uint32_t ee_address);
uint16_t nvdata_unsigned16(uint32_t ee_address);
int nvdata_unsigned16_set(uint32_t ee_address, uint16_t short_value);
uint8_t nvdata_unsigned8(uint32_t ee_address);
int nvdata_unsigned8_set(uint32_t ee_address, uint8_t byte_value);
bool nvdata_name_isvalid(uint8_t encoding, uint8_t length, const char *str);
bool nvdata_name_set(
uint16_t offset, uint8_t encoding, const char *str, uint8_t length);
bool nvdata_name_write(
uint32_t offset,
BACNET_CHARACTER_STRING *char_string,
BACNET_ERROR_CLASS *error_class,
BACNET_ERROR_CODE *error_code);
void nvdata_name(
uint32_t offset,
BACNET_CHARACTER_STRING *char_string,
const char *default_string);
uint32_t nvdata_get(uint32_t ee_address, uint8_t *buffer, uint32_t nbytes);
uint32_t nvdata_set(uint32_t ee_address, uint8_t *buffer, uint32_t nbytes);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif