aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-litecell15/misc
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-10-29 06:40:58 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-11-05 03:39:50 +0700
commitef1671c6ed3362958b95a7074c8d2242b756c6cf (patch)
tree1c80d546d39abcee29b0924e251a58b451c20369 /src/osmo-bts-litecell15/misc
parent44d25af9cd1288feda867ce60c636d9334521c4f (diff)
osmo-bts-lc15: use consistent name for containing directory
The binary is called 'osmo-bts-lc15', while the containing folder is named 'osmo-bts-litecell15'. This inconsistency complicates automatic generation of the XML VTY reference - fix it. Change-Id: I55c073fbd01aee42871101401d76d87e7c91832e Related: SYS#4937, OS#3036
Diffstat (limited to 'src/osmo-bts-litecell15/misc')
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_bid.c162
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_bid.h52
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_bts.c131
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_bts.h21
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_clock.c260
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_clock.h16
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_led.c333
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_led.h22
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_mgr.c366
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_mgr.h422
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_mgr_calib.c292
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c195
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c378
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c1074
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_misc.c383
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_misc.h18
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_nl.c123
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_nl.h27
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_par.c232
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_par.h43
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_power.c210
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_power.h38
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_swd.c178
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_swd.h7
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_temp.c74
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_temp.h28
-rw-r--r--src/osmo-bts-litecell15/misc/lc15bts_util.c164
27 files changed, 0 insertions, 5249 deletions
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_bid.c b/src/osmo-bts-litecell15/misc/lc15bts_bid.c
deleted file mode 100644
index 9284b62e..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_bid.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdbool.h>
-
-#include "lc15bts_bid.h"
-
-#define BOARD_REV_SYSFS "/var/lc15/platform/revision"
-#define BOARD_OPT_SYSFS "/var/lc15/platform/option"
-
-static const int option_type_mask[_NUM_OPTION_TYPES] = {
- [LC15BTS_OPTION_OCXO] = 0x07,
- [LC15BTS_OPTION_FPGA] = 0x03,
- [LC15BTS_OPTION_PA] = 0x01,
- [LC15BTS_OPTION_BAND] = 0x03,
- [LC15BTS_OPTION_TX_ISO_BYP] = 0x01,
- [LC15BTS_OPTION_RX_DUP_BYP] = 0x01,
- [LC15BTS_OPTION_RX_PB_BYP] = 0x01,
- [LC15BTS_OPTION_RX_DIV] = 0x01,
- [LC15BTS_OPTION_RX1A] = 0x01,
- [LC15BTS_OPTION_RX1B] = 0x01,
- [LC15BTS_OPTION_RX2A] = 0x01,
- [LC15BTS_OPTION_RX2B] = 0x01,
- [LC15BTS_OPTION_DDR_32B] = 0x01,
- [LC15BTS_OPTION_DDR_ECC] = 0x01,
- [LC15BTS_OPTION_LOG_DET] = 0x01,
- [LC15BTS_OPTION_DUAL_LOG_DET] = 0x01,
-};
-
-static const int option_type_shift[_NUM_OPTION_TYPES] = {
- [LC15BTS_OPTION_OCXO] = 0,
- [LC15BTS_OPTION_FPGA] = 3,
- [LC15BTS_OPTION_PA] = 5,
- [LC15BTS_OPTION_BAND] = 6,
- [LC15BTS_OPTION_TX_ISO_BYP] = 8,
- [LC15BTS_OPTION_RX_DUP_BYP] = 9,
- [LC15BTS_OPTION_RX_PB_BYP] = 10,
- [LC15BTS_OPTION_RX_DIV] = 11,
- [LC15BTS_OPTION_RX1A] = 12,
- [LC15BTS_OPTION_RX1B] = 13,
- [LC15BTS_OPTION_RX2A] = 14,
- [LC15BTS_OPTION_RX2B] = 15,
- [LC15BTS_OPTION_DDR_32B] = 16,
- [LC15BTS_OPTION_DDR_ECC] = 17,
- [LC15BTS_OPTION_LOG_DET] = 18,
- [LC15BTS_OPTION_DUAL_LOG_DET] = 19,
-};
-
-
-static int board_rev = -1;
-static int board_option = -1;
-
-static inline bool read_board(const char *src, const char *spec, void *dst)
-{
- FILE *fp = fopen(src, "r");
- if (!fp) {
- fprintf(stderr, "Failed to open %s due to '%s' error\n", src, strerror(errno));
- return false;
- }
-
- if (fscanf(fp, spec, dst) != 1) {
- fclose(fp);
- fprintf(stderr, "Failed to read %s due to '%s' error\n", src, strerror(errno));
- return false;
- }
- fclose(fp);
- return true;
-}
-
-int lc15bts_rev_get(void)
-{
- char rev;
-
- if (board_rev != -1) {
- return board_rev;
- }
-
- if (!read_board(BOARD_REV_SYSFS, "%c", &rev))
- return -1;
-
- board_rev = rev;
- return board_rev;
-}
-
-int lc15bts_model_get(void)
-{
- int opt;
-
- if (board_option != -1)
- return board_option;
-
- if (!read_board(BOARD_OPT_SYSFS, "%X", &opt))
- return -1;
-
- board_option = opt;
- return board_option;
-}
-
-int lc15bts_option_get(enum lc15bts_option_type type)
-{
- int rc;
- int option;
-
- if (type >= _NUM_OPTION_TYPES) {
- return -EINVAL;
- }
-
- if (board_option == -1) {
- rc = lc15bts_model_get();
- if (rc < 0) return rc;
- }
-
- option = (board_option >> option_type_shift[type])
- & option_type_mask[type];
-
- return option;
-}
-
-const char* get_hwversion_desc()
-{
- int rev;
- int model;
- size_t len;
- static char model_name[64] = {0, };
- len = snprintf(model_name, sizeof(model_name), "NuRAN Litecell 1.5 BTS");
-
- rev = lc15bts_rev_get();
- if (rev >= 0) {
- len += snprintf(model_name + len, sizeof(model_name) - len,
- " Rev %c", (char)rev);
- }
-
- model = lc15bts_model_get();
- if (model >= 0) {
- snprintf(model_name + len, sizeof(model_name) - len,
- "%s (%05X)", model_name, model);
- }
- return model_name;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_bid.h b/src/osmo-bts-litecell15/misc/lc15bts_bid.h
deleted file mode 100644
index a71fdd7e..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_bid.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef _LC15BTS_BOARD_H
-#define _LC15BTS_BOARD_H
-
-#include <stdint.h>
-
-enum lc15bts_option_type {
- LC15BTS_OPTION_OCXO,
- LC15BTS_OPTION_FPGA,
- LC15BTS_OPTION_PA,
- LC15BTS_OPTION_BAND,
- LC15BTS_OPTION_TX_ISO_BYP,
- LC15BTS_OPTION_RX_DUP_BYP,
- LC15BTS_OPTION_RX_PB_BYP,
- LC15BTS_OPTION_RX_DIV,
- LC15BTS_OPTION_RX1A,
- LC15BTS_OPTION_RX1B,
- LC15BTS_OPTION_RX2A,
- LC15BTS_OPTION_RX2B,
- LC15BTS_OPTION_DDR_32B,
- LC15BTS_OPTION_DDR_ECC,
- LC15BTS_OPTION_LOG_DET,
- LC15BTS_OPTION_DUAL_LOG_DET,
- _NUM_OPTION_TYPES
-};
-
-enum lc15bts_ocxo_type {
- LC15BTS_OCXO_BILAY_NVG45AV2072,
- LC15BTS_OCXO_TAITIEN_NJ26M003,
- _NUM_OCXO_TYPES
-};
-
-enum lc15bts_fpga_type {
- LC15BTS_FPGA_35T,
- LC15BTS_FPGA_50T,
- LC15BTS_FPGA_75T,
- LC15BTS_FPGA_100T,
- _NUM_FPGA_TYPES
-};
-
-enum lc15bts_gsm_band {
- LC15BTS_BAND_850,
- LC15BTS_BAND_900,
- LC15BTS_BAND_1800,
- LC15BTS_BAND_1900,
-};
-
-int lc15bts_rev_get(void);
-int lc15bts_model_get(void);
-int lc15bts_option_get(enum lc15bts_option_type type);
-const char* get_hwversion_desc();
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_bts.c b/src/osmo-bts-litecell15/misc/lc15bts_bts.c
deleted file mode 100644
index 0343e930..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_bts.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright (C) 2016 by NuRAN Wireless <support@nuranwireless.com>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <sys/ioctl.h>
-#include <net/if.h>
-#include <netdb.h>
-#include <ifaddrs.h>
-#include <netinet/in.h>
-#include <netinet/ip.h>
-#include "lc15bts_mgr.h"
-#include "lc15bts_bts.h"
-
-static int check_eth_status(char *dev_name)
-{
- int fd, rc;
- struct ifreq ifr;
-
- fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
- if (fd < 0)
- return fd;
-
- memset(&ifr, 0, sizeof(ifr));
- memcpy(&ifr.ifr_name, dev_name, sizeof(ifr.ifr_name));
- rc = ioctl(fd, SIOCGIFFLAGS, &ifr);
- close(fd);
-
- if (rc < 0)
- return rc;
-
- if ((ifr.ifr_flags & IFF_UP) && (ifr.ifr_flags & IFF_RUNNING))
- return 0;
-
- return 1;
-}
-
-void check_bts_led_pattern(uint8_t *led)
-{
- FILE *fp;
- char str[64] = "\0";
- int rc;
-
- /* check for existing of BTS state file */
- if ((fp = fopen("/var/run/osmo-bts/state", "r")) == NULL) {
- led[BLINK_PATTERN_INIT] = 1;
- return;
- }
-
- /* check Ethernet interface status */
- rc = check_eth_status("eth0");
- if (rc > 0) {
- LOGP(DTEMP, LOGL_DEBUG,"External link is DOWN\n");
- led[BLINK_PATTERN_EXT_LINK_MALFUNC] = 1;
- fclose(fp);
- return;
- }
-
- /* check for BTS is still alive */
- if (system("pidof osmo-bts-lc15 > /dev/null")) {
- LOGP(DTEMP, LOGL_DEBUG,"BTS process has stopped\n");
- led[BLINK_PATTERN_INT_PROC_MALFUNC] = 1;
- fclose(fp);
- return;
- }
-
- /* check for BTS state */
- while (fgets(str, 64, fp) != NULL) {
- LOGP(DTEMP, LOGL_DEBUG,"BTS state is %s\n", (strstr(str, "ABIS DOWN") != NULL) ? "DOWN" : "UP");
- if (strstr(str, "ABIS DOWN") != NULL)
- led[BLINK_PATTERN_INT_PROC_MALFUNC] = 1;
- }
- fclose(fp);
-
- return;
-}
-
-int check_sensor_led_pattern( struct lc15bts_mgr_instance *mgr, uint8_t *led)
-{
- if(mgr->alarms.temp_high == 1)
- led[BLINK_PATTERN_TEMP_HIGH] = 1;
-
- if(mgr->alarms.temp_max == 1)
- led[BLINK_PATTERN_TEMP_MAX] = 1;
-
- if(mgr->alarms.supply_low == 1)
- led[BLINK_PATTERN_SUPPLY_VOLT_LOW] = 1;
-
- if(mgr->alarms.supply_min == 1)
- led[BLINK_PATTERN_SUPPLY_VOLT_MIN] = 1;
-
- if(mgr->alarms.vswr_high == 1)
- led[BLINK_PATTERN_VSWR_HIGH] = 1;
-
- if(mgr->alarms.vswr_max == 1)
- led[BLINK_PATTERN_VSWR_MAX] = 1;
-
- if(mgr->alarms.supply_pwr_high == 1)
- led[BLINK_PATTERN_SUPPLY_PWR_HIGH] = 1;
-
- if(mgr->alarms.supply_pwr_max == 1)
- led[BLINK_PATTERN_SUPPLY_PWR_MAX] = 1;
-
- if(mgr->alarms.supply_pwr_max2 == 1)
- led[BLINK_PATTERN_SUPPLY_PWR_MAX2] = 1;
-
- if(mgr->alarms.pa_pwr_high == 1)
- led[BLINK_PATTERN_PA_PWR_HIGH] = 1;
-
- if(mgr->alarms.pa_pwr_max == 1)
- led[BLINK_PATTERN_PA_PWR_MAX] = 1;
-
- if(mgr->alarms.gps_fix_lost == 1)
- led[BLINK_PATTERN_GPS_FIX_LOST] = 1;
-
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_bts.h b/src/osmo-bts-litecell15/misc/lc15bts_bts.h
deleted file mode 100644
index 3918b870..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_bts.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef _LC15BTS_BTS_H_
-#define _LC15BTS_BTS_H_
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdint.h>
-#include <ctype.h>
-#include <string.h>
-#include <sys/signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <osmo-bts/logging.h>
-
-/* public function prototypes */
-void check_bts_led_pattern(uint8_t *led);
-int check_sensor_led_pattern( struct lc15bts_mgr_instance *mgr, uint8_t *led);
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_clock.c b/src/osmo-bts-litecell15/misc/lc15bts_clock.c
deleted file mode 100644
index 71701496..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_clock.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include "lc15bts_clock.h"
-
-#define CLKERR_ERR_SYSFS "/var/lc15/clkerr/clkerr1_average"
-#define CLKERR_ACC_SYSFS "/var/lc15/clkerr/clkerr1_average_accuracy"
-#define CLKERR_INT_SYSFS "/var/lc15/clkerr/clkerr1_average_interval"
-#define CLKERR_FLT_SYSFS "/var/lc15/clkerr/clkerr1_fault"
-#define CLKERR_RFS_SYSFS "/var/lc15/clkerr/refresh"
-#define CLKERR_RST_SYSFS "/var/lc15/clkerr/reset"
-
-#define OCXODAC_VAL_SYSFS "/var/lc15/ocxo/voltage"
-#define OCXODAC_ROM_SYSFS "/var/lc15/ocxo/eeprom"
-
-/* clock error */
-static int clkerr_fd_err = -1;
-static int clkerr_fd_accuracy = -1;
-static int clkerr_fd_interval = -1;
-static int clkerr_fd_fault = -1;
-static int clkerr_fd_refresh = -1;
-static int clkerr_fd_reset = -1;
-
-/* ocxo dac */
-static int ocxodac_fd_value = -1;
-static int ocxodac_fd_save = -1;
-
-
-static int sysfs_read_val(int fd, int *val)
-{
- int rc;
- char szVal[32] = {0};
-
- lseek( fd, 0, SEEK_SET );
-
- rc = read(fd, szVal, sizeof(szVal) - 1);
- if (rc < 0) {
- return -errno;
- }
-
- rc = sscanf(szVal, "%d", val);
- if (rc != 1) {
- return -1;
- }
-
- return 0;
-}
-
-static int sysfs_write_val(int fd, int val)
-{
- int n, rc;
- char szVal[32] = {0};
-
- n = sprintf(szVal, "%d", val);
-
- lseek(fd, 0, SEEK_SET);
- rc = write(fd, szVal, n+1);
- if (rc < 0) {
- return -errno;
- }
- return 0;
-}
-
-static int sysfs_write_str(int fd, const char *str)
-{
- int rc;
-
- lseek( fd, 0, SEEK_SET );
- rc = write(fd, str, strlen(str)+1);
- if (rc < 0) {
- return -errno;
- }
- return 0;
-}
-
-
-int lc15bts_clock_err_open(void)
-{
- if (clkerr_fd_err < 0) {
- clkerr_fd_err = open(CLKERR_ERR_SYSFS, O_RDONLY);
- if (clkerr_fd_err < 0) {
- lc15bts_clock_err_close();
- return clkerr_fd_err;
- }
- }
-
- if (clkerr_fd_accuracy < 0) {
- clkerr_fd_accuracy = open(CLKERR_ACC_SYSFS, O_RDONLY);
- if (clkerr_fd_accuracy < 0) {
- lc15bts_clock_err_close();
- return clkerr_fd_accuracy;
- }
- }
-
- if (clkerr_fd_interval < 0) {
- clkerr_fd_interval = open(CLKERR_INT_SYSFS, O_RDONLY);
- if (clkerr_fd_interval < 0) {
- lc15bts_clock_err_close();
- return clkerr_fd_interval;
- }
- }
-
- if (clkerr_fd_fault < 0) {
- clkerr_fd_fault = open(CLKERR_FLT_SYSFS, O_RDONLY);
- if (clkerr_fd_fault < 0) {
- lc15bts_clock_err_close();
- return clkerr_fd_fault;
- }
- }
-
- if (clkerr_fd_refresh < 0) {
- clkerr_fd_refresh = open(CLKERR_RFS_SYSFS, O_WRONLY);
- if (clkerr_fd_refresh < 0) {
- lc15bts_clock_err_close();
- return clkerr_fd_refresh;
- }
- }
-
- if (clkerr_fd_reset < 0) {
- clkerr_fd_reset = open(CLKERR_RST_SYSFS, O_WRONLY);
- if (clkerr_fd_reset < 0) {
- lc15bts_clock_err_close();
- return clkerr_fd_reset;
- }
- }
- return 0;
-}
-
-void lc15bts_clock_err_close(void)
-{
- if (clkerr_fd_err >= 0) {
- close(clkerr_fd_err);
- clkerr_fd_err = -1;
- }
-
- if (clkerr_fd_accuracy >= 0) {
- close(clkerr_fd_accuracy);
- clkerr_fd_accuracy = -1;
- }
-
- if (clkerr_fd_interval >= 0) {
- close(clkerr_fd_interval);
- clkerr_fd_interval = -1;
- }
-
- if (clkerr_fd_fault >= 0) {
- close(clkerr_fd_fault);
- clkerr_fd_fault = -1;
- }
-
- if (clkerr_fd_refresh >= 0) {
- close(clkerr_fd_refresh);
- clkerr_fd_refresh = -1;
- }
-
- if (clkerr_fd_reset >= 0) {
- close(clkerr_fd_reset);
- clkerr_fd_reset = -1;
- }
-}
-
-int lc15bts_clock_err_reset(void)
-{
- return sysfs_write_val(clkerr_fd_reset, 1);
-}
-
-int lc15bts_clock_err_get(int *fault, int *error_ppt,
- int *accuracy_ppq, int *interval_sec)
-{
- int rc;
-
- rc = sysfs_write_str(clkerr_fd_refresh, "once");
- if (rc < 0) {
- return -1;
- }
-
- rc = sysfs_read_val(clkerr_fd_fault, fault);
- rc |= sysfs_read_val(clkerr_fd_err, error_ppt);
- rc |= sysfs_read_val(clkerr_fd_accuracy, accuracy_ppq);
- rc |= sysfs_read_val(clkerr_fd_interval, interval_sec);
- if (rc) {
- return -1;
- }
- return 0;
-}
-
-
-int lc15bts_clock_dac_open(void)
-{
- if (ocxodac_fd_value < 0) {
- ocxodac_fd_value = open(OCXODAC_VAL_SYSFS, O_RDWR);
- if (ocxodac_fd_value < 0) {
- lc15bts_clock_dac_close();
- return ocxodac_fd_value;
- }
- }
-
- if (ocxodac_fd_save < 0) {
- ocxodac_fd_save = open(OCXODAC_ROM_SYSFS, O_WRONLY);
- if (ocxodac_fd_save < 0) {
- lc15bts_clock_dac_close();
- return ocxodac_fd_save;
- }
- }
- return 0;
-}
-
-void lc15bts_clock_dac_close(void)
-{
- if (ocxodac_fd_value >= 0) {
- close(ocxodac_fd_value);
- ocxodac_fd_value = -1;
- }
-
- if (ocxodac_fd_save >= 0) {
- close(ocxodac_fd_save);
- ocxodac_fd_save = -1;
- }
-}
-
-int lc15bts_clock_dac_get(int *dac_value)
-{
- return sysfs_read_val(ocxodac_fd_value, dac_value);
-}
-
-int lc15bts_clock_dac_set(int dac_value)
-{
- return sysfs_write_val(ocxodac_fd_value, dac_value);
-}
-
-int lc15bts_clock_dac_save(void)
-{
- return sysfs_write_val(ocxodac_fd_save, 1);
-}
-
-
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_clock.h b/src/osmo-bts-litecell15/misc/lc15bts_clock.h
deleted file mode 100644
index d9673598..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_clock.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _LC15BTS_CLOCK_H
-#define _LC15BTS_CLOCK_H
-
-int lc15bts_clock_err_open(void);
-void lc15bts_clock_err_close(void);
-int lc15bts_clock_err_reset(void);
-int lc15bts_clock_err_get(int *fault, int *error_ppt,
- int *accuracy_ppq, int *interval_sec);
-
-int lc15bts_clock_dac_open(void);
-void lc15bts_clock_dac_close(void);
-int lc15bts_clock_dac_get(int *dac_value);
-int lc15bts_clock_dac_set(int dac_value);
-int lc15bts_clock_dac_save(void);
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_led.c b/src/osmo-bts-litecell15/misc/lc15bts_led.c
deleted file mode 100644
index a93d3fb0..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_led.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/* Copyright (C) 2016 by NuRAN Wireless <support@nuranwireless.com>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-#include "lc15bts_led.h"
-#include "lc15bts_bts.h"
-#include <osmocom/core/talloc.h>
-#include <osmocom/core/linuxlist.h>
-
-static struct lc15bts_led led_entries[] = {
- {
- .name = "led0",
- .fullname = "led red",
- .path = "/var/lc15/leds/led0/brightness"
- },
- {
- .name = "led1",
- .fullname = "led green",
- .path = "/var/lc15/leds/led1/brightness"
- }
-};
-
-static const struct value_string lc15bts_led_strs[] = {
- { LC15BTS_LED_RED, "LED red" },
- { LC15BTS_LED_GREEN, "LED green" },
- { LC15BTS_LED_ORANGE, "LED orange" },
- { LC15BTS_LED_OFF, "LED off" },
- { 0, NULL }
-};
-
-static uint8_t led_priority[] = {
- BLINK_PATTERN_INIT,
- BLINK_PATTERN_INT_PROC_MALFUNC,
- BLINK_PATTERN_SUPPLY_PWR_MAX,
- BLINK_PATTERN_PA_PWR_MAX,
- BLINK_PATTERN_VSWR_MAX,
- BLINK_PATTERN_SUPPLY_VOLT_MIN,
- BLINK_PATTERN_TEMP_MAX,
- BLINK_PATTERN_SUPPLY_PWR_MAX2,
- BLINK_PATTERN_EXT_LINK_MALFUNC,
- BLINK_PATTERN_SUPPLY_VOLT_LOW,
- BLINK_PATTERN_TEMP_HIGH,
- BLINK_PATTERN_VSWR_HIGH,
- BLINK_PATTERN_SUPPLY_PWR_HIGH,
- BLINK_PATTERN_PA_PWR_HIGH,
- BLINK_PATTERN_GPS_FIX_LOST,
- BLINK_PATTERN_NORMAL
-};
-
-
-char *blink_pattern_command[] = BLINK_PATTERN_COMMAND;
-
-static int lc15bts_led_write(char *path, char *str)
-{
- int fd;
-
- if ((fd = open(path, O_WRONLY)) == -1)
- {
- return 0;
- }
-
- write(fd, str, strlen(str)+1);
- close(fd);
- return 1;
-}
-
-static void led_set_red()
-{
- lc15bts_led_write(led_entries[0].path, "1");
- lc15bts_led_write(led_entries[1].path, "0");
-}
-
-static void led_set_green()
-{
- lc15bts_led_write(led_entries[0].path, "0");
- lc15bts_led_write(led_entries[1].path, "1");
-}
-
-static void led_set_orange()
-{
- lc15bts_led_write(led_entries[0].path, "1");
- lc15bts_led_write(led_entries[1].path, "1");
-}
-
-static void led_set_off()
-{
- lc15bts_led_write(led_entries[0].path, "0");
- lc15bts_led_write(led_entries[1].path, "0");
-}
-
-static void led_sleep( struct lc15bts_mgr_instance *mgr, struct lc15bts_led_timer *led_timer, void (*led_timer_cb)(void *_data)) {
- /* Cancel any pending timer */
- osmo_timer_del(&led_timer->timer);
- /* Start LED timer */
- led_timer->timer.cb = led_timer_cb;
- led_timer->timer.data = mgr;
- mgr->lc15bts_leds.active_timer = led_timer->idx;
- osmo_timer_schedule(&led_timer->timer, led_timer->param.sleep_sec, led_timer->param.sleep_usec);
- LOGP(DTEMP, LOGL_DEBUG,"%s timer scheduled for %d sec + %d usec\n",
- get_value_string(lc15bts_led_strs, led_timer->idx),
- led_timer->param.sleep_sec,
- led_timer->param.sleep_usec);
-
- switch (led_timer->idx) {
- case LC15BTS_LED_RED:
- led_set_red();
- break;
- case LC15BTS_LED_GREEN:
- led_set_green();
- break;
- case LC15BTS_LED_ORANGE:
- led_set_orange();
- break;
- case LC15BTS_LED_OFF:
- led_set_off();
- break;
- default:
- led_set_off();
- }
-}
-
-static void led_sleep_cb(void *_data) {
- struct lc15bts_mgr_instance *mgr = _data;
- struct lc15bts_led_timer_list *led_list;
-
- /* make sure the timer list is not empty */
- if (llist_empty(&mgr->lc15bts_leds.list))
- return;
-
- llist_for_each_entry(led_list, &mgr->lc15bts_leds.list, list) {
- if (led_list->led_timer.idx == mgr->lc15bts_leds.active_timer) {
- LOGP(DTEMP, LOGL_DEBUG,"Delete expired %s timer %d sec + %d usec\n",
- get_value_string(lc15bts_led_strs, led_list->led_timer.idx),
- led_list->led_timer.param.sleep_sec,
- led_list->led_timer.param.sleep_usec);
-
- /* Delete current timer */
- osmo_timer_del(&led_list->led_timer.timer);
- /* Rotate the timer list */
- llist_move_tail(&led_list->list, &mgr->lc15bts_leds.list);
- break;
- }
- }
-
- /* Execute next timer */
- led_list = llist_first_entry(&mgr->lc15bts_leds.list, struct lc15bts_led_timer_list, list);
- if (led_list) {
- LOGP(DTEMP, LOGL_DEBUG,"Execute %s timer %d sec + %d usec, total entries=%d\n",
- get_value_string(lc15bts_led_strs, led_list->led_timer.idx),
- led_list->led_timer.param.sleep_sec,
- led_list->led_timer.param.sleep_usec,
- llist_count(&mgr->lc15bts_leds.list));
-
- led_sleep(mgr, &led_list->led_timer, led_sleep_cb);
- }
-
-}
-
-static void delete_led_timer_entries(struct lc15bts_mgr_instance *mgr)
-{
- struct lc15bts_led_timer_list *led_list, *led_list2;
-
- if (llist_empty(&mgr->lc15bts_leds.list))
- return;
-
- llist_for_each_entry_safe(led_list, led_list2, &mgr->lc15bts_leds.list, list) {
- /* Delete the timer in list */
- if (led_list) {
- LOGP(DTEMP, LOGL_DEBUG,"Delete %s timer entry from list, %d sec + %d usec\n",
- get_value_string(lc15bts_led_strs, led_list->led_timer.idx),
- led_list->led_timer.param.sleep_sec,
- led_list->led_timer.param.sleep_usec);
-
- /* Delete current timer */
- osmo_timer_del(&led_list->led_timer.timer);
- llist_del(&led_list->list);
- talloc_free(led_list);
- }
- }
- return;
-}
-
-static int add_led_timer_entry(struct lc15bts_mgr_instance *mgr, char *cmdstr)
-{
- double sec, int_sec, frac_sec;
- struct lc15bts_sleep_time led_param;
-
- led_param.sleep_sec = 0;
- led_param.sleep_usec = 0;
-
- if (strstr(cmdstr, "set red") != NULL)
- mgr->lc15bts_leds.led_idx = LC15BTS_LED_RED;
- else if (strstr(cmdstr, "set green") != NULL)
- mgr->lc15bts_leds.led_idx = LC15BTS_LED_GREEN;
- else if (strstr(cmdstr, "set orange") != NULL)
- mgr->lc15bts_leds.led_idx = LC15BTS_LED_ORANGE;
- else if (strstr(cmdstr, "set off") != NULL)
- mgr->lc15bts_leds.led_idx = LC15BTS_LED_OFF;
- else if (strstr(cmdstr, "sleep") != NULL) {
- sec = atof(cmdstr + 6);
- /* split time into integer and fractional of seconds */
- frac_sec = modf(sec, &int_sec) * 1000000.0;
- led_param.sleep_sec = (int)int_sec;
- led_param.sleep_usec = (int)frac_sec;
-
- if ((mgr->lc15bts_leds.led_idx >= LC15BTS_LED_RED) && (mgr->lc15bts_leds.led_idx < _LC15BTS_LED_MAX)) {
- struct lc15bts_led_timer_list *led_list;
-
- /* allocate timer entry */
- led_list = talloc_zero(tall_mgr_ctx, struct lc15bts_led_timer_list);
- if (led_list) {
- led_list->led_timer.idx = mgr->lc15bts_leds.led_idx;
- led_list->led_timer.param.sleep_sec = led_param.sleep_sec;
- led_list->led_timer.param.sleep_usec = led_param.sleep_usec;
- llist_add_tail(&led_list->list, &mgr->lc15bts_leds.list);
-
- LOGP(DTEMP, LOGL_DEBUG,"Add %s timer to list, %d sec + %d usec, total entries=%d\n",
- get_value_string(lc15bts_led_strs, mgr->lc15bts_leds.led_idx),
- led_list->led_timer.param.sleep_sec,
- led_list->led_timer.param.sleep_usec,
- llist_count(&mgr->lc15bts_leds.list));
- }
- }
- } else
- return -1;
-
- return 0;
-}
-
-static int parse_led_pattern(char *pattern, struct lc15bts_mgr_instance *mgr)
-{
- char str[1024];
- char *pstr;
- char *sep;
- int rc = 0;
-
- strcpy(str, pattern);
- pstr = str;
- while ((sep = strsep(&pstr, ";")) != NULL) {
- rc = add_led_timer_entry(mgr, sep);
- if (rc < 0) {
- break;
- }
-
- }
- return rc;
-}
-
-/*** led interface ***/
-
-void led_set(struct lc15bts_mgr_instance *mgr, int pattern_id)
-{
- int rc;
- struct lc15bts_led_timer_list *led_list;
-
- if (pattern_id > BLINK_PATTERN_MAX_ITEM - 1) {
- LOGP(DTEMP, LOGL_ERROR, "Invalid LED pattern : %d. LED pattern must be between %d..%d\n",
- pattern_id,
- BLINK_PATTERN_POWER_ON,
- BLINK_PATTERN_MAX_ITEM - 1);
- return;
- }
- if (pattern_id == mgr->lc15bts_leds.last_pattern_id)
- return;
-
- mgr->lc15bts_leds.last_pattern_id = pattern_id;
-
- LOGP(DTEMP, LOGL_NOTICE, "blink pattern command : %d\n", pattern_id);
- LOGP(DTEMP, LOGL_NOTICE, "%s\n", blink_pattern_command[pattern_id]);
-
- /* Empty existing LED timer in the list */
- delete_led_timer_entries(mgr);
-
- /* parse LED pattern */
- rc = parse_led_pattern(blink_pattern_command[pattern_id], mgr);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,"LED pattern not found or invalid LED pattern\n");
- return;
- }
-
- /* make sure the timer list is not empty */
- if (llist_empty(&mgr->lc15bts_leds.list))
- return;
-
- /* Start the first LED timer in the list */
- led_list = llist_first_entry(&mgr->lc15bts_leds.list, struct lc15bts_led_timer_list, list);
- if (led_list) {
- LOGP(DTEMP, LOGL_DEBUG,"Execute timer %s for %d sec + %d usec\n",
- get_value_string(lc15bts_led_strs, led_list->led_timer.idx),
- led_list->led_timer.param.sleep_sec,
- led_list->led_timer.param.sleep_usec);
-
- led_sleep(mgr, &led_list->led_timer, led_sleep_cb);
- }
-
-}
-
-void select_led_pattern(struct lc15bts_mgr_instance *mgr)
-{
- int i;
- uint8_t led[BLINK_PATTERN_MAX_ITEM] = {0};
-
- /* set normal LED pattern at first */
- led[BLINK_PATTERN_NORMAL] = 1;
-
- /* check on-board sensors for new LED pattern */
- check_sensor_led_pattern(mgr, led);
-
- /* check BTS status for new LED pattern */
- check_bts_led_pattern(led);
-
- /* check by priority */
- for (i = 0; i < sizeof(led_priority)/sizeof(uint8_t); i++) {
- if(led[led_priority[i]] == 1) {
- led_set(mgr, led_priority[i]);
- break;
- }
- }
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_led.h b/src/osmo-bts-litecell15/misc/lc15bts_led.h
deleted file mode 100644
index b6d9d28b..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_led.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef _LC15BTS_LED_H
-#define _LC15BTS_LED_H
-
-#include <stdint.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <math.h>
-#include <sys/stat.h>
-
-#include <osmo-bts/logging.h>
-#include <osmocom/core/timer.h>
-#include <osmocom/core/utils.h>
-
-#include "lc15bts_mgr.h"
-
-/* public function prototypes */
-void led_set(struct lc15bts_mgr_instance *mgr, int pattern_id);
-
-void select_led_pattern(struct lc15bts_mgr_instance *mgr);
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr.c
deleted file mode 100644
index da21c9d0..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/* Main program for NuRAN Wireless Litecell 1.5 BTS management daemon */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_mgr.c
- * (C) 2012 by Harald Welte <laforge@gnumonks.org>
- * (C) 2014 by Holger Hans Peter Freyther
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <getopt.h>
-#include <limits.h>
-#include <sys/signal.h>
-#include <sys/stat.h>
-
-#include <osmocom/core/talloc.h>
-#include <osmocom/core/application.h>
-#include <osmocom/core/timer.h>
-#include <osmocom/core/msgb.h>
-#include <osmocom/vty/telnet_interface.h>
-#include <osmocom/vty/logging.h>
-#include <osmocom/vty/ports.h>
-
-#include "misc/lc15bts_misc.h"
-#include "misc/lc15bts_mgr.h"
-#include "misc/lc15bts_par.h"
-#include "misc/lc15bts_bid.h"
-#include "misc/lc15bts_power.h"
-#include "misc/lc15bts_swd.h"
-
-#include "lc15bts_led.h"
-
-static int no_rom_write = 0;
-static int daemonize = 0;
-void *tall_mgr_ctx;
-
-/* every 6 hours means 365*4 = 1460 rom writes per year (max) */
-#define SENSOR_TIMER_SECS (6 * 3600)
-
-/* every 1 hours means 365*24 = 8760 rom writes per year (max) */
-#define HOURS_TIMER_SECS (1 * 3600)
-
-
-/* the initial state */
-static struct lc15bts_mgr_instance manager = {
- .config_file = "lc15bts-mgr.cfg",
- .temp = {
- .supply_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -40,
- },
- .soc_temp_limit = {
- .thresh_warn_max = 95,
- .thresh_crit_max = 100,
- .thresh_warn_min = -40,
- },
- .fpga_temp_limit = {
- .thresh_warn_max = 95,
- .thresh_crit_max = 100,
- .thresh_warn_min = -40,
- },
- .rmsdet_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -40,
- },
- .ocxo_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -40,
- },
- .tx0_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -20,
- },
- .tx1_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -20,
- },
- .pa0_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -40,
- },
- .pa1_temp_limit = {
- .thresh_warn_max = 80,
- .thresh_crit_max = 85,
- .thresh_warn_min = -40,
- }
- },
- .volt = {
- .supply_volt_limit = {
- .thresh_warn_max = 30000,
- .thresh_crit_max = 30500,
- .thresh_warn_min = 19000,
- .thresh_crit_min = 17500,
- }
- },
- .pwr = {
- .supply_pwr_limit = {
- .thresh_warn_max = 110,
- .thresh_crit_max = 120,
- },
- .pa0_pwr_limit = {
- .thresh_warn_max = 50,
- .thresh_crit_max = 60,
- },
- .pa1_pwr_limit = {
- .thresh_warn_max = 50,
- .thresh_crit_max = 60,
- }
- },
- .vswr = {
- .tx0_vswr_limit = {
- .thresh_warn_max = 3000,
- .thresh_crit_max = 5000,
- },
- .tx1_vswr_limit = {
- .thresh_warn_max = 3000,
- .thresh_crit_max = 5000,
- }
- },
- .gps = {
- .gps_fix_limit = {
- .thresh_warn_max = 7,
- }
- },
- .state = {
- .action_norm = SENSOR_ACT_NORM_PA0_ON | SENSOR_ACT_NORM_PA1_ON,
- .action_warn = 0,
- .action_crit = 0,
- .action_comb = 0,
- .state = STATE_NORMAL,
- }
-};
-
-static struct osmo_timer_list sensor_timer;
-static void check_sensor_timer_cb(void *unused)
-{
- lc15bts_check_temp(no_rom_write);
- lc15bts_check_power(no_rom_write);
- lc15bts_check_vswr(no_rom_write);
- osmo_timer_schedule(&sensor_timer, SENSOR_TIMER_SECS, 0);
- /* TODO checks if lc15bts_check_temp/lc15bts_check_power/lc15bts_check_vswr went ok */
- lc15bts_swd_event(&manager, SWD_CHECK_SENSOR);
-}
-
-static struct osmo_timer_list hours_timer;
-static void hours_timer_cb(void *unused)
-{
- lc15bts_update_hours(no_rom_write);
-
- osmo_timer_schedule(&hours_timer, HOURS_TIMER_SECS, 0);
- /* TODO: validates if lc15bts_update_hours went correctly */
- lc15bts_swd_event(&manager, SWD_UPDATE_HOURS);
-}
-
-static void print_help(void)
-{
- printf("lc15bts-mgr [-nsD] [-d cat]\n");
- printf(" -n Do not write to ROM\n");
- printf(" -s Disable color\n");
- printf(" -d CAT enable debugging\n");
- printf(" -D daemonize\n");
- printf(" -c Specify the filename of the config file\n");
-}
-
-static int parse_options(int argc, char **argv)
-{
- int opt;
-
- while ((opt = getopt(argc, argv, "nhsd:c:")) != -1) {
- switch (opt) {
- case 'n':
- no_rom_write = 1;
- break;
- case 'h':
- print_help();
- return -1;
- case 's':
- log_set_use_color(osmo_stderr_target, 0);
- break;
- case 'd':
- log_parse_category_mask(osmo_stderr_target, optarg);
- break;
- case 'D':
- daemonize = 1;
- break;
- case 'c':
- manager.config_file = optarg;
- break;
- default:
- return -1;
- }
- }
-
- return 0;
-}
-
-static void signal_handler(int signal)
-{
- fprintf(stderr, "signal %u received\n", signal);
-
- switch (signal) {
- case SIGINT:
- case SIGTERM:
- lc15bts_check_temp(no_rom_write);
- lc15bts_check_power(no_rom_write);
- lc15bts_check_vswr(no_rom_write);
- lc15bts_update_hours(no_rom_write);
- exit(0);
- break;
- case SIGABRT:
- case SIGUSR1:
- case SIGUSR2:
- talloc_report_full(tall_mgr_ctx, stderr);
- break;
- default:
- break;
- }
-}
-
-static struct log_info_cat mgr_log_info_cat[] = {
- [DTEMP] = {
- .name = "DTEMP",
- .description = "Temperature monitoring",
- .color = "\033[1;35m",
- .enabled = 1, .loglevel = LOGL_NOTICE,
- },
- [DFW] = {
- .name = "DFW",
- .description = "Firmware management",
- .color = "\033[1;36m",
- .enabled = 1, .loglevel = LOGL_NOTICE,
- },
- [DFIND] = {
- .name = "DFIND",
- .description = "ipaccess-find handling",
- .color = "\033[1;37m",
- .enabled = 1, .loglevel = LOGL_NOTICE,
- },
- [DCALIB] = {
- .name = "DCALIB",
- .description = "Calibration handling",
- .color = "\033[1;37m",
- .enabled = 1, .loglevel = LOGL_NOTICE,
- },
- [DSWD] = {
- .name = "DSWD",
- .description = "Software Watchdog",
- .color = "\033[1;37m",
- .enabled = 1, .loglevel = LOGL_NOTICE,
- },
-};
-
-static const struct log_info mgr_log_info = {
- .cat = mgr_log_info_cat,
- .num_cat = ARRAY_SIZE(mgr_log_info_cat),
-};
-
-int main(int argc, char **argv)
-{
- int rc;
-
- tall_mgr_ctx = talloc_named_const(NULL, 1, "bts manager");
- msgb_talloc_ctx_init(tall_mgr_ctx, 0);
-
- osmo_init_logging2(tall_mgr_ctx, &mgr_log_info);
-
- osmo_init_ignore_signals();
- signal(SIGINT, &signal_handler);
- signal(SIGTERM, &signal_handler);
- signal(SIGUSR1, &signal_handler);
- signal(SIGUSR2, &signal_handler);
-
- rc = parse_options(argc, argv);
- if (rc < 0)
- exit(2);
-
- lc15bts_mgr_vty_init();
- logging_vty_add_cmds();
- rc = lc15bts_mgr_parse_config(&manager);
- if (rc < 0) {
- LOGP(DFIND, LOGL_FATAL, "Cannot parse config file\n");
- exit(1);
- }
-
- rc = telnet_init(tall_mgr_ctx, NULL, OSMO_VTY_PORT_BTSMGR);
- if (rc < 0) {
- fprintf(stderr, "Error initializing telnet\n");
- exit(1);
- }
-
- INIT_LLIST_HEAD(&manager.lc15bts_leds.list);
- INIT_LLIST_HEAD(&manager.alarms.list);
-
- /* Initialize the service watchdog notification for SWD_LAST event(s) */
- if (lc15bts_swd_init(&manager, (int)(SWD_LAST)) != 0)
- exit(3);
-
- /* start temperature check timer */
- sensor_timer.cb = check_sensor_timer_cb;
- check_sensor_timer_cb(NULL);
-
- /* start operational hours timer */
- hours_timer.cb = hours_timer_cb;
- hours_timer_cb(NULL);
-
- /* Enable the PAs */
- rc = lc15bts_power_set(LC15BTS_POWER_PA0, 1);
- if (rc < 0) {
- exit(3);
- }
-
- rc = lc15bts_power_set(LC15BTS_POWER_PA1, 1);
- if (rc < 0) {
- exit(3);
- }
-
- /* handle broadcast messages for ipaccess-find */
- if (lc15bts_mgr_nl_init() != 0)
- exit(3);
-
- /* Initialize the sensor control */
- lc15bts_mgr_sensor_init(&manager);
-
- if (lc15bts_mgr_calib_init(&manager) != 0)
- exit(3);
-
- if (daemonize) {
- rc = osmo_daemonize();
- if (rc < 0) {
- perror("Error during daemonize");
- exit(1);
- }
- }
-
- while (1) {
- log_reset_context();
- osmo_select_main(0);
- lc15bts_swd_event(&manager, SWD_MAINLOOP);
- }
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr.h b/src/osmo-bts-litecell15/misc/lc15bts_mgr.h
deleted file mode 100644
index 4bfbdbc9..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr.h
+++ /dev/null
@@ -1,422 +0,0 @@
-#ifndef _LC15BTS_MGR_H
-#define _LC15BTS_MGR_H
-
-#include <osmocom/vty/vty.h>
-#include <osmocom/vty/command.h>
-
-#include <osmocom/core/select.h>
-#include <osmocom/core/timer.h>
-
-#include <stdint.h>
-
-#define LC15BTS_SENSOR_TIMER_DURATION 60
-#define LC15BTS_PREVENT_TIMER_DURATION 15 * 60
-#define LC15BTS_PREVENT_TIMER_SHORT_DURATION 5 * 60
-#define LC15BTS_PREVENT_TIMER_NONE 0
-#define LC15BTS_PREVENT_RETRY INT_MAX - 1
-
-enum BLINK_PATTERN {
- BLINK_PATTERN_POWER_ON = 0, //hardware set
- BLINK_PATTERN_INIT,
- BLINK_PATTERN_NORMAL,
- BLINK_PATTERN_EXT_LINK_MALFUNC,
- BLINK_PATTERN_INT_PROC_MALFUNC,
- BLINK_PATTERN_SUPPLY_VOLT_LOW,
- BLINK_PATTERN_SUPPLY_VOLT_MIN,
- BLINK_PATTERN_VSWR_HIGH,
- BLINK_PATTERN_VSWR_MAX,
- BLINK_PATTERN_TEMP_HIGH,
- BLINK_PATTERN_TEMP_MAX,
- BLINK_PATTERN_SUPPLY_PWR_HIGH,
- BLINK_PATTERN_SUPPLY_PWR_MAX,
- BLINK_PATTERN_SUPPLY_PWR_MAX2,
- BLINK_PATTERN_PA_PWR_HIGH,
- BLINK_PATTERN_PA_PWR_MAX,
- BLINK_PATTERN_GPS_FIX_LOST,
- BLINK_PATTERN_MAX_ITEM
-};
-
-#define BLINK_PATTERN_COMMAND {\
- "set red; sleep 5.0",\
- "set orange; sleep 5.0",\
- "set green; sleep 2.5; set off; sleep 2.5",\
- "set red; sleep 0.5; set off; sleep 0.5",\
- "set red; sleep 2.5; set off; sleep 2.5",\
- "set green; sleep 2.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5; set green; sleep 0.5; set off; sleep 0.5",\
- "set red; sleep 2.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5; set green; sleep 0.5; set off; sleep 0.5 ",\
- "set green; sleep 2.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5",\
- "set red; sleep 2.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5",\
- "set orange; sleep 2.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5 ",\
- "set red; sleep 2.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5",\
- "set green; sleep 2.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5",\
- "set red; sleep 2.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5",\
- "set orange; sleep 2.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5",\
- "set green; sleep 2.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5",\
- "set red; sleep 2.5; set off; sleep 0.5; set red; sleep 0.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5",\
- "set green; sleep 2.5; set off; sleep 0.5; set green; sleep 0.5; set off; sleep 0.5; set orange; sleep 0.5; set off; sleep 0.5",\
-}
-
-enum {
- DTEMP,
- DFW,
- DFIND,
- DCALIB,
- DSWD,
-};
-
-// TODO NTQD: Define new actions like reducing output power, limit ARM core speed, shutdown second TRX/PA, ...
-enum {
-#if 0
- SENSOR_ACT_PWR_CONTRL = 0x1,
-#endif
- SENSOR_ACT_PA0_OFF = 0x2,
- SENSOR_ACT_PA1_OFF = 0x4,
- SENSOR_ACT_BTS_SRV_OFF = 0x10,
-};
-
-/* actions only for normal state */
-enum {
-#if 0
- SENSOR_ACT_NORM_PW_CONTRL = 0x1,
-#endif
- SENSOR_ACT_NORM_PA0_ON = 0x2,
- SENSOR_ACT_NORM_PA1_ON = 0x4,
- SENSOR_ACT_NORM_BTS_SRV_ON= 0x10,
-};
-
-enum lc15bts_sensor_state {
- STATE_NORMAL, /* Everything is fine */
- STATE_WARNING_HYST, /* Go back to normal next? */
- STATE_WARNING, /* We are above the warning threshold */
- STATE_CRITICAL, /* We have an issue. Wait for below warning */
-};
-
-enum lc15bts_leds_name {
- LC15BTS_LED_RED = 0,
- LC15BTS_LED_GREEN,
- LC15BTS_LED_ORANGE,
- LC15BTS_LED_OFF,
- _LC15BTS_LED_MAX
-};
-
-struct lc15bts_led{
- char *name;
- char *fullname;
- char *path;
-};
-
-/**
- * Temperature Limits. We separate from a threshold
- * that will generate a warning and one that is so
- * severe that an action will be taken.
- */
-struct lc15bts_temp_limit {
- int thresh_warn_max;
- int thresh_crit_max;
- int thresh_warn_min;
-};
-
-struct lc15bts_volt_limit {
- int thresh_warn_max;
- int thresh_crit_max;
- int thresh_warn_min;
- int thresh_crit_min;
-};
-
-struct lc15bts_pwr_limit {
- int thresh_warn_max;
- int thresh_crit_max;
-};
-
-struct lc15bts_vswr_limit {
- int thresh_warn_max;
- int thresh_crit_max;
-};
-
-struct lc15bts_gps_fix_limit {
- int thresh_warn_max;
-};
-
-struct lc15bts_sleep_time {
- int sleep_sec;
- int sleep_usec;
-};
-
-struct lc15bts_led_timer {
- uint8_t idx;
- struct osmo_timer_list timer;
- struct lc15bts_sleep_time param;
-};
-
-struct lc15bts_led_timer_list {
- struct llist_head list;
- struct lc15bts_led_timer led_timer;
-};
-
-struct lc15bts_preventive_list {
- struct llist_head list;
- struct lc15bts_sleep_time param;
- int action_flag;
-};
-
-enum mgr_vty_node {
- MGR_NODE = _LAST_OSMOVTY_NODE + 1,
-
- ACT_NORM_NODE,
- ACT_WARN_NODE,
- ACT_CRIT_NODE,
- LIMIT_SUPPLY_TEMP_NODE,
- LIMIT_SOC_NODE,
- LIMIT_FPGA_NODE,
- LIMIT_RMSDET_NODE,
- LIMIT_OCXO_NODE,
- LIMIT_TX0_TEMP_NODE,
- LIMIT_TX1_TEMP_NODE,
- LIMIT_PA0_TEMP_NODE,
- LIMIT_PA1_TEMP_NODE,
- LIMIT_SUPPLY_VOLT_NODE,
- LIMIT_TX0_VSWR_NODE,
- LIMIT_TX1_VSWR_NODE,
- LIMIT_SUPPLY_PWR_NODE,
- LIMIT_PA0_PWR_NODE,
- LIMIT_PA1_PWR_NODE,
- LIMIT_GPS_FIX_NODE,
-};
-
-enum mgr_vty_limit_type {
- MGR_LIMIT_TYPE_TEMP = 0,
- MGR_LIMIT_TYPE_VOLT,
- MGR_LIMIT_TYPE_VSWR,
- MGR_LIMIT_TYPE_PWR,
- _MGR_LIMIT_TYPE_MAX,
-};
-
-struct lc15bts_mgr_instance {
- const char *config_file;
-
- struct {
- struct lc15bts_temp_limit supply_temp_limit;
- struct lc15bts_temp_limit soc_temp_limit;
- struct lc15bts_temp_limit fpga_temp_limit;
- struct lc15bts_temp_limit rmsdet_temp_limit;
- struct lc15bts_temp_limit ocxo_temp_limit;
- struct lc15bts_temp_limit tx0_temp_limit;
- struct lc15bts_temp_limit tx1_temp_limit;
- struct lc15bts_temp_limit pa0_temp_limit;
- struct lc15bts_temp_limit pa1_temp_limit;
- } temp;
-
- struct {
- struct lc15bts_volt_limit supply_volt_limit;
- } volt;
-
- struct {
- struct lc15bts_pwr_limit supply_pwr_limit;
- struct lc15bts_pwr_limit pa0_pwr_limit;
- struct lc15bts_pwr_limit pa1_pwr_limit;
- } pwr;
-
- struct {
- struct lc15bts_vswr_limit tx0_vswr_limit;
- struct lc15bts_vswr_limit tx1_vswr_limit;
- int tx0_last_vswr;
- int tx1_last_vswr;
- } vswr;
-
- struct {
- struct lc15bts_gps_fix_limit gps_fix_limit;
- time_t last_update;
- } gps;
-
- struct {
- int action_norm;
- int action_warn;
- int action_crit;
- int action_comb;
-
- enum lc15bts_sensor_state state;
- } state;
-
- struct {
- int state;
- int calib_from_loop;
- struct osmo_timer_list calib_timeout;
- } calib;
-
- struct {
- int state;
- int swd_from_loop;
- unsigned long long int swd_events;
- unsigned long long int swd_events_cache;
- unsigned long long int swd_eventmasks;
- int num_events;
- struct osmo_timer_list swd_timeout;
- } swd;
-
- struct {
- uint8_t led_idx;
- uint8_t last_pattern_id;
- uint8_t active_timer;
- struct llist_head list;
- } lc15bts_leds;
-
- struct {
- int is_up;
- uint32_t last_seqno;
- struct osmo_timer_list recon_timer;
- struct ipa_client_conn *bts_conn;
- uint32_t crit_flags;
- uint32_t warn_flags;
- } lc15bts_ctrl;
-
- struct lc15bts_alarms {
- int temp_high;
- int temp_max;
- int supply_low;
- int supply_min;
- int vswr_high;
- int vswr_max;
- int supply_pwr_high;
- int supply_pwr_max;
- int supply_pwr_max2;
- int pa_pwr_high;
- int pa_pwr_max;
- int gps_fix_lost;
- struct llist_head list;
- struct osmo_timer_list preventive_timer;
- int preventive_duration;
- int preventive_retry;
- } alarms;
-
-};
-
-enum lc15bts_mgr_fail_evt_rep_crit_sig {
- /* Critical alarms */
- S_MGR_TEMP_SUPPLY_CRIT_MAX_ALARM = (1 << 0),
- S_MGR_TEMP_SOC_CRIT_MAX_ALARM = (1 << 1),
- S_MGR_TEMP_FPGA_CRIT_MAX_ALARM = (1 << 2),
- S_MGR_TEMP_RMS_DET_CRIT_MAX_ALARM = (1 << 3),
- S_MGR_TEMP_OCXO_CRIT_MAX_ALARM = (1 << 4),
- S_MGR_TEMP_TRX0_CRIT_MAX_ALARM = (1 << 5),
- S_MGR_TEMP_TRX1_CRIT_MAX_ALARM = (1 << 6),
- S_MGR_TEMP_PA0_CRIT_MAX_ALARM = (1 << 7),
- S_MGR_TEMP_PA1_CRIT_MAX_ALARM = (1 << 8),
- S_MGR_SUPPLY_CRIT_MAX_ALARM = (1 << 9),
- S_MGR_SUPPLY_CRIT_MIN_ALARM = (1 << 10),
- S_MGR_VSWR0_CRIT_MAX_ALARM = (1 << 11),
- S_MGR_VSWR1_CRIT_MAX_ALARM = (1 << 12),
- S_MGR_PWR_SUPPLY_CRIT_MAX_ALARM = (1 << 13),
- S_MGR_PWR_PA0_CRIT_MAX_ALARM = (1 << 14),
- S_MGR_PWR_PA1_CRIT_MAX_ALARM = (1 << 15),
- _S_MGR_CRIT_ALARM_MAX,
-};
-
-enum lc15bts_mgr_fail_evt_rep_warn_sig {
- /* Warning alarms */
- S_MGR_TEMP_SUPPLY_WARN_MIN_ALARM = (1 << 0),
- S_MGR_TEMP_SUPPLY_WARN_MAX_ALARM = (1 << 2),
- S_MGR_TEMP_SOC_WARN_MIN_ALARM = (1 << 3),
- S_MGR_TEMP_SOC_WARN_MAX_ALARM = (1 << 4),
- S_MGR_TEMP_FPGA_WARN_MIN_ALARM = (1 << 5),
- S_MGR_TEMP_FPGA_WARN_MAX_ALARM = (1 << 6),
- S_MGR_TEMP_RMS_DET_WARN_MIN_ALARM = (1 << 7),
- S_MGR_TEMP_RMS_DET_WARN_MAX_ALARM = (1 << 8),
- S_MGR_TEMP_OCXO_WARN_MIN_ALARM = (1 << 9),
- S_MGR_TEMP_OCXO_WARN_MAX_ALARM = (1 << 10),
- S_MGR_TEMP_TRX0_WARN_MIN_ALARM = (1 << 11),
- S_MGR_TEMP_TRX0_WARN_MAX_ALARM = (1 << 12),
- S_MGR_TEMP_TRX1_WARN_MIN_ALARM = (1 << 13),
- S_MGR_TEMP_TRX1_WARN_MAX_ALARM = (1 << 14),
- S_MGR_TEMP_PA0_WARN_MIN_ALARM = (1 << 15),
- S_MGR_TEMP_PA0_WARN_MAX_ALARM = (1 << 16),
- S_MGR_TEMP_PA1_WARN_MIN_ALARM = (1 << 17),
- S_MGR_TEMP_PA1_WARN_MAX_ALARM = (1 << 18),
- S_MGR_SUPPLY_WARN_MIN_ALARM = (1 << 19),
- S_MGR_SUPPLY_WARN_MAX_ALARM = (1 << 20),
- S_MGR_VSWR0_WARN_MAX_ALARM = (1 << 21),
- S_MGR_VSWR1_WARN_MAX_ALARM = (1 << 22),
- S_MGR_PWR_SUPPLY_WARN_MAX_ALARM = (1 << 23),
- S_MGR_PWR_PA0_WARN_MAX_ALARM = (1 << 24),
- S_MGR_PWR_PA1_WARN_MAX_ALARM = (1 << 25),
- S_MGR_GPS_FIX_WARN_ALARM = (1 << 26),
- _S_MGR_WARN_ALARM_MAX,
-};
-
-enum lc15bts_mgr_failure_event_causes {
- /* Critical causes */
- NM_EVT_CAUSE_CRIT_TEMP_SUPPLY_MAX_FAIL = 0x4100,
- NM_EVT_CAUSE_CRIT_TEMP_FPGA_MAX_FAIL = 0x4101,
- NM_EVT_CAUSE_CRIT_TEMP_SOC_MAX_FAIL = 0x4102,
- NM_EVT_CAUSE_CRIT_TEMP_RMS_DET_MAX_FAIL = 0x4103,
- NM_EVT_CAUSE_CRIT_TEMP_OCXO_MAX_FAIL = 0x4104,
- NM_EVT_CAUSE_CRIT_TEMP_TRX0_MAX_FAIL = 0x4105,
- NM_EVT_CAUSE_CRIT_TEMP_TRX1_MAX_FAIL = 0x4106,
- NM_EVT_CAUSE_CRIT_TEMP_PA0_MAX_FAIL = 0x4107,
- NM_EVT_CAUSE_CRIT_TEMP_PA1_MAX_FAIL = 0x4108,
- NM_EVT_CAUSE_CRIT_SUPPLY_MAX_FAIL = 0x4109,
- NM_EVT_CAUSE_CRIT_SUPPLY_MIN_FAIL = 0x410A,
- NM_EVT_CAUSE_CRIT_VSWR0_MAX_FAIL = 0x410B,
- NM_EVT_CAUSE_CRIT_VSWR1_MAX_FAIL = 0x410C,
- NM_EVT_CAUSE_CRIT_PWR_SUPPLY_MAX_FAIL = 0x410D,
- NM_EVT_CAUSE_CRIT_PWR_PA0_MAX_FAIL = 0x410E,
- NM_EVT_CAUSE_CRIT_PWR_PA1_MAX_FAIL = 0x410F,
- /* Warning causes */
- NM_EVT_CAUSE_WARN_TEMP_SUPPLY_LOW_FAIL = 0x4400,
- NM_EVT_CAUSE_WARN_TEMP_SUPPLY_HIGH_FAIL = 0x4401,
- NM_EVT_CAUSE_WARN_TEMP_FPGA_LOW_FAIL = 0x4402,
- NM_EVT_CAUSE_WARN_TEMP_FPGA_HIGH_FAIL = 0x4403,
- NM_EVT_CAUSE_WARN_TEMP_SOC_LOW_FAIL = 0x4404,
- NM_EVT_CAUSE_WARN_TEMP_SOC_HIGH_FAIL = 0x4405,
- NM_EVT_CAUSE_WARN_TEMP_RMS_DET_LOW_FAIL = 0x4406,
- NM_EVT_CAUSE_WARN_TEMP_RMS_DET_HIGH_FAIL= 0x4407,
- NM_EVT_CAUSE_WARN_TEMP_OCXO_LOW_FAIL = 0x4408,
- NM_EVT_CAUSE_WARN_TEMP_OCXO_HIGH_FAIL = 0x4409,
- NM_EVT_CAUSE_WARN_TEMP_TRX0_LOW_FAIL = 0x440A,
- NM_EVT_CAUSE_WARN_TEMP_TRX0_HIGH_FAIL = 0x440B,
- NM_EVT_CAUSE_WARN_TEMP_TRX1_LOW_FAIL = 0x440C,
- NM_EVT_CAUSE_WARN_TEMP_TRX1_HIGH_FAIL = 0x440D,
- NM_EVT_CAUSE_WARN_TEMP_PA0_LOW_FAIL = 0x440E,
- NM_EVT_CAUSE_WARN_TEMP_PA0_HIGH_FAIL = 0x440F,
- NM_EVT_CAUSE_WARN_TEMP_PA1_LOW_FAIL = 0x4410,
- NM_EVT_CAUSE_WARN_TEMP_PA1_HIGH_FAIL = 0x4411,
- NM_EVT_CAUSE_WARN_SUPPLY_LOW_FAIL = 0x4412,
- NM_EVT_CAUSE_WARN_SUPPLY_HIGH_FAIL = 0x4413,
- NM_EVT_CAUSE_WARN_VSWR0_HIGH_FAIL = 0x4414,
- NM_EVT_CAUSE_WANR_VSWR1_HIGH_FAIL = 0x4415,
- NM_EVT_CAUSE_WARN_PWR_SUPPLY_HIGH_FAIL = 0x4416,
- NM_EVT_CAUSE_WARN_PWR_PA0_HIGH_FAIL = 0x4417,
- NM_EVT_CAUSE_WARN_PWR_PA1_HIGH_FAIL = 0x4418,
- NM_EVT_CAUSE_WARN_GPS_FIX_FAIL = 0x4419,
-};
-
-/* This defines the list of notification events for systemd service watchdog.
- all these events must be notified in a certain service defined timeslot
- or the service (this app) would be restarted (only if related systemd service
- unit file has WatchdogSec!=0).
- WARNING: swd events must begin with event 0. Last events must be
- SWD_LAST (max 64 events in this list).
-*/
-enum mgr_swd_events {
- SWD_MAINLOOP = 0,
- SWD_CHECK_SENSOR,
- SWD_UPDATE_HOURS,
- SWD_CHECK_TEMP_SENSOR,
- SWD_CHECK_LED_CTRL,
- SWD_CHECK_CALIB,
- SWD_CHECK_BTS_CONNECTION,
- SWD_LAST
-};
-
-int lc15bts_mgr_vty_init(void);
-int lc15bts_mgr_parse_config(struct lc15bts_mgr_instance *mgr);
-int lc15bts_mgr_nl_init(void);
-int lc15bts_mgr_sensor_init(struct lc15bts_mgr_instance *mgr);
-const char *lc15bts_mgr_sensor_get_state(enum lc15bts_sensor_state state);
-
-int lc15bts_mgr_calib_init(struct lc15bts_mgr_instance *mgr);
-int lc15bts_mgr_control_init(struct lc15bts_mgr_instance *mgr);
-int lc15bts_mgr_calib_run(struct lc15bts_mgr_instance *mgr);
-void lc15bts_mgr_dispatch_alarm(struct lc15bts_mgr_instance *mgr, const int cause, const char *key, const char *text);
-extern void *tall_mgr_ctx;
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_calib.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_calib.c
deleted file mode 100644
index badb5455..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_calib.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/* OCXO calibration control for Litecell 1.5 BTS management daemon */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_mgr_calib.c
- * (C) 2014,2015 by Holger Hans Peter Freyther
- * (C) 2014 by Harald Welte for the IPA code from the oml router
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "misc/lc15bts_mgr.h"
-#include "misc/lc15bts_misc.h"
-#include "misc/lc15bts_clock.h"
-#include "misc/lc15bts_swd.h"
-#include "misc/lc15bts_par.h"
-#include "misc/lc15bts_led.h"
-#include "osmo-bts/msg_utils.h"
-
-#include <osmocom/core/logging.h>
-#include <osmocom/core/select.h>
-
-#include <osmocom/ctrl/control_cmd.h>
-
-#include <osmocom/gsm/ipa.h>
-#include <osmocom/gsm/protocol/ipaccess.h>
-
-#include <osmocom/abis/abis.h>
-#include <osmocom/abis/e1_input.h>
-#include <osmocom/abis/ipa.h>
-
-#include <time.h>
-
-static void calib_adjust(struct lc15bts_mgr_instance *mgr);
-static void calib_state_reset(struct lc15bts_mgr_instance *mgr, int reason);
-static void calib_loop_run(void *_data);
-
-static int ocxodac_saved_value = -1;
-
-enum calib_state {
- CALIB_INITIAL,
- CALIB_IN_PROGRESS,
-};
-
-enum calib_result {
- CALIB_FAIL_START,
- CALIB_FAIL_GPSFIX,
- CALIB_FAIL_CLKERR,
- CALIB_FAIL_OCXODAC,
- CALIB_SUCCESS,
-};
-
-static void calib_start(struct lc15bts_mgr_instance *mgr)
-{
- int rc;
-
- rc = lc15bts_clock_err_open();
- if (rc != 0) {
- LOGP(DCALIB, LOGL_ERROR, "Failed to open clock error module %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_CLKERR);
- return;
- }
-
- rc = lc15bts_clock_dac_open();
- if (rc != 0) {
- LOGP(DCALIB, LOGL_ERROR, "Failed to open OCXO dac module %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_OCXODAC);
- return;
- }
-
- calib_adjust(mgr);
-}
-
-static void calib_adjust(struct lc15bts_mgr_instance *mgr)
-{
- int rc;
- int fault;
- int error_ppt;
- int accuracy_ppq;
- int interval_sec;
- int dac_value;
- int new_dac_value;
- int dac_correction;
- time_t now;
- time_t last_gps_fix;
-
- rc = lc15bts_clock_err_get(&fault, &error_ppt,
- &accuracy_ppq, &interval_sec);
- if (rc < 0) {
- LOGP(DCALIB, LOGL_ERROR,
- "Failed to get clock error measurement %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_CLKERR);
- return;
- }
-
- /* get current time */
- now = time(NULL);
-
- /* first time after start of manager program */
- if (mgr->gps.last_update == 0)
- mgr->gps.last_update = now;
-
- /* read last GPS 3D fix from storage */
- rc = lc15bts_par_get_gps_fix(&last_gps_fix);
- if (rc < 0) {
- LOGP(DCALIB, LOGL_NOTICE, "Last GPS 3D fix can not read (%d). Last GPS 3D fix sets to zero\n", rc);
- last_gps_fix = 0;
- }
-
- if (fault) {
- LOGP(DCALIB, LOGL_NOTICE, "GPS has no fix\n");
- calib_state_reset(mgr, CALIB_FAIL_GPSFIX);
- return;
- }
-
- /* We got GPS 3D fix */
- LOGP(DCALIB, LOGL_DEBUG, "Got GPS 3D fix warn_flags=0x%08x, last=%lld, now=%lld\n",
- mgr->lc15bts_ctrl.warn_flags,
- (long long)last_gps_fix,
- (long long)now);
-
- rc = lc15bts_clock_dac_get(&dac_value);
- if (rc < 0) {
- LOGP(DCALIB, LOGL_ERROR,
- "Failed to get OCXO dac value %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_OCXODAC);
- return;
- }
-
- /* Set OCXO initial dac value */
- if (ocxodac_saved_value < 0)
- ocxodac_saved_value = dac_value;
-
- LOGP(DCALIB, LOGL_NOTICE,
- "Calibration ERR(%f PPB) ACC(%f PPB) INT(%d) DAC(%d)\n",
- error_ppt / 1000., accuracy_ppq / 1000000., interval_sec, dac_value);
-
- /* Need integration time to correct */
- if (interval_sec) {
- /* 1 unit of correction equal about 0.5 - 1 PPB correction */
- dac_correction = (int)(-error_ppt * 0.0015);
- new_dac_value = dac_value + dac_correction;
-
- if (new_dac_value > 4095)
- new_dac_value = 4095;
- else if (new_dac_value < 0)
- new_dac_value = 0;
-
- /* We have a fix, make sure the measured error is
- meaningful (10 times the accuracy) */
- if ((new_dac_value != dac_value) && ((100l * abs(error_ppt)) > accuracy_ppq)) {
-
- LOGP(DCALIB, LOGL_NOTICE,
- "Going to apply %d as new clock setting.\n",
- new_dac_value);
-
- rc = lc15bts_clock_dac_set(new_dac_value);
- if (rc < 0) {
- LOGP(DCALIB, LOGL_ERROR,
- "Failed to set OCXO dac value %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_OCXODAC);
- return;
- }
- rc = lc15bts_clock_err_reset();
- if (rc < 0) {
- LOGP(DCALIB, LOGL_ERROR,
- "Failed to reset clock error module %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_CLKERR);
- return;
- }
- }
- /* New conditions to store DAC value:
- * - Resolution accuracy less or equal than 0.01PPB (or 10000 PPQ)
- * - Error less or equal than 2PPB (or 2000PPT)
- * - Solution different than the last one */
- else if (accuracy_ppq <= 10000) {
- if((dac_value != ocxodac_saved_value) && (abs(error_ppt) < 2000)) {
- LOGP(DCALIB, LOGL_NOTICE, "Saving OCXO DAC value to memory... val = %d\n", dac_value);
- rc = lc15bts_clock_dac_save();
- if (rc < 0) {
- LOGP(DCALIB, LOGL_ERROR,
- "Failed to save OCXO dac value %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_OCXODAC);
- } else {
- ocxodac_saved_value = dac_value;
- }
- }
-
- rc = lc15bts_clock_err_reset();
- if (rc < 0) {
- LOGP(DCALIB, LOGL_ERROR,
- "Failed to reset clock error module %d\n", rc);
- calib_state_reset(mgr, CALIB_FAIL_CLKERR);
- }
- }
- } else {
- LOGP(DCALIB, LOGL_NOTICE, "Skipping this iteration, no integration time\n");
- }
-
- calib_state_reset(mgr, CALIB_SUCCESS);
- return;
-}
-
-static void calib_close(struct lc15bts_mgr_instance *mgr)
-{
- lc15bts_clock_err_close();
- lc15bts_clock_dac_close();
-}
-
-static void calib_state_reset(struct lc15bts_mgr_instance *mgr, int outcome)
-{
- if (mgr->calib.calib_from_loop) {
- /*
- * In case of success calibrate in two hours again
- * and in case of a failure in some minutes.
- *
- * TODO NTQ: Select timeout based on last error and accuracy
- */
- int timeout = 60;
- //int timeout = 2 * 60 * 60;
- //if (outcome != CALIB_SUCESS) }
- // timeout = 5 * 60;
- //}
-
- mgr->calib.calib_timeout.data = mgr;
- mgr->calib.calib_timeout.cb = calib_loop_run;
- osmo_timer_schedule(&mgr->calib.calib_timeout, timeout, 0);
- /* TODO: do we want to notify if we got a calibration error, like no gps fix? */
- lc15bts_swd_event(mgr, SWD_CHECK_CALIB);
- }
-
- mgr->calib.state = CALIB_INITIAL;
- calib_close(mgr);
-}
-
-static int calib_run(struct lc15bts_mgr_instance *mgr, int from_loop)
-{
- if (mgr->calib.state != CALIB_INITIAL) {
- LOGP(DCALIB, LOGL_ERROR, "Calib is already in progress.\n");
- return -1;
- }
-
- mgr->calib.calib_from_loop = from_loop;
-
- /* From now on everything will be handled from the failure */
- mgr->calib.state = CALIB_IN_PROGRESS;
- calib_start(mgr);
- return 0;
-}
-
-static void calib_loop_run(void *_data)
-{
- int rc;
- struct lc15bts_mgr_instance *mgr = _data;
-
- LOGP(DCALIB, LOGL_NOTICE, "Going to calibrate the system.\n");
- rc = calib_run(mgr, 1);
- if (rc != 0) {
- calib_state_reset(mgr, CALIB_FAIL_START);
- }
-}
-
-int lc15bts_mgr_calib_run(struct lc15bts_mgr_instance *mgr)
-{
- return calib_run(mgr, 0);
-}
-
-int lc15bts_mgr_calib_init(struct lc15bts_mgr_instance *mgr)
-{
- mgr->calib.state = CALIB_INITIAL;
- mgr->calib.calib_timeout.data = mgr;
- mgr->calib.calib_timeout.cb = calib_loop_run;
- osmo_timer_schedule(&mgr->calib.calib_timeout, 0, 0);
-
- return 0;
-}
-
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c
deleted file mode 100644
index 3a617dd7..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* NetworkListen for NuRAN Litecell 1.5 BTS management daemon */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_mgr_nl.c
- * (C) 2014 by Holger Hans Peter Freyther
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "misc/lc15bts_mgr.h"
-#include "misc/lc15bts_misc.h"
-#include "misc/lc15bts_nl.h"
-#include "misc/lc15bts_par.h"
-#include "misc/lc15bts_bid.h"
-
-#include <osmo-bts/logging.h>
-
-#include <osmocom/gsm/protocol/ipaccess.h>
-
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/socket.h>
-#include <osmocom/core/select.h>
-
-#include <arpa/inet.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#define ETH0_ADDR_SYSFS "/var/lc15/net/eth0/address"
-
-static struct osmo_fd nl_fd;
-
-/*
- * The TLV structure in IPA messages in UDP packages is a bit
- * weird. First the header appears to have an extra NULL byte
- * and second the L16 of the L16TV needs to include +1 for the
- * tag. The default msgb/tlv and libosmo-abis routines do not
- * provide this.
- */
-
-static void ipaccess_prepend_header_quirk(struct msgb *msg, int proto)
-{
- struct ipaccess_head *hh;
-
- /* prepend the ip.access header */
- hh = (struct ipaccess_head *) msgb_push(msg, sizeof(*hh) + 1);
- hh->len = htons(msg->len - sizeof(*hh) - 1);
- hh->proto = proto;
-}
-
-static void quirk_l16tv_put(struct msgb *msg, uint16_t len, uint8_t tag,
- const uint8_t *val)
-{
- uint8_t *buf = msgb_put(msg, len + 2 + 1);
-
- *buf++ = (len + 1) >> 8;
- *buf++ = (len + 1) & 0xff;
- *buf++ = tag;
- memcpy(buf, val, len);
-}
-
-/*
- * We don't look at the content of the request yet and lie
- * about most of the responses.
- */
-static void respond_to(struct sockaddr_in *src, struct osmo_fd *fd,
- uint8_t *data, size_t len)
-{
- static int fetched_info = 0;
- static char mac_str[20] = {0, };
- static char model_name[64] = {0, };
- static char ser_str[20] = {0, };
-
- struct sockaddr_in loc_addr;
- int rc;
- char loc_ip[INET_ADDRSTRLEN];
- struct msgb *msg = msgb_alloc_headroom(512, 128, "ipa get response");
- if (!msg) {
- LOGP(DFIND, LOGL_ERROR, "Failed to allocate msgb\n");
- return;
- }
-
- if (!fetched_info) {
- int fd_eth;
- int serno;
-
- /* fetch the MAC */
- fd_eth = open(ETH0_ADDR_SYSFS, O_RDONLY);
- if (fd_eth >= 0) {
- read(fd_eth, mac_str, sizeof(mac_str)-1);
- mac_str[sizeof(mac_str)-1] = '\0';
- close(fd_eth);
- }
-
- /* fetch the serial number */
- lc15bts_par_get_int(tall_mgr_ctx, LC15BTS_PAR_SERNR, &serno);
- snprintf(ser_str, sizeof(ser_str), "%d", serno);
-
- strncpy(model_name, get_hwversion_desc(), sizeof(model_name)-1);
- fetched_info = 1;
- }
-
- if (source_for_dest(&src->sin_addr, &loc_addr.sin_addr) != 0) {
- LOGP(DFIND, LOGL_ERROR, "Failed to determine local source\n");
- return;
- }
-
- msgb_put_u8(msg, IPAC_MSGT_ID_RESP);
-
- /* append MAC addr */
- quirk_l16tv_put(msg, strlen(mac_str) + 1, IPAC_IDTAG_MACADDR, (uint8_t *) mac_str);
-
- /* append ip address */
- inet_ntop(AF_INET, &loc_addr.sin_addr, loc_ip, sizeof(loc_ip));
- quirk_l16tv_put(msg, strlen(loc_ip) + 1, IPAC_IDTAG_IPADDR, (uint8_t *) loc_ip);
-
- /* append the serial number */
- quirk_l16tv_put(msg, strlen(ser_str) + 1, IPAC_IDTAG_SERNR, (uint8_t *) ser_str);
-
- /* abuse some flags */
- quirk_l16tv_put(msg, strlen(model_name) + 1, IPAC_IDTAG_UNIT, (uint8_t *) model_name);
-
- /* ip.access nanoBTS would reply to port==3006 */
- ipaccess_prepend_header_quirk(msg, IPAC_PROTO_IPACCESS);
- rc = sendto(fd->fd, msg->data, msg->len, 0, (struct sockaddr *)src, sizeof(*src));
- if (rc != msg->len)
- LOGP(DFIND, LOGL_ERROR,
- "Failed to send with rc(%d) errno(%d)\n", rc, errno);
-}
-
-static int ipaccess_bcast(struct osmo_fd *fd, unsigned int what)
-{
- uint8_t data[2048];
- char src[INET_ADDRSTRLEN];
- struct sockaddr_in addr = {};
- socklen_t len = sizeof(addr);
- int rc;
-
- rc = recvfrom(fd->fd, data, sizeof(data), 0,
- (struct sockaddr *) &addr, &len);
- if (rc <= 0) {
- LOGP(DFIND, LOGL_ERROR,
- "Failed to read from socket errno(%d)\n", errno);
- return -1;
- }
-
- LOGP(DFIND, LOGL_DEBUG,
- "Received request from: %s size %d\n",
- inet_ntop(AF_INET, &addr.sin_addr, src, sizeof(src)), rc);
-
- if (rc < 6)
- return 0;
-
- if (data[2] != IPAC_PROTO_IPACCESS || data[4] != IPAC_MSGT_ID_GET)
- return 0;
-
- respond_to(&addr, fd, data + 6, rc - 6);
- return 0;
-}
-
-int lc15bts_mgr_nl_init(void)
-{
- int rc;
-
- nl_fd.cb = ipaccess_bcast;
- rc = osmo_sock_init_ofd(&nl_fd, AF_INET, SOCK_DGRAM, IPPROTO_UDP,
- "0.0.0.0", 3006, OSMO_SOCK_F_BIND);
- if (rc < 0) {
- perror("Socket creation");
- return -1;
- }
-
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c
deleted file mode 100644
index 9665e1db..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/* Temperature control for NuRAN Litecell 1.5 BTS management daemon */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_mgr_temp.c
- * (C) 2014 by Holger Hans Peter Freyther
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-#include <inttypes.h>
-#include "misc/lc15bts_mgr.h"
-#include "misc/lc15bts_misc.h"
-#include "misc/lc15bts_temp.h"
-#include "misc/lc15bts_power.h"
-#include "misc/lc15bts_led.h"
-#include "misc/lc15bts_swd.h"
-#include "limits.h"
-
-#include <osmo-bts/logging.h>
-
-#include <osmocom/core/timer.h>
-#include <osmocom/core/utils.h>
-#include <osmocom/core/linuxlist.h>
-
-struct lc15bts_mgr_instance *s_mgr;
-static struct osmo_timer_list sensor_ctrl_timer;
-
-static const struct value_string state_names[] = {
- { STATE_NORMAL, "NORMAL" },
- { STATE_WARNING_HYST, "WARNING (HYST)" },
- { STATE_WARNING, "WARNING" },
- { STATE_CRITICAL, "CRITICAL" },
- { 0, NULL }
-};
-
-const char *lc15bts_mgr_sensor_get_state(enum lc15bts_sensor_state state)
-{
- return get_value_string(state_names, state);
-}
-
-static int next_state(enum lc15bts_sensor_state current_state, int critical, int warning)
-{
- int next_state = -1;
- switch (current_state) {
- case STATE_NORMAL:
- if (critical)
- next_state = STATE_CRITICAL;
- else if (warning)
- next_state = STATE_WARNING;
- break;
- case STATE_WARNING_HYST:
- if (critical)
- next_state = STATE_CRITICAL;
- else if (warning)
- next_state = STATE_WARNING;
- else
- next_state = STATE_NORMAL;
- break;
- case STATE_WARNING:
- if (critical)
- next_state = STATE_CRITICAL;
- else if (!warning)
- next_state = STATE_WARNING_HYST;
- break;
- case STATE_CRITICAL:
- if (!critical && !warning)
- next_state = STATE_WARNING;
- break;
- };
-
- return next_state;
-}
-
-static void handle_normal_actions(int actions)
-{
- /* switch on the PA */
- if (actions & SENSOR_ACT_NORM_PA0_ON) {
- if (lc15bts_power_set(LC15BTS_POWER_PA0, 1) != 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to switch on the PA #0\n");
- } else {
- LOGP(DTEMP, LOGL_NOTICE,
- "Switched on the PA #0 as normal action.\n");
- }
- }
-
- if (actions & SENSOR_ACT_NORM_PA1_ON) {
- if (lc15bts_power_set(LC15BTS_POWER_PA1, 1) != 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to switch on the PA #1\n");
- } else {
- LOGP(DTEMP, LOGL_NOTICE,
- "Switched on the PA #1 as normal action.\n");
- }
- }
-
- if (actions & SENSOR_ACT_NORM_BTS_SRV_ON) {
- LOGP(DTEMP, LOGL_NOTICE,
- "Going to switch on the BTS service\n");
- /*
- * TODO: use/create something like nspawn that serializes
- * and used SIGCHLD/waitpid to pick up the dead processes
- * without invoking shell.
- */
- system("/bin/systemctl start osmo-bts.service");
- }
-}
-
-static void handle_actions(int actions)
-{
- /* switch off the PA */
- if (actions & SENSOR_ACT_PA1_OFF) {
- if (lc15bts_power_set(LC15BTS_POWER_PA1, 0) != 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to switch off the PA #1. Stop BTS?\n");
- } else {
- LOGP(DTEMP, LOGL_NOTICE,
- "Switched off the PA #1 due temperature.\n");
- }
- }
-
- if (actions & SENSOR_ACT_PA0_OFF) {
- if (lc15bts_power_set(LC15BTS_POWER_PA0, 0) != 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to switch off the PA #0. Stop BTS?\n");
- } else {
- LOGP(DTEMP, LOGL_NOTICE,
- "Switched off the PA #0 due temperature.\n");
- }
- }
-
- if (actions & SENSOR_ACT_BTS_SRV_OFF) {
- LOGP(DTEMP, LOGL_NOTICE,
- "Going to switch off the BTS service\n");
- /*
- * TODO: use/create something like nspawn that serializes
- * and used SIGCHLD/waitpid to pick up the dead processes
- * without invoking shell.
- */
- system("/bin/systemctl stop osmo-bts.service");
- }
-}
-
-/**
- * Go back to normal! Depending on the configuration execute the normal
- * actions that could (start to) undo everything we did in the other
- * states. What is still missing is the power increase/decrease depending
- * on the state. E.g. starting from WARNING_HYST we might want to slowly
- * ramp up the output power again.
- */
-static void execute_normal_act(struct lc15bts_mgr_instance *manager)
-{
- LOGP(DTEMP, LOGL_NOTICE, "System is back to normal state.\n");
- handle_normal_actions(manager->state.action_norm);
-}
-
-static void execute_warning_act(struct lc15bts_mgr_instance *manager)
-{
- LOGP(DTEMP, LOGL_NOTICE, "System has reached warning state.\n");
- handle_actions(manager->state.action_warn);
-}
-
-static void execute_critical_act(struct lc15bts_mgr_instance *manager)
-{
- LOGP(DTEMP, LOGL_NOTICE, "System has reached critical warning.\n");
- handle_actions(manager->state.action_crit);
-}
-
-static void lc15bts_mgr_sensor_handle(struct lc15bts_mgr_instance *manager,
- int critical, int warning)
-{
- int new_state = next_state(manager->state.state, critical, warning);
-
- /* Nothing changed */
- if (new_state < 0)
- return;
-
- LOGP(DTEMP, LOGL_NOTICE, "Moving from state %s to %s.\n",
- get_value_string(state_names, manager->state.state),
- get_value_string(state_names, new_state));
- manager->state.state = new_state;
- switch (manager->state.state) {
- case STATE_NORMAL:
- execute_normal_act(manager);
- break;
- case STATE_WARNING_HYST:
- /* do nothing? Maybe start to increase transmit power? */
- break;
- case STATE_WARNING:
- execute_warning_act(manager);
- break;
- case STATE_CRITICAL:
- execute_critical_act(manager);
- break;
- };
-}
-
-static void sensor_ctrl_check(struct lc15bts_mgr_instance *mgr)
-{
- int rc;
- int temp = 0;
- int warn_thresh_passed = 0;
- int crit_thresh_passed = 0;
-
- LOGP(DTEMP, LOGL_DEBUG, "Going to check the temperature.\n");
-
- /* Read the current supply temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_SUPPLY, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the supply temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.supply_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.supply_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "Supply temperature is: %d\n", temp);
- }
-
- /* Read the current SoC temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_SOC, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the SoC temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.soc_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.soc_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "SoC temperature is: %d\n", temp);
- }
-
- /* Read the current fpga temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_FPGA, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the fpga temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.fpga_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.fpga_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "FPGA temperature is: %d\n", temp);
- }
-
- /* Read the current RMS detector temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_RMSDET, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the RMS detector temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.rmsdet_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.rmsdet_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "RMS detector temperature is: %d\n", temp);
- }
-
- /* Read the current OCXO temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_OCXO, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the OCXO temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.ocxo_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.ocxo_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "OCXO temperature is: %d\n", temp);
- }
-
- /* Read the current TX #0 temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_TX0, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the TX #0 temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.tx0_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.tx0_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "TX #0 temperature is: %d\n", temp);
- }
-
- /* Read the current TX #1 temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_TX1, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the TX #1 temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.tx1_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.tx1_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "TX #1 temperature is: %d\n", temp);
- }
-
- /* Read the current PA #0 temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_PA0, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the PA #0 temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.pa0_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.pa0_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "PA #0 temperature is: %d\n", temp);
- }
-
- /* Read the current PA #1 temperature */
- rc = lc15bts_temp_get(LC15BTS_TEMP_PA1, &temp);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR,
- "Failed to read the PA #1 temperature. rc=%d\n", rc);
- warn_thresh_passed = crit_thresh_passed = 1;
- } else {
- temp = temp / 1000;
- if (temp > mgr->temp.pa1_temp_limit.thresh_warn_max)
- warn_thresh_passed = 1;
- if (temp > mgr->temp.pa1_temp_limit.thresh_crit_max)
- crit_thresh_passed = 1;
- LOGP(DTEMP, LOGL_DEBUG, "PA #1 temperature is: %d\n", temp);
- }
-
- lc15bts_mgr_sensor_handle(mgr, crit_thresh_passed, warn_thresh_passed);
-}
-
-static void sensor_ctrl_check_cb(void *_data)
-{
- struct lc15bts_mgr_instance *mgr = _data;
- sensor_ctrl_check(mgr);
- /* Check every minute? XXX make it configurable! */
- osmo_timer_schedule(&sensor_ctrl_timer, LC15BTS_SENSOR_TIMER_DURATION, 0);
- LOGP(DTEMP, LOGL_DEBUG,"Check sensors timer expired\n");
- /* TODO: do we want to notify if some sensors could not be read? */
- lc15bts_swd_event(mgr, SWD_CHECK_TEMP_SENSOR);
-}
-
-int lc15bts_mgr_sensor_init(struct lc15bts_mgr_instance *mgr)
-{
- s_mgr = mgr;
- sensor_ctrl_timer.cb = sensor_ctrl_check_cb;
- sensor_ctrl_timer.data = s_mgr;
- sensor_ctrl_check_cb(s_mgr);
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c
deleted file mode 100644
index 424ff18f..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c
+++ /dev/null
@@ -1,1074 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_mgr_vty.c
- * (C) 2014 by sysmocom - s.f.m.c. GmbH
- *
- * All Rights Reserved
- *
- * Author: Alvaro Neira Ayuso <anayuso@sysmocom.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdint.h>
-#include <ctype.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <inttypes.h>
-
-#include <osmocom/vty/vty.h>
-#include <osmocom/vty/command.h>
-#include <osmocom/vty/misc.h>
-
-#include <osmo-bts/logging.h>
-
-#include "lc15bts_misc.h"
-#include "lc15bts_mgr.h"
-#include "lc15bts_temp.h"
-#include "lc15bts_power.h"
-#include "lc15bts_led.h"
-#include "btsconfig.h"
-
-static struct lc15bts_mgr_instance *s_mgr;
-
-static const char copyright[] =
- "(C) 2012 by Harald Welte <laforge@gnumonks.org>\r\n"
- "(C) 2014 by Holger Hans Peter Freyther\r\n"
- "(C) 2015 by Yves Godin <support@nuranwireless.com>\r\n"
- "License AGPLv3+: GNU AGPL version 2 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"
- "This is free software: you are free to change and redistribute it.\r\n"
- "There is NO WARRANTY, to the extent permitted by law.\r\n";
-
-static int go_to_parent(struct vty *vty)
-{
- switch (vty->node) {
- case MGR_NODE:
- vty->node = CONFIG_NODE;
- break;
- case ACT_NORM_NODE:
- case ACT_WARN_NODE:
- case ACT_CRIT_NODE:
- case LIMIT_SUPPLY_TEMP_NODE:
- case LIMIT_SOC_NODE:
- case LIMIT_FPGA_NODE:
- case LIMIT_RMSDET_NODE:
- case LIMIT_OCXO_NODE:
- case LIMIT_TX0_TEMP_NODE:
- case LIMIT_TX1_TEMP_NODE:
- case LIMIT_PA0_TEMP_NODE:
- case LIMIT_PA1_TEMP_NODE:
- case LIMIT_SUPPLY_VOLT_NODE:
- case LIMIT_TX0_VSWR_NODE:
- case LIMIT_TX1_VSWR_NODE:
- case LIMIT_SUPPLY_PWR_NODE:
- case LIMIT_PA0_PWR_NODE:
- case LIMIT_PA1_PWR_NODE:
- vty->node = MGR_NODE;
- break;
- default:
- vty->node = CONFIG_NODE;
- }
- return vty->node;
-}
-
-static int is_config_node(struct vty *vty, int node)
-{
- switch (node) {
- case MGR_NODE:
- case ACT_NORM_NODE:
- case ACT_WARN_NODE:
- case ACT_CRIT_NODE:
- case LIMIT_SUPPLY_TEMP_NODE:
- case LIMIT_SOC_NODE:
- case LIMIT_FPGA_NODE:
- case LIMIT_RMSDET_NODE:
- case LIMIT_OCXO_NODE:
- case LIMIT_TX0_TEMP_NODE:
- case LIMIT_TX1_TEMP_NODE:
- case LIMIT_PA0_TEMP_NODE:
- case LIMIT_PA1_TEMP_NODE:
- case LIMIT_SUPPLY_VOLT_NODE:
- case LIMIT_TX0_VSWR_NODE:
- case LIMIT_TX1_VSWR_NODE:
- case LIMIT_SUPPLY_PWR_NODE:
- case LIMIT_PA0_PWR_NODE:
- case LIMIT_PA1_PWR_NODE:
- return 1;
- default:
- return 0;
- }
-}
-
-static struct vty_app_info vty_info = {
- .name = "lc15bts-mgr",
- .version = PACKAGE_VERSION,
- .go_parent_cb = go_to_parent,
- .is_config_node = is_config_node,
- .copyright = copyright,
-};
-
-
-#define MGR_STR "Configure lc15bts-mgr\n"
-
-static struct cmd_node mgr_node = {
- MGR_NODE,
- "%s(lc15bts-mgr)# ",
- 1,
-};
-
-static struct cmd_node act_norm_node = {
- ACT_NORM_NODE,
- "%s(actions-normal)# ",
- 1,
-};
-
-static struct cmd_node act_warn_node = {
- ACT_WARN_NODE,
- "%s(actions-warn)# ",
- 1,
-};
-
-static struct cmd_node act_crit_node = {
- ACT_CRIT_NODE,
- "%s(actions-critical)# ",
- 1,
-};
-
-static struct cmd_node limit_supply_temp_node = {
- LIMIT_SUPPLY_TEMP_NODE,
- "%s(limit-supply-temp)# ",
- 1,
-};
-
-static struct cmd_node limit_soc_node = {
- LIMIT_SOC_NODE,
- "%s(limit-soc)# ",
- 1,
-};
-
-static struct cmd_node limit_fpga_node = {
- LIMIT_FPGA_NODE,
- "%s(limit-fpga)# ",
- 1,
-};
-
-static struct cmd_node limit_rmsdet_node = {
- LIMIT_RMSDET_NODE,
- "%s(limit-rmsdet)# ",
- 1,
-};
-
-static struct cmd_node limit_ocxo_node = {
- LIMIT_OCXO_NODE,
- "%s(limit-ocxo)# ",
- 1,
-};
-
-static struct cmd_node limit_tx0_temp_node = {
- LIMIT_TX0_TEMP_NODE,
- "%s(limit-tx0-temp)# ",
- 1,
-};
-static struct cmd_node limit_tx1_temp_node = {
- LIMIT_TX1_TEMP_NODE,
- "%s(limit-tx1-temp)# ",
- 1,
-};
-static struct cmd_node limit_pa0_temp_node = {
- LIMIT_PA0_TEMP_NODE,
- "%s(limit-pa0-temp)# ",
- 1,
-};
-static struct cmd_node limit_pa1_temp_node = {
- LIMIT_PA1_TEMP_NODE,
- "%s(limit-pa1-temp)# ",
- 1,
-};
-static struct cmd_node limit_supply_volt_node = {
- LIMIT_SUPPLY_VOLT_NODE,
- "%s(limit-supply-volt)# ",
- 1,
-};
-static struct cmd_node limit_tx0_vswr_node = {
- LIMIT_TX0_VSWR_NODE,
- "%s(limit-tx0-vswr)# ",
- 1,
-};
-static struct cmd_node limit_tx1_vswr_node = {
- LIMIT_TX1_VSWR_NODE,
- "%s(limit-tx1-vswr)# ",
- 1,
-};
-static struct cmd_node limit_supply_pwr_node = {
- LIMIT_SUPPLY_PWR_NODE,
- "%s(limit-supply-pwr)# ",
- 1,
-};
-static struct cmd_node limit_pa0_pwr_node = {
- LIMIT_PA0_PWR_NODE,
- "%s(limit-pa0-pwr)# ",
- 1,
-};
-static struct cmd_node limit_pa1_pwr_node = {
- LIMIT_PA1_PWR_NODE,
- "%s(limit-pa1-pwr)# ",
- 1,
-};
-
-static struct cmd_node limit_gps_fix_node = {
- LIMIT_GPS_FIX_NODE,
- "%s(limit-gps-fix)# ",
- 1,
-};
-
-DEFUN(cfg_mgr, cfg_mgr_cmd,
- "lc15bts-mgr",
- MGR_STR)
-{
- vty->node = MGR_NODE;
- return CMD_SUCCESS;
-}
-
-static void write_volt_limit(struct vty *vty, const char *name,
- struct lc15bts_volt_limit *limit)
-{
- vty_out(vty, " %s%s", name, VTY_NEWLINE);
- vty_out(vty, " threshold warning min %d%s",
- limit->thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " threshold critical min %d%s",
- limit->thresh_crit_min, VTY_NEWLINE);
-}
-
-static void write_vswr_limit(struct vty *vty, const char *name,
- struct lc15bts_vswr_limit *limit)
-{
- vty_out(vty, " %s%s", name, VTY_NEWLINE);
- vty_out(vty, " threshold warning max %d%s",
- limit->thresh_warn_max, VTY_NEWLINE);
-}
-
-static void write_pwr_limit(struct vty *vty, const char *name,
- struct lc15bts_pwr_limit *limit)
-{
- vty_out(vty, " %s%s", name, VTY_NEWLINE);
- vty_out(vty, " threshold warning max %d%s",
- limit->thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " threshold critical max %d%s",
- limit->thresh_crit_max, VTY_NEWLINE);
-}
-
-static void write_norm_action(struct vty *vty, const char *name, int actions)
-{
- vty_out(vty, " %s%s", name, VTY_NEWLINE);
- vty_out(vty, " %spa0-on%s",
- (actions & SENSOR_ACT_NORM_PA0_ON) ? "" : "no ", VTY_NEWLINE);
- vty_out(vty, " %spa1-on%s",
- (actions & SENSOR_ACT_NORM_PA1_ON) ? "" : "no ", VTY_NEWLINE);
- vty_out(vty, " %sbts-service-on%s",
- (actions & SENSOR_ACT_NORM_BTS_SRV_ON) ? "" : "no ", VTY_NEWLINE);
-}
-
-static void write_action(struct vty *vty, const char *name, int actions)
-{
- vty_out(vty, " %s%s", name, VTY_NEWLINE);
- vty_out(vty, " %spa0-off%s",
- (actions & SENSOR_ACT_PA0_OFF) ? "" : "no ", VTY_NEWLINE);
- vty_out(vty, " %spa1-off%s",
- (actions & SENSOR_ACT_PA1_OFF) ? "" : "no ", VTY_NEWLINE);
- vty_out(vty, " %sbts-service-off%s",
- (actions & SENSOR_ACT_BTS_SRV_OFF) ? "" : "no ", VTY_NEWLINE);
-}
-
-static int config_write_mgr(struct vty *vty)
-{
- vty_out(vty, "lc15bts-mgr%s", VTY_NEWLINE);
-
- write_volt_limit(vty, "limits supply_volt", &s_mgr->volt.supply_volt_limit);
- write_pwr_limit(vty, "limits supply_pwr", &s_mgr->pwr.supply_pwr_limit);
- write_vswr_limit(vty, "limits tx0_vswr", &s_mgr->vswr.tx0_vswr_limit);
- write_vswr_limit(vty, "limits tx1_vswr", &s_mgr->vswr.tx1_vswr_limit);
-
- write_norm_action(vty, "actions normal", s_mgr->state.action_norm);
- write_action(vty, "actions warn", s_mgr->state.action_warn);
- write_action(vty, "actions critical", s_mgr->state.action_crit);
-
- return CMD_SUCCESS;
-}
-
-static int config_write_dummy(struct vty *vty)
-{
- return CMD_SUCCESS;
-}
-
-#define CFG_LIMIT_TEMP(name, expl, switch_to, variable) \
-DEFUN(cfg_limit_##name, cfg_limit_##name##_cmd, \
- "limits " #name, \
- "Configure Limits\n" expl) \
-{ \
- vty->node = switch_to; \
- vty->index = &s_mgr->temp.variable; \
- return CMD_SUCCESS; \
-}
-
-CFG_LIMIT_TEMP(supply_temp, "SUPPLY TEMP\n", LIMIT_SUPPLY_TEMP_NODE, supply_temp_limit)
-CFG_LIMIT_TEMP(soc_temp, "SOC TEMP\n", LIMIT_SOC_NODE, soc_temp_limit)
-CFG_LIMIT_TEMP(fpga_temp, "FPGA TEMP\n", LIMIT_FPGA_NODE, fpga_temp_limit)
-CFG_LIMIT_TEMP(rmsdet_temp, "RMSDET TEMP\n", LIMIT_RMSDET_NODE, rmsdet_temp_limit)
-CFG_LIMIT_TEMP(ocxo_temp, "OCXO TEMP\n", LIMIT_OCXO_NODE, ocxo_temp_limit)
-CFG_LIMIT_TEMP(tx0_temp, "TX0 TEMP\n", LIMIT_TX0_TEMP_NODE, tx0_temp_limit)
-CFG_LIMIT_TEMP(tx1_temp, "TX1 TEMP\n", LIMIT_TX1_TEMP_NODE, tx1_temp_limit)
-CFG_LIMIT_TEMP(pa0_temp, "PA0 TEMP\n", LIMIT_PA0_TEMP_NODE, pa0_temp_limit)
-CFG_LIMIT_TEMP(pa1_temp, "PA1 TEMP\n", LIMIT_PA1_TEMP_NODE, pa1_temp_limit)
-#undef CFG_LIMIT_TEMP
-
-#define CFG_LIMIT_VOLT(name, expl, switch_to, variable) \
-DEFUN(cfg_limit_##name, cfg_limit_##name##_cmd, \
- "limits " #name, \
- "Configure Limits\n" expl) \
-{ \
- vty->node = switch_to; \
- vty->index = &s_mgr->volt.variable; \
- return CMD_SUCCESS; \
-}
-
-CFG_LIMIT_VOLT(supply_volt, "SUPPLY VOLT\n", LIMIT_SUPPLY_VOLT_NODE, supply_volt_limit)
-#undef CFG_LIMIT_VOLT
-
-#define CFG_LIMIT_VSWR(name, expl, switch_to, variable) \
-DEFUN(cfg_limit_##name, cfg_limit_##name##_cmd, \
- "limits " #name, \
- "Configure Limits\n" expl) \
-{ \
- vty->node = switch_to; \
- vty->index = &s_mgr->vswr.variable; \
- return CMD_SUCCESS; \
-}
-
-CFG_LIMIT_VSWR(tx0_vswr, "TX0 VSWR\n", LIMIT_TX0_VSWR_NODE, tx0_vswr_limit)
-CFG_LIMIT_VSWR(tx1_vswr, "TX1 VSWR\n", LIMIT_TX1_VSWR_NODE, tx1_vswr_limit)
-#undef CFG_LIMIT_VSWR
-
-#define CFG_LIMIT_PWR(name, expl, switch_to, variable) \
-DEFUN(cfg_limit_##name, cfg_limit_##name##_cmd, \
- "limits " #name, \
- "Configure Limits\n" expl) \
-{ \
- vty->node = switch_to; \
- vty->index = &s_mgr->pwr.variable; \
- return CMD_SUCCESS; \
-}
-
-CFG_LIMIT_PWR(supply_pwr, "SUPPLY PWR\n", LIMIT_SUPPLY_PWR_NODE, supply_pwr_limit)
-CFG_LIMIT_PWR(pa0_pwr, "PA0 PWR\n", LIMIT_PA0_PWR_NODE, pa0_pwr_limit)
-CFG_LIMIT_PWR(pa1_pwr, "PA1 PWR\n", LIMIT_PA1_PWR_NODE, pa1_pwr_limit)
-#undef CFG_LIMIT_PWR
-
-#define CFG_LIMIT_GPS_FIX(name, expl, switch_to, variable) \
-DEFUN(cfg_limit_##name, cfg_limit_##name##_cmd, \
- "limits " #name, \
- "Configure Limits\n" expl) \
-{ \
- vty->node = switch_to; \
- vty->index = &s_mgr->gps.variable; \
- return CMD_SUCCESS; \
-}
-
-CFG_LIMIT_GPS_FIX(gps_fix, "GPS FIX\n", LIMIT_GPS_FIX_NODE, gps_fix_limit)
-#undef CFG_LIMIT_GPS_FIX
-
-DEFUN(cfg_limit_volt_warn_min, cfg_thresh_volt_warn_min_cmd,
- "threshold warning min <0-48000>",
- "Threshold to reach\n" "Warning level\n" "Range\n")
-{
- struct lc15bts_volt_limit *limit = vty->index;
- limit->thresh_warn_min = atoi(argv[0]);
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_limit_volt_crit_min, cfg_thresh_volt_crit_min_cmd,
- "threshold critical min <0-48000>",
- "Threshold to reach\n" "Critical level\n" "Range\n")
-{
- struct lc15bts_volt_limit *limit = vty->index;
- limit->thresh_crit_min = atoi(argv[0]);
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_limit_vswr_warn_max, cfg_thresh_vswr_warn_max_cmd,
- "threshold warning max <1000-200000>",
- "Threshold to reach\n" "Warning level\n" "Range\n")
-{
- struct lc15bts_vswr_limit *limit = vty->index;
- limit->thresh_warn_max = atoi(argv[0]);
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_limit_vswr_crit_max, cfg_thresh_vswr_crit_max_cmd,
- "threshold critical max <1000-200000>",
- "Threshold to reach\n" "Critical level\n" "Range\n")
-{
- struct lc15bts_vswr_limit *limit = vty->index;
- limit->thresh_crit_max = atoi(argv[0]);
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_limit_pwr_warn_max, cfg_thresh_pwr_warn_max_cmd,
- "threshold warning max <0-200>",
- "Threshold to reach\n" "Warning level\n" "Range\n")
-{
- struct lc15bts_pwr_limit *limit = vty->index;
- limit->thresh_warn_max = atoi(argv[0]);
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_limit_pwr_crit_max, cfg_thresh_pwr_crit_max_cmd,
- "threshold critical max <0-200>",
- "Threshold to reach\n" "Critical level\n" "Range\n")
-{
- struct lc15bts_pwr_limit *limit = vty->index;
- limit->thresh_crit_max = atoi(argv[0]);
- return CMD_SUCCESS;
-}
-
-#define CFG_ACTION(name, expl, switch_to, variable) \
-DEFUN(cfg_action_##name, cfg_action_##name##_cmd, \
- "actions " #name, \
- "Configure Actions\n" expl) \
-{ \
- vty->node = switch_to; \
- vty->index = &s_mgr->state.variable; \
- return CMD_SUCCESS; \
-}
-CFG_ACTION(normal, "Normal Actions\n", ACT_NORM_NODE, action_norm)
-CFG_ACTION(warn, "Warning Actions\n", ACT_WARN_NODE, action_warn)
-CFG_ACTION(critical, "Critical Actions\n", ACT_CRIT_NODE, action_crit)
-#undef CFG_ACTION
-
-DEFUN(cfg_action_pa0_on, cfg_action_pa0_on_cmd,
- "pa0-on",
- "Switch the Power Amplifier #0 on\n")
-{
- int *action = vty->index;
- *action |= SENSOR_ACT_NORM_PA0_ON;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_pa0_on, cfg_no_action_pa0_on_cmd,
- "no pa0-on",
- NO_STR "Switch the Power Amplifieri #0 on\n")
-{
- int *action = vty->index;
- *action &= ~SENSOR_ACT_NORM_PA0_ON;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_pa1_on, cfg_action_pa1_on_cmd,
- "pa1-on",
- "Switch the Power Amplifier #1 on\n")
-{
- int *action = vty->index;
- *action |= SENSOR_ACT_NORM_PA1_ON;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_pa1_on, cfg_no_action_pa1_on_cmd,
- "no pa1-on",
- NO_STR "Switch the Power Amplifieri #1 on\n")
-{
- int *action = vty->index;
- *action &= ~SENSOR_ACT_NORM_PA1_ON;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_bts_srv_on, cfg_action_bts_srv_on_cmd,
- "bts-service-on",
- "Start the systemd lc15bts.service\n")
-{
- int *action = vty->index;
- *action |= SENSOR_ACT_NORM_BTS_SRV_ON;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_bts_srv_on, cfg_no_action_bts_srv_on_cmd,
- "no bts-service-on",
- NO_STR "Start the systemd lc15bts.service\n")
-{
- int *action = vty->index;
- *action &= ~SENSOR_ACT_NORM_BTS_SRV_ON;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_pa0_off, cfg_action_pa0_off_cmd,
- "pa0-off",
- "Switch the Power Amplifier #0 off\n")
-{
- int *action = vty->index;
- *action |= SENSOR_ACT_PA0_OFF;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_pa0_off, cfg_no_action_pa0_off_cmd,
- "no pa0-off",
- NO_STR "Do not switch off the Power Amplifier #0\n")
-{
- int *action = vty->index;
- *action &= ~SENSOR_ACT_PA0_OFF;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_pa1_off, cfg_action_pa1_off_cmd,
- "pa1-off",
- "Switch the Power Amplifier #1 off\n")
-{
- int *action = vty->index;
- *action |= SENSOR_ACT_PA1_OFF;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_pa1_off, cfg_no_action_pa1_off_cmd,
- "no pa1-off",
- NO_STR "Do not switch off the Power Amplifier #1\n")
-{
- int *action = vty->index;
- *action &= ~SENSOR_ACT_PA1_OFF;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_bts_srv_off, cfg_action_bts_srv_off_cmd,
- "bts-service-off",
- "Stop the systemd lc15bts.service\n")
-{
- int *action = vty->index;
- *action |= SENSOR_ACT_BTS_SRV_OFF;
- return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_bts_srv_off, cfg_no_action_bts_srv_off_cmd,
- "no bts-service-off",
- NO_STR "Stop the systemd lc15bts.service\n")
-{
- int *action = vty->index;
- *action &= ~SENSOR_ACT_BTS_SRV_OFF;
- return CMD_SUCCESS;
-}
-
-DEFUN(show_mgr, show_mgr_cmd, "show manager",
- SHOW_STR "Display information about the manager")
-{
- int temp, volt, current, power, vswr;
- vty_out(vty, "Warning alarm flags: 0x%08x%s",
- s_mgr->lc15bts_ctrl.warn_flags, VTY_NEWLINE);
- vty_out(vty, "Critical alarm flags: 0x%08x%s",
- s_mgr->lc15bts_ctrl.crit_flags, VTY_NEWLINE);
- vty_out(vty, "Preventive action retried: %d%s",
- s_mgr->alarms.preventive_retry, VTY_NEWLINE);
- vty_out(vty, "Temperature control state: %s%s",
- lc15bts_mgr_sensor_get_state(s_mgr->state.state), VTY_NEWLINE);
- vty_out(vty, "Current Temperatures%s", VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_SUPPLY, &temp);
- vty_out(vty, " Main Supply : %4.2f Celsius%s",
- temp/ 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_SOC, &temp);
- vty_out(vty, " SoC : %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_FPGA, &temp);
- vty_out(vty, " FPGA : %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_RMSDET, &temp);
- vty_out(vty, " RMSDet : %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_OCXO, &temp);
- vty_out(vty, " OCXO : %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_TX0, &temp);
- vty_out(vty, " TX 0 : %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_TX1, &temp);
- vty_out(vty, " TX 1 : %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_PA0, &temp);
- vty_out(vty, " Power Amp #0: %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
- lc15bts_temp_get(LC15BTS_TEMP_PA1, &temp);
- vty_out(vty, " Power Amp #1: %4.2f Celsius%s",
- temp / 1000.0f,
- VTY_NEWLINE);
-
- vty_out(vty, "Power Status%s", VTY_NEWLINE);
- lc15bts_power_sensor_get(LC15BTS_POWER_SUPPLY,
- LC15BTS_POWER_VOLTAGE, &volt);
- lc15bts_power_sensor_get(LC15BTS_POWER_SUPPLY,
- LC15BTS_POWER_CURRENT, &current);
- lc15bts_power_sensor_get(LC15BTS_POWER_SUPPLY,
- LC15BTS_POWER_POWER, &power);
- vty_out(vty, " Main Supply : ON [%6.2f Vdc, %4.2f A, %6.2f W]%s",
- volt /1000.0f,
- current /1000.0f,
- power /1000000.0f,
- VTY_NEWLINE);
- lc15bts_power_sensor_get(LC15BTS_POWER_PA0,
- LC15BTS_POWER_VOLTAGE, &volt);
- lc15bts_power_sensor_get(LC15BTS_POWER_PA0,
- LC15BTS_POWER_CURRENT, &current);
- lc15bts_power_sensor_get(LC15BTS_POWER_PA0,
- LC15BTS_POWER_POWER, &power);
- vty_out(vty, " Power Amp #0: %s [%6.2f Vdc, %4.2f A, %6.2f W]%s",
- lc15bts_power_get(LC15BTS_POWER_PA0) ? "ON " : "OFF",
- volt /1000.0f,
- current /1000.0f,
- power /1000000.0f,
- VTY_NEWLINE);
- lc15bts_power_sensor_get(LC15BTS_POWER_PA1,
- LC15BTS_POWER_VOLTAGE, &volt);
- lc15bts_power_sensor_get(LC15BTS_POWER_PA1,
- LC15BTS_POWER_CURRENT, &current);
- lc15bts_power_sensor_get(LC15BTS_POWER_PA1,
- LC15BTS_POWER_POWER, &power);
- vty_out(vty, " Power Amp #1: %s [%6.2f Vdc, %4.2f A, %6.2f W]%s",
- lc15bts_power_get(LC15BTS_POWER_PA1) ? "ON " : "OFF",
- volt /1000.0f,
- current /1000.0f,
- power /1000000.0f,
- VTY_NEWLINE);
- vty_out(vty, "VSWR Status%s", VTY_NEWLINE);
- lc15bts_vswr_get(LC15BTS_VSWR_TX0, &vswr);
- vty_out(vty, " VSWR TX 0: %f %s",
- vswr / 1000.0f,
- VTY_NEWLINE);
- lc15bts_vswr_get(LC15BTS_VSWR_TX1, &vswr);
- vty_out(vty, " VSWR TX 1: %f %s",
- vswr / 1000.0f,
- VTY_NEWLINE);
-
- return CMD_SUCCESS;
-}
-
-DEFUN(show_thresh, show_thresh_cmd, "show thresholds",
- SHOW_STR "Display information about the thresholds")
-{
- vty_out(vty, "Temperature limits (Celsius)%s", VTY_NEWLINE);
- vty_out(vty, " Main supply%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.supply_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.supply_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.supply_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " SoC%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.soc_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.soc_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.soc_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " FPGA%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.fpga_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.fpga_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.fpga_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " RMSDet%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.rmsdet_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.rmsdet_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.rmsdet_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " OCXO%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.ocxo_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.ocxo_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.ocxo_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " TX0%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.tx0_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.tx0_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.tx0_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " TX1%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.tx1_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.tx1_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.tx1_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " PA0%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.pa0_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.pa0_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.pa0_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " PA1%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->temp.pa1_temp_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->temp.pa1_temp_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->temp.pa1_temp_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, "Power limits%s", VTY_NEWLINE);
- vty_out(vty, " Main supply (mV)%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->volt.supply_volt_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->volt.supply_volt_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " Warning min : %d%s",s_mgr->volt.supply_volt_limit.thresh_warn_min, VTY_NEWLINE);
- vty_out(vty, " Critical min : %d%s",s_mgr->volt.supply_volt_limit.thresh_crit_min, VTY_NEWLINE);
- vty_out(vty, " Main supply power (W)%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->pwr.supply_pwr_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->pwr.supply_pwr_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " PA0 power (W)%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->pwr.pa0_pwr_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->pwr.pa0_pwr_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " PA1 power (W)%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->pwr.pa1_pwr_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->pwr.pa1_pwr_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, "VSWR limits%s", VTY_NEWLINE);
- vty_out(vty, " TX0%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->vswr.tx0_vswr_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->vswr.tx0_vswr_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, " TX1%s", VTY_NEWLINE);
- vty_out(vty, " Critical max : %d%s",s_mgr->vswr.tx1_vswr_limit.thresh_crit_max, VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->vswr.tx1_vswr_limit.thresh_warn_max, VTY_NEWLINE);
- vty_out(vty, "Days since last GPS 3D fix%s", VTY_NEWLINE);
- vty_out(vty, " Warning max : %d%s",s_mgr->gps.gps_fix_limit.thresh_warn_max, VTY_NEWLINE);
-
- return CMD_SUCCESS;
-}
-
-DEFUN(calibrate_clock, calibrate_clock_cmd,
- "calibrate clock",
- "Calibration commands\n"
- "Calibrate clock against GPS PPS\n")
-{
- if (lc15bts_mgr_calib_run(s_mgr) < 0) {
- vty_out(vty, "%%Failed to start calibration.%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
-}
-
-DEFUN(set_led_pattern, set_led_pattern_cmd,
- "set led pattern <0-255>",
- "Set LED pattern\n"
- "Set LED pattern for debugging purpose only. This pattern will be overridden after 60 seconds by LED pattern of actual system state\n")
-{
- int pattern_id = atoi(argv[0]);
-
- if ((pattern_id < 0) || (pattern_id > BLINK_PATTERN_MAX_ITEM)) {
- vty_out(vty, "%%Invalid LED pattern ID. It must be in range of %d..%d %s", 0, BLINK_PATTERN_MAX_ITEM - 1, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- led_set(s_mgr, pattern_id);
- return CMD_SUCCESS;
-}
-
-DEFUN(force_mgr_state, force_mgr_state_cmd,
- "force manager state <0-255>",
- "Force BTS manager state\n"
- "Force BTS manager state for debugging purpose only\n")
-{
- int state = atoi(argv[0]);
-
- if ((state < 0) || (state > STATE_CRITICAL)) {
- vty_out(vty, "%%Invalid BTS manager state. It must be in range of %d..%d %s", 0, STATE_CRITICAL, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- s_mgr->state.state = state;
- return CMD_SUCCESS;
-}
-
-#define LIMIT_TEMP(name, limit, expl, variable, criticity, min_max) \
-DEFUN(limit_temp_##name##_##variable, limit_temp_##name##_##variable##_cmd, \
- "limit temp " #name " " #criticity " " #min_max " <-200-200>", \
- "Limit to reach\n" expl) \
-{ \
- s_mgr->temp.limit.variable = atoi(argv[0]); \
- return CMD_SUCCESS; \
-}
-
-LIMIT_TEMP(supply, supply_temp_limit, "SUPPLY TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(supply, supply_temp_limit, "SUPPLY TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(supply, supply_temp_limit, "SUPPLY TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(soc, supply_temp_limit, "SOC TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(soc, supply_temp_limit, "SOC TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(soc, supply_temp_limit, "SOC TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(fpga, fpga_temp_limit, "FPGA TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(fpga, fpga_temp_limit, "FPGA TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(fpga, fpga_temp_limit, "FPGA TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(rmsdet, rmsdet_temp_limit, "RMSDET TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(rmsdet, rmsdet_temp_limit, "RMSDET TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(rmsdet, rmsdet_temp_limit, "RMSDET TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(ocxo, ocxo_temp_limit, "OCXO TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(ocxo, ocxo_temp_limit, "OCXO TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(ocxo, ocxo_temp_limit, "OCXO TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(tx0, tx0_temp_limit, "TX0 TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(tx0, tx0_temp_limit, "TX0 TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(tx0, tx0_temp_limit, "TX0 TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(tx1, tx1_temp_limit, "TX1 TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(tx1, tx1_temp_limit, "TX1 TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(tx1, tx1_temp_limit, "TX1 TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(pa0, pa0_temp_limit, "PA0 TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(pa0, pa0_temp_limit, "PA0 TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(pa0, pa0_temp_limit, "PA0 TEMP\n", thresh_warn_min, warning, min)
-LIMIT_TEMP(pa1, pa1_temp_limit, "PA1 TEMP\n", thresh_warn_max, warning, max)
-LIMIT_TEMP(pa1, pa1_temp_limit, "PA1 TEMP\n", thresh_crit_max, critical, max)
-LIMIT_TEMP(pa1, pa1_temp_limit, "PA1 TEMP\n", thresh_warn_min, warning, min)
-#undef LIMIT_TEMP
-
-#define LIMIT_VOLT(name, limit, expl, variable, criticity, min_max) \
-DEFUN(limit_volt_##name##_##variable, limit_volt_##name##_##variable##_cmd, \
- "limit " #name " " #criticity " " #min_max " <0-48000>", \
- "Limit to reach\n" expl) \
-{ \
- s_mgr->volt.limit.variable = atoi(argv[0]); \
- return CMD_SUCCESS; \
-}
-
-LIMIT_VOLT(supply, supply_volt_limit, "SUPPLY VOLT\n", thresh_warn_max, warning, max)
-LIMIT_VOLT(supply, supply_volt_limit, "SUPPLY VOLT\n", thresh_crit_max, critical, max)
-LIMIT_VOLT(supply, supply_volt_limit, "SUPPLY VOLT\n", thresh_warn_min, warning, min)
-LIMIT_VOLT(supply, supply_volt_limit, "SUPPLY VOLT\n", thresh_crit_min, critical, min)
-#undef LIMIT_VOLT
-
-#define LIMIT_PWR(name, limit, expl, variable, criticity, min_max) \
- DEFUN(limit_pwr_##name##_##variable, limit_pwr_##name##_##variable##_cmd, \
- "limit power " #name " " #criticity " " #min_max " <0-200>", \
- "Limit to reach\n" expl) \
-{ \
- s_mgr->pwr.limit.variable = atoi(argv[0]); \
- return CMD_SUCCESS; \
-}
-
-LIMIT_PWR(supply, supply_pwr_limit, "SUPPLY PWR\n", thresh_warn_max, warning, max)
-LIMIT_PWR(supply, supply_pwr_limit, "SUPPLY PWR\n", thresh_crit_max, critical, max)
-LIMIT_PWR(pa0, pa0_pwr_limit, "PA0 PWR\n", thresh_warn_max, warning, max)
-LIMIT_PWR(pa0, pa0_pwr_limit, "PA0 PWR\n", thresh_crit_max, critical, max)
-LIMIT_PWR(pa1, pa1_pwr_limit, "PA1 PWR\n", thresh_warn_max, warning, max)
-LIMIT_PWR(pa1, pa1_pwr_limit, "PA1 PWR\n", thresh_crit_max, critical, max)
-#undef LIMIT_PWR
-
-#define LIMIT_VSWR(name, limit, expl, variable, criticity, min_max) \
-DEFUN(limit_vswr_##name##_##variable, limit_vswr_##name##_##variable##_cmd, \
- "limit vswr " #name " " #criticity " " #min_max " <1000-200000>", \
- "Limit to reach\n" expl) \
-{ \
- s_mgr->vswr.limit.variable = atoi(argv[0]); \
- return CMD_SUCCESS; \
-}
-
-LIMIT_VSWR(tx0, tx0_vswr_limit, "TX0 VSWR\n", thresh_warn_max, warning, max)
-LIMIT_VSWR(tx0, tx0_vswr_limit, "TX0 VSWR\n", thresh_crit_max, critical, max)
-LIMIT_VSWR(tx1, tx1_vswr_limit, "TX1 VSWR\n", thresh_warn_max, warning, max)
-LIMIT_VSWR(tx1, tx1_vswr_limit, "TX1 VSWR\n", thresh_crit_max, critical, max)
-#undef LIMIT_VSWR
-
-#define LIMIT_GPSFIX(limit, expl, variable, criticity, min_max) \
-DEFUN(limit_gpsfix_##variable, limit_gpsfix_##variable##_cmd, \
- "limit gpsfix " #criticity " " #min_max " <0-365>", \
- "Limit to reach\n" expl) \
-{ \
- s_mgr->gps.limit.variable = atoi(argv[0]); \
- return CMD_SUCCESS; \
-}
-
-LIMIT_GPSFIX(gps_fix_limit, "GPS FIX\n", thresh_warn_max, warning, max)
-#undef LIMIT_GPSFIX
-
-static void register_limit(int limit, uint32_t unit)
-{
- switch (unit) {
- case MGR_LIMIT_TYPE_VOLT:
- install_element(limit, &cfg_thresh_volt_warn_min_cmd);
- install_element(limit, &cfg_thresh_volt_crit_min_cmd);
- break;
- case MGR_LIMIT_TYPE_VSWR:
- install_element(limit, &cfg_thresh_vswr_warn_max_cmd);
- install_element(limit, &cfg_thresh_vswr_crit_max_cmd);
- break;
- case MGR_LIMIT_TYPE_PWR:
- install_element(limit, &cfg_thresh_pwr_warn_max_cmd);
- install_element(limit, &cfg_thresh_pwr_crit_max_cmd);
- break;
- default:
- break;
- }
-}
-
-static void register_normal_action(int act)
-{
- install_element(act, &cfg_action_pa0_on_cmd);
- install_element(act, &cfg_no_action_pa0_on_cmd);
- install_element(act, &cfg_action_pa1_on_cmd);
- install_element(act, &cfg_no_action_pa1_on_cmd);
- install_element(act, &cfg_action_bts_srv_on_cmd);
- install_element(act, &cfg_no_action_bts_srv_on_cmd);
-}
-
-static void register_action(int act)
-{
- install_element(act, &cfg_action_pa0_off_cmd);
- install_element(act, &cfg_no_action_pa0_off_cmd);
- install_element(act, &cfg_action_pa1_off_cmd);
- install_element(act, &cfg_no_action_pa1_off_cmd);
- install_element(act, &cfg_action_bts_srv_off_cmd);
- install_element(act, &cfg_no_action_bts_srv_off_cmd);
-}
-
-static void register_hidden_commands()
-{
- install_element(ENABLE_NODE, &limit_temp_supply_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_supply_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_supply_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_soc_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_soc_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_soc_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_fpga_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_fpga_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_fpga_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_rmsdet_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_rmsdet_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_rmsdet_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_ocxo_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_ocxo_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_ocxo_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_tx0_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_tx0_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_tx0_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_tx1_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_tx1_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_tx1_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_pa0_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_pa0_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_pa0_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_temp_pa1_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_pa1_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_temp_pa1_thresh_warn_min_cmd);
-
- install_element(ENABLE_NODE, &limit_volt_supply_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_volt_supply_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_volt_supply_thresh_warn_min_cmd);
- install_element(ENABLE_NODE, &limit_volt_supply_thresh_crit_min_cmd);
-
- install_element(ENABLE_NODE, &limit_pwr_supply_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_pwr_supply_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_pwr_pa0_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_pwr_pa0_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_pwr_pa1_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_pwr_pa1_thresh_crit_max_cmd);
-
- install_element(ENABLE_NODE, &limit_vswr_tx0_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_vswr_tx0_thresh_crit_max_cmd);
- install_element(ENABLE_NODE, &limit_vswr_tx1_thresh_warn_max_cmd);
- install_element(ENABLE_NODE, &limit_vswr_tx1_thresh_crit_max_cmd);
-
- install_element(ENABLE_NODE, &limit_gpsfix_thresh_warn_max_cmd);
-}
-
-int lc15bts_mgr_vty_init(void)
-{
- vty_init(&vty_info);
-
- install_element_ve(&show_mgr_cmd);
- install_element_ve(&show_thresh_cmd);
-
- install_element(ENABLE_NODE, &calibrate_clock_cmd);
-
- install_node(&mgr_node, config_write_mgr);
- install_element(CONFIG_NODE, &cfg_mgr_cmd);
-
- /* install the limit nodes */
- install_node(&limit_supply_temp_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_supply_temp_cmd);
-
- install_node(&limit_soc_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_soc_temp_cmd);
-
- install_node(&limit_fpga_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_fpga_temp_cmd);
-
- install_node(&limit_rmsdet_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_rmsdet_temp_cmd);
-
- install_node(&limit_ocxo_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_ocxo_temp_cmd);
-
- install_node(&limit_tx0_temp_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_tx0_temp_cmd);
-
- install_node(&limit_tx1_temp_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_tx1_temp_cmd);
-
- install_node(&limit_pa0_temp_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_pa0_temp_cmd);
-
- install_node(&limit_pa1_temp_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_pa1_temp_cmd);
-
- install_node(&limit_supply_volt_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_supply_volt_cmd);
- register_limit(LIMIT_SUPPLY_VOLT_NODE, MGR_LIMIT_TYPE_VOLT);
-
- install_node(&limit_tx0_vswr_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_tx0_vswr_cmd);
- register_limit(LIMIT_TX0_VSWR_NODE, MGR_LIMIT_TYPE_VSWR);
-
- install_node(&limit_tx1_vswr_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_tx1_vswr_cmd);
- register_limit(LIMIT_TX1_VSWR_NODE, MGR_LIMIT_TYPE_VSWR);
-
- install_node(&limit_supply_pwr_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_supply_pwr_cmd);
- register_limit(LIMIT_SUPPLY_PWR_NODE, MGR_LIMIT_TYPE_PWR);
-
- install_node(&limit_pa0_pwr_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_pa0_pwr_cmd);
- register_limit(LIMIT_PA0_PWR_NODE, MGR_LIMIT_TYPE_PWR);
-
- install_node(&limit_pa1_pwr_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_pa1_pwr_cmd);
- register_limit(LIMIT_PA1_PWR_NODE, MGR_LIMIT_TYPE_PWR);
-
- install_node(&limit_gps_fix_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_limit_gps_fix_cmd);
-
- /* install the normal node */
- install_node(&act_norm_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_action_normal_cmd);
- register_normal_action(ACT_NORM_NODE);
-
- /* install the warning and critical node */
- install_node(&act_warn_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_action_warn_cmd);
- register_action(ACT_WARN_NODE);
-
- install_node(&act_crit_node, config_write_dummy);
- install_element(MGR_NODE, &cfg_action_critical_cmd);
- register_action(ACT_CRIT_NODE);
-
- /* install LED pattern command for debugging purpose */
- install_element_ve(&set_led_pattern_cmd);
- install_element_ve(&force_mgr_state_cmd);
-
- register_hidden_commands();
-
- return 0;
-}
-
-int lc15bts_mgr_parse_config(struct lc15bts_mgr_instance *manager)
-{
- int rc;
-
- s_mgr = manager;
- rc = vty_read_config_file(s_mgr->config_file, NULL);
- if (rc < 0) {
- fprintf(stderr, "Failed to parse the config file: '%s'\n",
- s_mgr->config_file);
- return rc;
- }
-
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_misc.c b/src/osmo-bts-litecell15/misc/lc15bts_misc.c
deleted file mode 100644
index 467b9d0a..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_misc.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_misc.c
- * (C) 2012 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <getopt.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <time.h>
-#include <sys/signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <osmocom/core/talloc.h>
-#include <osmocom/core/utils.h>
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/application.h>
-#include <osmocom/vty/telnet_interface.h>
-#include <osmocom/vty/logging.h>
-
-#include "lc15bts_mgr.h"
-#include "btsconfig.h"
-#include "lc15bts_misc.h"
-#include "lc15bts_par.h"
-#include "lc15bts_mgr.h"
-#include "lc15bts_temp.h"
-#include "lc15bts_power.h"
-
-/*********************************************************************
- * Temperature handling
- *********************************************************************/
-
-static const struct {
- const char *name;
- int has_max;
- enum lc15bts_temp_sensor sensor;
- enum lc15bts_par ee_par;
-} temp_data[] = {
- {
- .name = "supply_temp",
- .has_max = 1,
- .sensor = LC15BTS_TEMP_SUPPLY,
- .ee_par = LC15BTS_PAR_TEMP_SUPPLY_MAX,
- }, {
- .name = "soc_temp",
- .has_max = 0,
- .sensor = LC15BTS_TEMP_SOC,
- .ee_par = LC15BTS_PAR_TEMP_SOC_MAX,
- }, {
- .name = "fpga_temp",
- .has_max = 0,
- .sensor = LC15BTS_TEMP_FPGA,
- .ee_par = LC15BTS_PAR_TEMP_FPGA_MAX,
-
- }, {
- .name = "rmsdet_temp",
- .has_max = 1,
- .sensor = LC15BTS_TEMP_RMSDET,
- .ee_par = LC15BTS_PAR_TEMP_RMSDET_MAX,
- }, {
- .name = "ocxo_temp",
- .has_max = 1,
- .sensor = LC15BTS_TEMP_OCXO,
- .ee_par = LC15BTS_PAR_TEMP_OCXO_MAX,
- }, {
- .name = "tx0_temp",
- .has_max = 0,
- .sensor = LC15BTS_TEMP_TX0,
- .ee_par = LC15BTS_PAR_TEMP_TX0_MAX,
- }, {
- .name = "tx1_temp",
- .has_max = 0,
- .sensor = LC15BTS_TEMP_TX1,
- .ee_par = LC15BTS_PAR_TEMP_TX1_MAX,
- }, {
- .name = "pa0_temp",
- .has_max = 1,
- .sensor = LC15BTS_TEMP_PA0,
- .ee_par = LC15BTS_PAR_TEMP_PA0_MAX,
- }, {
- .name = "pa1_temp",
- .has_max = 1,
- .sensor = LC15BTS_TEMP_PA1,
- .ee_par = LC15BTS_PAR_TEMP_PA1_MAX,
- }
-};
-
-static const struct {
- const char *name;
- int has_max;
- enum lc15bts_power_source sensor_source;
- enum lc15bts_power_type sensor_type;
- enum lc15bts_par ee_par;
-} power_data[] = {
- {
- .name = "supply_volt",
- .has_max = 1,
- .sensor_source = LC15BTS_POWER_SUPPLY,
- .sensor_type = LC15BTS_POWER_VOLTAGE,
- .ee_par = LC15BTS_PAR_VOLT_SUPPLY_MAX,
- }, {
- .name = "supply_pwr",
- .has_max = 1,
- .sensor_source = LC15BTS_POWER_SUPPLY,
- .sensor_type = LC15BTS_POWER_POWER,
- .ee_par = LC15BTS_PAR_PWR_SUPPLY_MAX,
- }, {
- .name = "pa0_pwr",
- .has_max = 1,
- .sensor_source = LC15BTS_POWER_PA0,
- .sensor_type = LC15BTS_POWER_POWER,
- .ee_par = LC15BTS_PAR_PWR_PA0_MAX,
- }, {
- .name = "pa1_pwr",
- .has_max = 1,
- .sensor_source = LC15BTS_POWER_PA1,
- .sensor_type = LC15BTS_POWER_POWER,
- .ee_par = LC15BTS_PAR_PWR_PA1_MAX,
- }
-};
-
-static const struct {
- const char *name;
- int has_max;
- enum lc15bts_vswr_sensor sensor;
- enum lc15bts_par ee_par;
-} vswr_data[] = {
- {
- .name = "tx0_vswr",
- .has_max = 0,
- .sensor = LC15BTS_VSWR_TX0,
- .ee_par = LC15BTS_PAR_VSWR_TX0_MAX,
- }, {
- .name = "tx1_vswr",
- .has_max = 0,
- .sensor = LC15BTS_VSWR_TX1,
- .ee_par = LC15BTS_PAR_VSWR_TX1_MAX,
- }
-};
-
-static const struct value_string power_unit_strs[] = {
- { LC15BTS_POWER_POWER, "W" },
- { LC15BTS_POWER_VOLTAGE, "V" },
- { 0, NULL }
-};
-
-void lc15bts_check_temp(int no_rom_write)
-{
- int temp_old[ARRAY_SIZE(temp_data)];
- int temp_cur[ARRAY_SIZE(temp_data)];
- int i, rc;
-
- for (i = 0; i < ARRAY_SIZE(temp_data); i++) {
- int ret;
- rc = lc15bts_par_get_int(tall_mgr_ctx, temp_data[i].ee_par, &ret);
- temp_old[i] = ret * 1000;
-
- lc15bts_temp_get(temp_data[i].sensor, &temp_cur[i]);
- if (temp_cur[i] < 0 && temp_cur[i] > -1000) {
- LOGP(DTEMP, LOGL_ERROR, "Error reading temperature (%d): unexpected value %d\n",
- temp_data[i].sensor, temp_cur[i]);
- continue;
- }
-
- LOGP(DTEMP, LOGL_DEBUG, "Current %s temperature: %d.%d C\n",
- temp_data[i].name, temp_cur[i]/1000, temp_cur[i]%1000);
-
- if (temp_cur[i] > temp_old[i]) {
- LOGP(DTEMP, LOGL_NOTICE, "New maximum %s "
- "temperature: %d.%d C\n", temp_data[i].name,
- temp_cur[i]/1000, temp_old[i]%1000);
-
- if (!no_rom_write) {
- rc = lc15bts_par_set_int(tall_mgr_ctx, temp_data[i].ee_par, temp_cur[i]/1000);
- if (rc < 0)
- LOGP(DTEMP, LOGL_ERROR, "error writing new %s "
- "max temp %d (%s)\n", temp_data[i].name,
- rc, strerror(errno));
- }
- }
- }
-}
-
-void lc15bts_check_power(int no_rom_write)
-{
- int power_old[ARRAY_SIZE(power_data)];
- int power_cur[ARRAY_SIZE(power_data)];
- int i, rc;
- int div_ratio;
-
- for (i = 0; i < ARRAY_SIZE(power_data); i++) {
- int ret;
- rc = lc15bts_par_get_int(tall_mgr_ctx, power_data[i].ee_par, &ret);
- switch(power_data[i].sensor_type) {
- case LC15BTS_POWER_VOLTAGE:
- div_ratio = 1000;
- break;
- case LC15BTS_POWER_POWER:
- div_ratio = 1000000;
- break;
- default:
- div_ratio = 1000;
- }
- power_old[i] = ret * div_ratio;
-
- lc15bts_power_sensor_get(power_data[i].sensor_source, power_data[i].sensor_type, &power_cur[i]);
- if (power_cur[i] < 0 && power_cur[i] > -1000) {
- LOGP(DTEMP, LOGL_ERROR, "Error reading power (%d) (%d)\n", power_data[i].sensor_source,
- power_data[i].sensor_type);
- continue;
- }
- LOGP(DTEMP, LOGL_DEBUG, "Current %s power: %d.%d %s\n",
- power_data[i].name, power_cur[i]/div_ratio, power_cur[i]%div_ratio,
- get_value_string(power_unit_strs, power_data[i].sensor_type));
-
- if (power_cur[i] > power_old[i]) {
- LOGP(DTEMP, LOGL_NOTICE, "New maximum %s "
- "power: %d.%d %s\n", power_data[i].name,
- power_cur[i]/div_ratio, power_cur[i]%div_ratio,
- get_value_string(power_unit_strs, power_data[i].sensor_type));
-
- if (!no_rom_write) {
- rc = lc15bts_par_set_int(tall_mgr_ctx, power_data[i].ee_par, power_cur[i]/div_ratio);
- if (rc < 0)
- LOGP(DTEMP, LOGL_ERROR, "error writing new %s "
- "max power %d (%s)\n", power_data[i].name,
- rc, strerror(errno));
- }
- }
- }
-}
-
-void lc15bts_check_vswr(int no_rom_write)
-{
- int vswr_old[ARRAY_SIZE(vswr_data)];
- int vswr_cur[ARRAY_SIZE(vswr_data)];
- int i, rc;
-
- for (i = 0; i < ARRAY_SIZE(vswr_data); i++) {
- int ret;
- rc = lc15bts_par_get_int(tall_mgr_ctx, vswr_data[i].ee_par, &ret);
- vswr_old[i] = ret * 1000;
-
- lc15bts_vswr_get(vswr_data[i].sensor, &vswr_cur[i]);
- if (vswr_cur[i] < 0 && vswr_cur[i] > -1000) {
- LOGP(DTEMP, LOGL_ERROR, "Error reading vswr (%d)\n", vswr_data[i].sensor);
- continue;
- }
-
- LOGP(DTEMP, LOGL_DEBUG, "Current %s vswr: %d.%d\n",
- vswr_data[i].name, vswr_cur[i]/1000, vswr_cur[i]%1000);
-
- if (vswr_cur[i] > vswr_old[i]) {
- LOGP(DTEMP, LOGL_NOTICE, "New maximum %s "
- "vswr: %d.%d C\n", vswr_data[i].name,
- vswr_cur[i]/1000, vswr_old[i]%1000);
-
- if (!no_rom_write) {
- rc = lc15bts_par_set_int(tall_mgr_ctx, vswr_data[i].ee_par, vswr_cur[i]/1000);
- if (rc < 0)
- LOGP(DTEMP, LOGL_ERROR, "error writing new %s "
- "max vswr %d (%s)\n", vswr_data[i].name,
- rc, strerror(errno));
- }
- }
- }
-}
-
-/*********************************************************************
- * Hours handling
- *********************************************************************/
-static time_t last_update;
-
-int lc15bts_update_hours(int no_rom_write)
-{
- time_t now = time(NULL);
- int rc, op_hrs;
-
- /* first time after start of manager program */
- if (last_update == 0) {
- last_update = now;
-
- rc = lc15bts_par_get_int(tall_mgr_ctx, LC15BTS_PAR_HOURS, &op_hrs);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR, "Unable to read "
- "operational hours: %d (%s)\n", rc,
- strerror(errno));
- return rc;
- }
-
- LOGP(DTEMP, LOGL_INFO, "Total hours of Operation: %u\n",
- op_hrs);
-
- return 0;
- }
-
- if (now >= last_update + 3600) {
- rc = lc15bts_par_get_int(tall_mgr_ctx, LC15BTS_PAR_HOURS, &op_hrs);
- if (rc < 0) {
- LOGP(DTEMP, LOGL_ERROR, "Unable to read "
- "operational hours: %d (%s)\n", rc,
- strerror(errno));
- return rc;
- }
-
- /* number of hours to increase */
- op_hrs += (now-last_update)/3600;
-
- LOGP(DTEMP, LOGL_INFO, "Total hours of Operation: %u\n",
- op_hrs);
-
- if (!no_rom_write) {
- rc = lc15bts_par_set_int(tall_mgr_ctx, LC15BTS_PAR_HOURS, op_hrs);
- if (rc < 0)
- return rc;
- }
-
- last_update = now;
- }
-
- return 0;
-}
-
-/*********************************************************************
- * Firmware reloading
- *********************************************************************/
-
-static const char *fw_sysfs[_NUM_FW] = {
- [LC15BTS_FW_DSP0] = "/sys/kernel/debug/remoteproc/remoteproc0/recovery",
- [LC15BTS_FW_DSP1] = "/sys/kernel/debug/remoteproc/remoteproc0/recovery",
-};
-
-int lc15bts_firmware_reload(enum lc15bts_firmware_type type)
-{
- int fd;
- int rc;
-
- switch (type) {
- case LC15BTS_FW_DSP0:
- case LC15BTS_FW_DSP1:
- fd = open(fw_sysfs[type], O_WRONLY);
- if (fd < 0) {
- LOGP(DFW, LOGL_ERROR, "unable to open firmware device %s: %s\n",
- fw_sysfs[type], strerror(errno));
- close(fd);
- return fd;
- }
- rc = write(fd, "restart", 8);
- if (rc < 8) {
- LOGP(DFW, LOGL_ERROR, "short write during "
- "fw write to %s\n", fw_sysfs[type]);
- close(fd);
- return -EIO;
- }
- close(fd);
- default:
- return -EINVAL;
- }
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_misc.h b/src/osmo-bts-litecell15/misc/lc15bts_misc.h
deleted file mode 100644
index 79e9e686..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_misc.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _LC15BTS_MISC_H
-#define _LC15BTS_MISC_H
-
-#include <stdint.h>
-
-void lc15bts_check_temp(int no_rom_write);
-void lc15bts_check_power(int no_rom_write);
-void lc15bts_check_vswr(int no_rom_write);
-
-int lc15bts_update_hours(int no_rom_write);
-
-enum lc15bts_firmware_type {
- LC15BTS_FW_DSP0,
- LC15BTS_FW_DSP1,
- _NUM_FW
-};
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_nl.c b/src/osmo-bts-litecell15/misc/lc15bts_nl.c
deleted file mode 100644
index 39f64aae..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_nl.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Helper for netlink */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_nl.c
- * (C) 2014 by Holger Hans Peter Freyther
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <arpa/inet.h>
-#include <netinet/ip.h>
-
-#include <sys/socket.h>
-
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#define NLMSG_TAIL(nmsg) \
- ((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
-
-/**
- * In case one binds to 0.0.0.0/INADDR_ANY and wants to know which source
- * address will be used when sending a message this function can be used.
- * It will ask the routing code of the kernel for the PREFSRC
- */
-int source_for_dest(const struct in_addr *dest, struct in_addr *loc_source)
-{
- int fd, rc;
- struct rtmsg *r;
- struct rtattr *rta;
- struct {
- struct nlmsghdr n;
- struct rtmsg r;
- char buf[1024];
- } req;
-
- memset(&req, 0, sizeof(req));
-
- fd = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE);
- if (fd < 0) {
- perror("nl socket");
- return -1;
- }
-
- /* Send a rtmsg and ask for a response */
- req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
- req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
- req.n.nlmsg_type = RTM_GETROUTE;
- req.n.nlmsg_seq = 1;
-
- /* Prepare the routing request */
- req.r.rtm_family = AF_INET;
-
- /* set the dest */
- rta = NLMSG_TAIL(&req.n);
- rta->rta_type = RTA_DST;
- rta->rta_len = RTA_LENGTH(sizeof(*dest));
- memcpy(RTA_DATA(rta), dest, sizeof(*dest));
-
- /* update sizes for dest */
- req.r.rtm_dst_len = sizeof(*dest) * 8;
- req.n.nlmsg_len = NLMSG_ALIGN(req.n.nlmsg_len) + RTA_ALIGN(rta->rta_len);
-
- rc = send(fd, &req, req.n.nlmsg_len, 0);
- if (rc != req.n.nlmsg_len) {
- perror("short write");
- close(fd);
- return -2;
- }
-
-
- /* now receive a response and parse it */
- rc = recv(fd, &req, sizeof(req), 0);
- if (rc <= 0) {
- perror("short read");
- close(fd);
- return -3;
- }
-
- if (!NLMSG_OK(&req.n, rc) || req.n.nlmsg_type != RTM_NEWROUTE) {
- close(fd);
- return -4;
- }
-
- r = NLMSG_DATA(&req.n);
- rc -= NLMSG_LENGTH(sizeof(*r));
- rta = RTM_RTA(r);
- while (RTA_OK(rta, rc)) {
- if (rta->rta_type != RTA_PREFSRC) {
- rta = RTA_NEXT(rta, rc);
- continue;
- }
-
- /* we are done */
- memcpy(loc_source, RTA_DATA(rta), RTA_PAYLOAD(rta));
- close(fd);
- return 0;
- }
-
- close(fd);
- return -5;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_nl.h b/src/osmo-bts-litecell15/misc/lc15bts_nl.h
deleted file mode 100644
index 340cf117..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_nl.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_nl.h
- * (C) 2014 by Holger Hans Peter Freyther
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-#pragma once
-
-struct in_addr;
-
-int source_for_dest(const struct in_addr *dest, struct in_addr *loc_source);
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_par.c b/src/osmo-bts-litecell15/misc/lc15bts_par.c
deleted file mode 100644
index af9d030f..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_par.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* lc15bts - access to hardware related parameters */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_par.c
- * (C) 2012 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <limits.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <osmocom/core/utils.h>
-#include <osmocom/core/talloc.h>
-
-#include "lc15bts_par.h"
-
-const struct value_string lc15bts_par_names[_NUM_LC15BTS_PAR+1] = {
- { LC15BTS_PAR_TEMP_SUPPLY_MAX, "temp-supply-max" },
- { LC15BTS_PAR_TEMP_SOC_MAX, "temp-soc-max" },
- { LC15BTS_PAR_TEMP_FPGA_MAX, "temp-fpga-max" },
- { LC15BTS_PAR_TEMP_RMSDET_MAX, "temp-rmsdet-max" },
- { LC15BTS_PAR_TEMP_OCXO_MAX, "temp-ocxo-max" },
- { LC15BTS_PAR_TEMP_TX0_MAX, "temp-tx0-max" },
- { LC15BTS_PAR_TEMP_TX1_MAX, "temp-tx1-max" },
- { LC15BTS_PAR_TEMP_PA0_MAX, "temp-pa0-max" },
- { LC15BTS_PAR_TEMP_PA1_MAX, "temp-pa1-max" },
- { LC15BTS_PAR_VOLT_SUPPLY_MAX, "volt-supply-max" },
- { LC15BTS_PAR_PWR_SUPPLY_MAX, "pwr-supply-max" },
- { LC15BTS_PAR_PWR_PA0_MAX, "pwr-pa0-max" },
- { LC15BTS_PAR_PWR_PA1_MAX, "pwr-pa1-max" },
- { LC15BTS_PAR_VSWR_TX0_MAX, "vswr-tx0-max" },
- { LC15BTS_PAR_VSWR_TX1_MAX, "vswr-tx1-max" },
- { LC15BTS_PAR_GPS_FIX, "gps-fix" },
- { LC15BTS_PAR_SERNR, "serial-nr" },
- { LC15BTS_PAR_HOURS, "hours-running" },
- { LC15BTS_PAR_BOOTS, "boot-count" },
- { LC15BTS_PAR_KEY, "key" },
- { 0, NULL }
-};
-
-int lc15bts_par_is_int(enum lc15bts_par par)
-{
- switch (par) {
- case LC15BTS_PAR_TEMP_SUPPLY_MAX:
- case LC15BTS_PAR_TEMP_SOC_MAX:
- case LC15BTS_PAR_TEMP_FPGA_MAX:
- case LC15BTS_PAR_TEMP_RMSDET_MAX:
- case LC15BTS_PAR_TEMP_OCXO_MAX:
- case LC15BTS_PAR_TEMP_TX0_MAX:
- case LC15BTS_PAR_TEMP_TX1_MAX:
- case LC15BTS_PAR_TEMP_PA0_MAX:
- case LC15BTS_PAR_TEMP_PA1_MAX:
- case LC15BTS_PAR_VOLT_SUPPLY_MAX:
- case LC15BTS_PAR_VSWR_TX0_MAX:
- case LC15BTS_PAR_VSWR_TX1_MAX:
- case LC15BTS_PAR_SERNR:
- case LC15BTS_PAR_HOURS:
- case LC15BTS_PAR_BOOTS:
- case LC15BTS_PAR_PWR_SUPPLY_MAX:
- case LC15BTS_PAR_PWR_PA0_MAX:
- case LC15BTS_PAR_PWR_PA1_MAX:
- return 1;
- default:
- return 0;
- }
-}
-
-FILE *lc15bts_par_get_path(void *ctx, enum lc15bts_par par, const char* mode)
-{
- char *fpath;
- FILE *fp;
-
- if (par >= _NUM_LC15BTS_PAR)
- return NULL;
-
- fpath = talloc_asprintf(ctx, "%s/%s", USER_ROM_PATH, get_value_string(lc15bts_par_names, par));
- if (!fpath)
- return NULL;
-
- fp = fopen(fpath, mode);
- if (!fp)
- fprintf(stderr, "Failed to open %s due to '%s' error\n", fpath, strerror(errno));
-
- talloc_free(fpath);
-
- return fp;
-}
-
-int lc15bts_par_get_int(void *ctx, enum lc15bts_par par, int *ret)
-{
- FILE *fp = lc15bts_par_get_path(ctx, par, "r");
- int rc;
-
- if (fp == NULL) {
- return -errno;
- }
-
- rc = fscanf(fp, "%d", ret);
- if (rc != 1) {
- fclose(fp);
- return -EIO;
- }
- fclose(fp);
- return 0;
-}
-
-int lc15bts_par_set_int(void *ctx, enum lc15bts_par par, int val)
-{
- FILE *fp = lc15bts_par_get_path(ctx, par, "w");
- int rc;
-
- if (fp == NULL) {
- return -errno;
- }
-
- rc = fprintf(fp, "%d", val);
- if (rc < 0) {
- fclose(fp);
- return -EIO;
- }
-
- fsync(fileno(fp));
- fclose(fp);
- return 0;
-}
-
-int lc15bts_par_get_buf(void *ctx, enum lc15bts_par par, uint8_t *buf, unsigned int size)
-{
- FILE *fp = lc15bts_par_get_path(ctx, par, "rb");
- int rc;
-
- if (fp == NULL) {
- return -errno;
- }
-
- rc = fread(buf, 1, size, fp);
-
- fclose(fp);
-
- return rc;
-}
-
-int lc15bts_par_set_buf(void *ctx, enum lc15bts_par par, const uint8_t *buf, unsigned int size)
-{
- FILE *fp = lc15bts_par_get_path(ctx, par, "wb");
- int rc;
-
- if (fp == NULL) {
- return -errno;
- }
-
- rc = fwrite(buf, 1, size, fp);
-
- fsync(fileno(fp));
- fclose(fp);
-
- return rc;
-}
-
-int lc15bts_par_get_gps_fix(time_t *ret)
-{
- char fpath[PATH_MAX];
- FILE *fp;
- int rc;
-
- snprintf(fpath, sizeof(fpath)-1, "%s/%s", USER_ROM_PATH, get_value_string(lc15bts_par_names, LC15BTS_PAR_GPS_FIX));
- fpath[sizeof(fpath)-1] = '\0';
-
- fp = fopen(fpath, "r");
- if (fp == NULL) {
- return -errno;
- }
-
- rc = fscanf(fp, "%lld", (long long *)ret);
- if (rc != 1) {
- fclose(fp);
- return -EIO;
- }
- fclose(fp);
-
- return 0;
-}
-
-int lc15bts_par_set_gps_fix(time_t val)
-{
- char fpath[PATH_MAX];
- FILE *fp;
- int rc;
-
- snprintf(fpath, sizeof(fpath)-1, "%s/%s", USER_ROM_PATH, get_value_string(lc15bts_par_names, LC15BTS_PAR_GPS_FIX));
- fpath[sizeof(fpath)-1] = '\0';
-
- fp = fopen(fpath, "w");
- if (fp == NULL) {
- return -errno;
- }
-
- rc = fprintf(fp, "%lld", (long long)val);
- if (rc < 0) {
- fclose(fp);
- return -EIO;
- }
- fsync(fileno(fp));
- fclose(fp);
-
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_par.h b/src/osmo-bts-litecell15/misc/lc15bts_par.h
deleted file mode 100644
index 74295653..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_par.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef _LC15BTS_PAR_H
-#define _LC15BTS_PAR_H
-
-#include <osmocom/core/utils.h>
-
-#define USER_ROM_PATH "/mnt/storage/var/run/lc15bts-mgr"
-
-enum lc15bts_par {
- LC15BTS_PAR_TEMP_SUPPLY_MAX,
- LC15BTS_PAR_TEMP_SOC_MAX,
- LC15BTS_PAR_TEMP_FPGA_MAX,
- LC15BTS_PAR_TEMP_RMSDET_MAX,
- LC15BTS_PAR_TEMP_OCXO_MAX,
- LC15BTS_PAR_TEMP_TX0_MAX,
- LC15BTS_PAR_TEMP_TX1_MAX,
- LC15BTS_PAR_TEMP_PA0_MAX,
- LC15BTS_PAR_TEMP_PA1_MAX,
- LC15BTS_PAR_VOLT_SUPPLY_MAX,
- LC15BTS_PAR_PWR_SUPPLY_MAX,
- LC15BTS_PAR_PWR_PA0_MAX,
- LC15BTS_PAR_PWR_PA1_MAX,
- LC15BTS_PAR_VSWR_TX0_MAX,
- LC15BTS_PAR_VSWR_TX1_MAX,
- LC15BTS_PAR_GPS_FIX,
- LC15BTS_PAR_SERNR,
- LC15BTS_PAR_HOURS,
- LC15BTS_PAR_BOOTS,
- LC15BTS_PAR_KEY,
- _NUM_LC15BTS_PAR
-};
-
-extern const struct value_string lc15bts_par_names[_NUM_LC15BTS_PAR+1];
-
-int lc15bts_par_get_int(void *ctx, enum lc15bts_par par, int *ret);
-int lc15bts_par_set_int(void *ctx, enum lc15bts_par par, int val);
-int lc15bts_par_get_buf(void *ctx, enum lc15bts_par par, uint8_t *buf, unsigned int size);
-int lc15bts_par_set_buf(void *ctx, enum lc15bts_par par, const uint8_t *buf, unsigned int size);
-
-int lc15bts_par_is_int(enum lc15bts_par par);
-int lc15bts_par_get_gps_fix(time_t *ret);
-int lc15bts_par_set_gps_fix(time_t val);
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_power.c b/src/osmo-bts-litecell15/misc/lc15bts_power.c
deleted file mode 100644
index 1a37d8e6..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_power.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-
-#include "lc15bts_power.h"
-
-#define LC15BTS_PA_VOLTAGE 24000000
-
-#define PA_SUPPLY_MIN_SYSFS "/var/lc15/pa-supply/min_microvolts"
-#define PA_SUPPLY_MAX_SYSFS "/var/lc15/pa-supply/max_microvolts"
-
-static const char *power_enable_devs[_NUM_POWER_SOURCES] = {
- [LC15BTS_POWER_PA0] = "/var/lc15/pa-state/pa0/state",
- [LC15BTS_POWER_PA1] = "/var/lc15/pa-state/pa1/state",
-};
-
-static const char *power_sensor_devs[_NUM_POWER_SOURCES] = {
- [LC15BTS_POWER_SUPPLY] = "/var/lc15/pwr-sense/main-supply/",
- [LC15BTS_POWER_PA0] = "/var/lc15/pwr-sense/pa0/",
- [LC15BTS_POWER_PA1] = "/var/lc15/pwr-sense/pa1/",
-};
-
-static const char *power_sensor_type_str[_NUM_POWER_TYPES] = {
- [LC15BTS_POWER_POWER] = "power",
- [LC15BTS_POWER_VOLTAGE] = "voltage",
- [LC15BTS_POWER_CURRENT] = "current",
-};
-
-int lc15bts_power_sensor_get(
- enum lc15bts_power_source source,
- enum lc15bts_power_type type,
- int *power)
-{
- char buf[PATH_MAX];
- char pwrstr[10];
- int fd, rc;
-
- if (source >= _NUM_POWER_SOURCES)
- return -EINVAL;
-
- if (type >= _NUM_POWER_TYPES)
- return -EINVAL;
-
- snprintf(buf, sizeof(buf)-1, "%s%s", power_sensor_devs[source], power_sensor_type_str[type]);
- buf[sizeof(buf)-1] = '\0';
-
- fd = open(buf, O_RDONLY);
- if (fd < 0)
- return fd;
-
- rc = read(fd, pwrstr, sizeof(pwrstr));
- pwrstr[sizeof(pwrstr)-1] = '\0';
- if (rc < 0) {
- close(fd);
- return rc;
- }
- if (rc == 0) {
- close(fd);
- return -EIO;
- }
- close(fd);
- *power = atoi(pwrstr);
- return 0;
-}
-
-
-int lc15bts_power_set(
- enum lc15bts_power_source source,
- int en)
-{
- int fd;
- int rc;
-
- if ((source != LC15BTS_POWER_PA0)
- && (source != LC15BTS_POWER_PA1) ) {
- return -EINVAL;
- }
-
- fd = open(PA_SUPPLY_MAX_SYSFS, O_WRONLY);
- if (fd < 0) {
- return fd;
- }
- rc = write(fd, "32000000", 9);
- close( fd );
-
- if (rc != 9) {
- return -1;
- }
-
- fd = open(PA_SUPPLY_MIN_SYSFS, O_WRONLY);
- if (fd < 0) {
- return fd;
- }
-
- /* TODO NTQ: Make the voltage configurable */
- rc = write(fd, "24000000", 9);
- close( fd );
-
- if (rc != 9) {
- return -1;
- }
-
- fd = open(power_enable_devs[source], O_WRONLY);
- if (fd < 0) {
- return fd;
- }
- rc = write(fd, en?"1":"0", 2);
- close( fd );
-
- if (rc != 2) {
- return -1;
- }
-
- if (en) usleep(50*1000);
-
- return 0;
-}
-
-int lc15bts_power_get(
- enum lc15bts_power_source source)
-{
- int fd;
- int rc;
- int retVal = 0;
- char enstr[10];
-
- fd = open(power_enable_devs[source], O_RDONLY);
- if (fd < 0) {
- return fd;
- }
-
- rc = read(fd, enstr, sizeof(enstr));
- enstr[rc-1] = '\0';
-
- close(fd);
-
- if (rc < 0) {
- return rc;
- }
- if (rc == 0) {
- return -EIO;
- }
-
- rc = strcmp(enstr, "enabled");
- if(rc == 0) {
- retVal = 1;
- }
-
- return retVal;
-}
-
-static const char *vswr_devs[_NUM_VSWR_SENSORS] = {
- [LC15BTS_VSWR_TX0] = "/var/lc15/vswr/tx0/vswr",
- [LC15BTS_VSWR_TX1] = "/var/lc15/vswr/tx1/vswr",
-};
-
-int lc15bts_vswr_get(enum lc15bts_vswr_sensor sensor, int *vswr)
-{
- char buf[PATH_MAX];
- char vswrstr[8];
- int fd, rc;
-
- if (sensor < 0 || sensor >= _NUM_VSWR_SENSORS)
- return -EINVAL;
-
- snprintf(buf, sizeof(buf)-1, "%s", vswr_devs[sensor]);
- buf[sizeof(buf)-1] = '\0';
-
- fd = open(buf, O_RDONLY);
- if (fd < 0)
- return fd;
-
- rc = read(fd, vswrstr, sizeof(vswrstr));
- vswrstr[sizeof(vswrstr)-1] = '\0';
- if (rc < 0) {
- close(fd);
- return rc;
- }
- if (rc == 0) {
- close(fd);
- return -EIO;
- }
- close(fd);
- *vswr = atoi(vswrstr);
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_power.h b/src/osmo-bts-litecell15/misc/lc15bts_power.h
deleted file mode 100644
index b48cfdcd..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_power.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef _LC15BTS_POWER_H
-#define _LC15BTS_POWER_H
-
-enum lc15bts_power_source {
- LC15BTS_POWER_SUPPLY,
- LC15BTS_POWER_PA0,
- LC15BTS_POWER_PA1,
- _NUM_POWER_SOURCES
-};
-
-enum lc15bts_power_type {
- LC15BTS_POWER_POWER,
- LC15BTS_POWER_VOLTAGE,
- LC15BTS_POWER_CURRENT,
- _NUM_POWER_TYPES
-};
-
-int lc15bts_power_sensor_get(
- enum lc15bts_power_source source,
- enum lc15bts_power_type type,
- int *volt);
-
-int lc15bts_power_set(
- enum lc15bts_power_source source,
- int en);
-
-int lc15bts_power_get(
- enum lc15bts_power_source source);
-
-enum lc15bts_vswr_sensor {
- LC15BTS_VSWR_TX0,
- LC15BTS_VSWR_TX1,
- _NUM_VSWR_SENSORS
-};
-
-int lc15bts_vswr_get(enum lc15bts_vswr_sensor sensor, int *vswr);
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_swd.c b/src/osmo-bts-litecell15/misc/lc15bts_swd.c
deleted file mode 100644
index eac64d66..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_swd.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Systemd service wd notification for Litecell 1.5 BTS management daemon */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "misc/lc15bts_mgr.h"
-#include "misc/lc15bts_swd.h"
-#include <osmocom/core/logging.h>
-
-/* Needed for service watchdog notification */
-#include <systemd/sd-daemon.h>
-
-/* This is the period used to verify if all events have been registered to be allowed
- to notify the systemd service watchdog
-*/
-#define SWD_PERIOD 30
-
-static void swd_start(struct lc15bts_mgr_instance *mgr);
-static void swd_process(struct lc15bts_mgr_instance *mgr);
-static void swd_close(struct lc15bts_mgr_instance *mgr);
-static void swd_state_reset(struct lc15bts_mgr_instance *mgr, int reason);
-static int swd_run(struct lc15bts_mgr_instance *mgr, int from_loop);
-static void swd_loop_run(void *_data);
-
-enum swd_state {
- SWD_INITIAL,
- SWD_IN_PROGRESS,
-};
-
-enum swd_result {
- SWD_FAIL_START,
- SWD_FAIL_NOTIFY,
- SWD_SUCCESS,
-};
-
-static void swd_start(struct lc15bts_mgr_instance *mgr)
-{
- swd_process(mgr);
-}
-
-static void swd_process(struct lc15bts_mgr_instance *mgr)
-{
- int rc = 0, notify = 0;
-
- /* Did we get all needed conditions ? */
- if (mgr->swd.swd_eventmasks == mgr->swd.swd_events) {
- /* Ping systemd service wd if enabled */
- rc = sd_notify(0, "WATCHDOG=1");
- LOGP(DSWD, LOGL_NOTICE, "Watchdog notification attempt\n");
- notify = 1;
- }
- else {
- LOGP(DSWD, LOGL_NOTICE, "Missing watchdog events: e:0x%016llx,m:0x%016llx\n",mgr->swd.swd_events,mgr->swd.swd_eventmasks);
- }
-
- if (rc < 0) {
- LOGP(DSWD, LOGL_ERROR,
- "Failed to notify system service watchdog: %d\n", rc);
- swd_state_reset(mgr, SWD_FAIL_NOTIFY);
- return;
- }
- else {
- /* Did we notified the watchdog? */
- if (notify) {
- mgr->swd.swd_events = 0;
- /* Makes sure we really cleared it in case any event was notified at this same moment (it would be lost) */
- if (mgr->swd.swd_events != 0)
- mgr->swd.swd_events = 0;
- }
- }
-
- swd_state_reset(mgr, SWD_SUCCESS);
- return;
-}
-
-static void swd_close(struct lc15bts_mgr_instance *mgr)
-{
-}
-
-static void swd_state_reset(struct lc15bts_mgr_instance *mgr, int outcome)
-{
- if (mgr->swd.swd_from_loop) {
- mgr->swd.swd_timeout.data = mgr;
- mgr->swd.swd_timeout.cb = swd_loop_run;
- osmo_timer_schedule(&mgr->swd.swd_timeout, SWD_PERIOD, 0);
- }
-
- mgr->swd.state = SWD_INITIAL;
- swd_close(mgr);
-}
-
-static int swd_run(struct lc15bts_mgr_instance *mgr, int from_loop)
-{
- if (mgr->swd.state != SWD_INITIAL) {
- LOGP(DSWD, LOGL_ERROR, "Swd is already in progress.\n");
- return -1;
- }
-
- mgr->swd.swd_from_loop = from_loop;
-
- /* From now on everything will be handled from the failure */
- mgr->swd.state = SWD_IN_PROGRESS;
- swd_start(mgr);
- return 0;
-}
-
-static void swd_loop_run(void *_data)
-{
- int rc;
- struct lc15bts_mgr_instance *mgr = _data;
-
- LOGP(DSWD, LOGL_NOTICE, "Going to check for watchdog notification.\n");
- rc = swd_run(mgr, 1);
- if (rc != 0) {
- swd_state_reset(mgr, SWD_FAIL_START);
- }
-}
-
-/* 'swd_num_events' configures the number of events to be monitored before notifying the
- systemd service watchdog. It must be in the range of [1,64]. Events are notified
- through the function 'lc15bts_swd_event'
-*/
-int lc15bts_swd_init(struct lc15bts_mgr_instance *mgr, int swd_num_events)
-{
- /* Checks for a valid number of events to validate */
- if (swd_num_events < 1 || swd_num_events > 64)
- return(-1);
-
- mgr->swd.state = SWD_INITIAL;
- mgr->swd.swd_timeout.data = mgr;
- mgr->swd.swd_timeout.cb = swd_loop_run;
- osmo_timer_schedule(&mgr->swd.swd_timeout, 0, 0);
-
- if (swd_num_events == 64){
- mgr->swd.swd_eventmasks = 0xffffffffffffffffULL;
- }
- else {
- mgr->swd.swd_eventmasks = ((1ULL << swd_num_events) - 1);
- }
- mgr->swd.swd_events = 0;
- mgr->swd.num_events = swd_num_events;
-
- return 0;
-}
-
-/* Notifies that the specified event 'swd_event' happened correctly;
- the value must be in the range of [0,'swd_num_events'[ (see lc15bts_swd_init).
- For example, if 'swd_num_events' was 64, 'swd_event' events are numbered 0 to 63.
- WARNING: if this function can be used from multiple threads at the same time,
- it must be protected with a kind of mutex to avoid losing event notification.
-*/
-int lc15bts_swd_event(struct lc15bts_mgr_instance *mgr, enum mgr_swd_events swd_event)
-{
- /* Checks for a valid specified event (smaller than max possible) */
- if ((int)(swd_event) < 0 || (int)(swd_event) >= mgr->swd.num_events)
- return(-1);
-
- mgr->swd.swd_events = mgr->swd.swd_events | ((unsigned long long int)(1) << (int)(swd_event));
-
- /* !!! Uncomment following line to debug events notification */
- LOGP(DSWD, LOGL_DEBUG,"Swd event notified: %d\n", (int)(swd_event));
-
- return 0;
-}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_swd.h b/src/osmo-bts-litecell15/misc/lc15bts_swd.h
deleted file mode 100644
index b78a2c2a..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_swd.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _LC15BTS_SWD_H
-#define _LC15BTS_SWD_H
-
-int lc15bts_swd_init(struct lc15bts_mgr_instance *mgr, int swd_num_events);
-int lc15bts_swd_event(struct lc15bts_mgr_instance *mgr, enum mgr_swd_events swd_event);
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_temp.c b/src/osmo-bts-litecell15/misc/lc15bts_temp.c
deleted file mode 100644
index 45602dcc..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_temp.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-
-#include <osmocom/core/utils.h>
-
-#include "lc15bts_temp.h"
-
-static const char *temp_devs[_NUM_TEMP_SENSORS] = {
- [LC15BTS_TEMP_SUPPLY] = "/var/lc15/temp/main-supply/temp",
- [LC15BTS_TEMP_SOC] = "/var/lc15/temp/cpu/temp",
- [LC15BTS_TEMP_FPGA] = "/var/lc15/temp/fpga/temp",
- [LC15BTS_TEMP_RMSDET] = "/var/lc15/temp/rmsdet/temp",
- [LC15BTS_TEMP_OCXO] = "/var/lc15/temp/ocxo/temp",
- [LC15BTS_TEMP_TX0] = "/var/lc15/temp/tx0/temp",
- [LC15BTS_TEMP_TX1] = "/var/lc15/temp/tx1/temp",
- [LC15BTS_TEMP_PA0] = "/var/lc15/temp/pa0/temp",
- [LC15BTS_TEMP_PA1] = "/var/lc15/temp/pa1/temp",
-};
-
-int lc15bts_temp_get(enum lc15bts_temp_sensor sensor, int *temp)
-{
- char buf[PATH_MAX];
- char tempstr[8];
- int fd, rc;
-
- if (sensor < 0 || sensor >= _NUM_TEMP_SENSORS)
- return -EINVAL;
-
- snprintf(buf, sizeof(buf)-1, "%s", temp_devs[sensor]);
- buf[sizeof(buf)-1] = '\0';
-
- fd = open(buf, O_RDONLY);
- if (fd < 0)
- return fd;
-
- rc = read(fd, tempstr, sizeof(tempstr));
- tempstr[sizeof(tempstr)-1] = '\0';
- if (rc < 0) {
- close(fd);
- return rc;
- }
- if (rc == 0) {
- close(fd);
- return -EIO;
- }
- close(fd);
- *temp = atoi(tempstr);
- return 0;
-}
-
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_temp.h b/src/osmo-bts-litecell15/misc/lc15bts_temp.h
deleted file mode 100644
index 35d81f1b..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_temp.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _LC15BTS_TEMP_H
-#define _LC15BTS_TEMP_H
-
-enum lc15bts_temp_sensor {
- LC15BTS_TEMP_SUPPLY,
- LC15BTS_TEMP_SOC,
- LC15BTS_TEMP_FPGA,
- LC15BTS_TEMP_RMSDET,
- LC15BTS_TEMP_OCXO,
- LC15BTS_TEMP_TX0,
- LC15BTS_TEMP_TX1,
- LC15BTS_TEMP_PA0,
- LC15BTS_TEMP_PA1,
- _NUM_TEMP_SENSORS
-};
-
-enum lc15bts_temp_type {
- LC15BTS_TEMP_INPUT,
- LC15BTS_TEMP_LOWEST,
- LC15BTS_TEMP_HIGHEST,
- LC15BTS_TEMP_FAULT,
- _NUM_TEMP_TYPES
-};
-
-int lc15bts_temp_get(enum lc15bts_temp_sensor sensor, int *temp);
-
-
-#endif
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_util.c b/src/osmo-bts-litecell15/misc/lc15bts_util.c
deleted file mode 100644
index 430ce0f7..00000000
--- a/src/osmo-bts-litecell15/misc/lc15bts_util.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* lc15bts-util - access to hardware related parameters */
-
-/* Copyright (C) 2015 by Yves Godin <support@nuranwireless.com>
- *
- * Based on sysmoBTS:
- * sysmobts_misc.c
- * (C) 2012-2013 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <errno.h>
-#include <getopt.h>
-#include <osmocom/core/talloc.h>
-#include <osmocom/core/msgb.h>
-
-#include "lc15bts_par.h"
-
-void *tall_util_ctx;
-
-enum act {
- ACT_GET,
- ACT_SET,
-};
-
-static enum act action;
-static char *write_arg;
-static int void_warranty;
-
-static void print_help()
-{
- const struct value_string *par = lc15bts_par_names;
-
- printf("lc15bts-util [--void-warranty -r | -w value] param_name\n");
- printf("Possible param names:\n");
-
- for (; par->str != NULL; par += 1) {
- if (!lc15bts_par_is_int(par->value))
- continue;
- printf(" %s\n", par->str);
- }
-}
-
-static int parse_options(int argc, char **argv)
-{
- while (1) {
- int option_idx = 0, c;
- static const struct option long_options[] = {
- { "help", 0, 0, 'h' },
- { "read", 0, 0, 'r' },
- { "void-warranty", 0, 0, 1000},
- { "write", 1, 0, 'w' },
- { 0, 0, 0, 0 }
- };
-
- c = getopt_long(argc, argv, "rw:h",
- long_options, &option_idx);
- if (c == -1)
- break;
- switch (c) {
- case 'r':
- action = ACT_GET;
- break;
- case 'w':
- action = ACT_SET;
- write_arg = optarg;
- break;
- case 'h':
- print_help();
- return -1;
- break;
- case 1000:
- printf("Will void warranty on write.\n");
- void_warranty = 1;
- break;
- default:
- return -1;
- }
- }
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- const char *parname;
- enum lc15bts_par par;
- int rc, val;
-
- tall_util_ctx = talloc_named_const(NULL, 1, "lc15 utils");
- msgb_talloc_ctx_init(tall_util_ctx, 0);
-
- rc = parse_options(argc, argv);
- if (rc < 0)
- exit(2);
-
- if (optind >= argc) {
- fprintf(stderr, "You must specify the parameter name\n");
- exit(2);
- }
- parname = argv[optind];
-
- rc = get_string_value(lc15bts_par_names, parname);
- if (rc < 0) {
- fprintf(stderr, "`%s' is not a valid parameter\n", parname);
- exit(2);
- } else
- par = rc;
-
- switch (action) {
- case ACT_GET:
- rc = lc15bts_par_get_int(tall_util_ctx, par, &val);
- if (rc < 0) {
- fprintf(stderr, "Error %d\n", rc);
- goto err;
- }
- printf("%d\n", val);
- break;
- case ACT_SET:
- rc = lc15bts_par_get_int(tall_util_ctx, par, &val);
- if (rc < 0) {
- fprintf(stderr, "Error %d\n", rc);
- goto err;
- }
- if (val != 0xFFFF && val != 0xFF && val != 0xFFFFFFFF && !void_warranty) {
- fprintf(stderr, "Parameter is already set!\r\n");
- goto err;
- }
- rc = lc15bts_par_set_int(tall_util_ctx, par, atoi(write_arg));
- if (rc < 0) {
- fprintf(stderr, "Error %d\n", rc);
- goto err;
- }
- printf("Success setting %s=%d\n", parname,
- atoi(write_arg));
- break;
- default:
- fprintf(stderr, "Unsupported action\n");
- goto err;
- }
-
- exit(0);
-
-err:
- exit(1);
-}
-