sysmobts: There is only one uc make it a singleton
Move the init and polling into the sysmoBTS related part. In the future we should have _one_ temperature control.
This commit is contained in:
parent
c84ca8c82f
commit
54a8b313b4
|
@ -39,7 +39,6 @@
|
|||
#include <osmocom/vty/telnet_interface.h>
|
||||
#include <osmocom/vty/logging.h>
|
||||
|
||||
#include "btsconfig.h"
|
||||
#include "misc/sysmobts_misc.h"
|
||||
#include "misc/sysmobts_mgr.h"
|
||||
#include "misc/sysmobts_nl.h"
|
||||
|
@ -50,64 +49,6 @@ static int daemonize = 0;
|
|||
static const char *cfgfile = "sysmobts-mgr.cfg";
|
||||
void *tall_mgr_ctx;
|
||||
|
||||
/* every 6 hours means 365*4 = 1460 EEprom writes per year (max) */
|
||||
#define TEMP_TIMER_SECS (6 * 3600)
|
||||
|
||||
/* every 1 hours means 365*24 = 8760 EEprom writes per year (max) */
|
||||
#define HOURS_TIMER_SECS (1 * 3600)
|
||||
|
||||
#ifdef BUILD_SBTS2050
|
||||
static struct osmo_timer_list temp_uc_timer;
|
||||
static void check_uctemp_timer_cb(void *data)
|
||||
{
|
||||
int temp_pa = 0, temp_board = 0;
|
||||
struct uc *ucontrol0 = data;
|
||||
|
||||
sbts2050_uc_check_temp(ucontrol0, &temp_pa, &temp_board);
|
||||
|
||||
osmo_timer_schedule(&temp_uc_timer, TEMP_TIMER_SECS, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void initialize_sbts2050(void)
|
||||
{
|
||||
#ifdef BUILD_SBTS2050
|
||||
static struct uc ucontrol0 = {
|
||||
.id = 0,
|
||||
.path = "/dev/ttyS0"
|
||||
};
|
||||
int val;
|
||||
|
||||
if (sysmobts_par_get_int(SYSMOBTS_PAR_MODEL_NR, &val) < 0) {
|
||||
LOGP(DFIND, LOGL_ERROR,
|
||||
"Failed to get Model number\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (val != 2050)
|
||||
return;
|
||||
|
||||
if (sysmobts_par_get_int(SYSMOBTS_PAR_TRX_NR, &val) < 0) {
|
||||
LOGP(DFIND, LOGL_ERROR, "Failed to get the TRX number\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (val != 0)
|
||||
return;
|
||||
|
||||
ucontrol0.fd = osmo_serial_init(ucontrol0.path, 115200);
|
||||
if (ucontrol0.fd < 0) {
|
||||
LOGP(DFIND, LOGL_ERROR,
|
||||
"Failed to open the serial interface\n");
|
||||
return;
|
||||
}
|
||||
|
||||
temp_uc_timer.cb = check_uctemp_timer_cb;
|
||||
temp_uc_timer.data = &ucontrol0;
|
||||
check_uctemp_timer_cb(&ucontrol0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static struct osmo_timer_list temp_timer;
|
||||
static void check_temp_timer_cb(void *unused)
|
||||
{
|
||||
|
@ -414,7 +355,7 @@ int main(int argc, char **argv)
|
|||
hours_timer_cb(NULL);
|
||||
|
||||
/* start uc temperature check timer */
|
||||
initialize_sbts2050();
|
||||
sbts2050_uc_initialize();
|
||||
|
||||
/* handle broadcast messages for ipaccess-find */
|
||||
fd.cb = ipaccess_bcast;
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include <osmocom/core/logging.h>
|
||||
#include <osmocom/core/msgb.h>
|
||||
#include <osmocom/core/timer.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
@ -35,6 +36,12 @@
|
|||
#define SIZE_HEADER_RSP 5
|
||||
#define SIZE_HEADER_CMD 4
|
||||
|
||||
struct uc {
|
||||
int id;
|
||||
int fd;
|
||||
const char *path;
|
||||
};
|
||||
|
||||
struct ucinfo {
|
||||
uint16_t id;
|
||||
int master;
|
||||
|
@ -42,6 +49,11 @@ struct ucinfo {
|
|||
int pa;
|
||||
};
|
||||
|
||||
static struct uc ucontrol0 = {
|
||||
.id = 0,
|
||||
.path = "/dev/ttyS0"
|
||||
};
|
||||
|
||||
/**********************************************************************
|
||||
* Functions read/write from serial interface
|
||||
*********************************************************************/
|
||||
|
@ -190,7 +202,7 @@ err:
|
|||
/**********************************************************************
|
||||
* Get power status function
|
||||
*********************************************************************/
|
||||
int sbts2050_uc_get_status(struct uc *ucontrol, enum sbts2050_status_rqt status)
|
||||
int sbts2050_uc_get_status(enum sbts2050_status_rqt status)
|
||||
{
|
||||
struct msgb *msg;
|
||||
const struct ucinfo info = {
|
||||
|
@ -199,7 +211,7 @@ int sbts2050_uc_get_status(struct uc *ucontrol, enum sbts2050_status_rqt status)
|
|||
rsppkt_t *response;
|
||||
int val_status;
|
||||
|
||||
msg = sbts2050_ucinfo_get(ucontrol, &info);
|
||||
msg = sbts2050_ucinfo_get(&ucontrol0, &info);
|
||||
|
||||
if (msg == NULL) {
|
||||
LOGP(DTEMP, LOGL_ERROR,
|
||||
|
@ -230,7 +242,7 @@ int sbts2050_uc_get_status(struct uc *ucontrol, enum sbts2050_status_rqt status)
|
|||
/**********************************************************************
|
||||
* Uc Power Switching handling
|
||||
*********************************************************************/
|
||||
void sbts2050_uc_set_power(struct uc *ucontrol, int pmaster, int pslave, int ppa)
|
||||
void sbts2050_uc_set_power(int pmaster, int pslave, int ppa)
|
||||
{
|
||||
struct msgb *msg;
|
||||
const struct ucinfo info = {
|
||||
|
@ -240,7 +252,7 @@ void sbts2050_uc_set_power(struct uc *ucontrol, int pmaster, int pslave, int ppa
|
|||
.pa = ppa
|
||||
};
|
||||
|
||||
msg = sbts2050_ucinfo_get(ucontrol, &info);
|
||||
msg = sbts2050_ucinfo_get(&ucontrol0, &info);
|
||||
|
||||
if (msg == NULL) {
|
||||
LOGP(DTEMP, LOGL_ERROR, "Error switching off some unit.\n");
|
||||
|
@ -261,7 +273,7 @@ void sbts2050_uc_set_power(struct uc *ucontrol, int pmaster, int pslave, int ppa
|
|||
/**********************************************************************
|
||||
* Uc temperature handling
|
||||
*********************************************************************/
|
||||
void sbts2050_uc_check_temp(struct uc *ucontrol, int *temp_pa, int *temp_board)
|
||||
void sbts2050_uc_check_temp(int *temp_pa, int *temp_board)
|
||||
{
|
||||
rsppkt_t *response;
|
||||
struct msgb *msg;
|
||||
|
@ -269,7 +281,7 @@ void sbts2050_uc_check_temp(struct uc *ucontrol, int *temp_pa, int *temp_board)
|
|||
.id = SBTS2050_TEMP_RQT,
|
||||
};
|
||||
|
||||
msg = sbts2050_ucinfo_get(ucontrol, &info);
|
||||
msg = sbts2050_ucinfo_get(&ucontrol0, &info);
|
||||
|
||||
if (msg == NULL) {
|
||||
LOGP(DTEMP, LOGL_ERROR, "Error reading temperature\n");
|
||||
|
@ -287,4 +299,51 @@ void sbts2050_uc_check_temp(struct uc *ucontrol, int *temp_pa, int *temp_board)
|
|||
response->rsp.tempGet.i8PaTemp);
|
||||
msgb_free(msg);
|
||||
}
|
||||
|
||||
static struct osmo_timer_list temp_uc_timer;
|
||||
static void check_uctemp_timer_cb(void *data)
|
||||
{
|
||||
int temp_pa = 0, temp_board = 0;
|
||||
|
||||
sbts2050_uc_check_temp(&temp_pa, &temp_board);
|
||||
|
||||
osmo_timer_schedule(&temp_uc_timer, TEMP_TIMER_SECS, 0);
|
||||
}
|
||||
|
||||
void sbts2050_uc_initialize(void)
|
||||
{
|
||||
int val;
|
||||
|
||||
if (sysmobts_par_get_int(SYSMOBTS_PAR_MODEL_NR, &val) < 0) {
|
||||
LOGP(DFIND, LOGL_ERROR,
|
||||
"Failed to get Model number\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (val != 2050)
|
||||
return;
|
||||
|
||||
if (sysmobts_par_get_int(SYSMOBTS_PAR_TRX_NR, &val) < 0) {
|
||||
LOGP(DFIND, LOGL_ERROR, "Failed to get the TRX number\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (val != 0)
|
||||
return;
|
||||
|
||||
ucontrol0.fd = osmo_serial_init(ucontrol0.path, 115200);
|
||||
if (ucontrol0.fd < 0) {
|
||||
LOGP(DFIND, LOGL_ERROR,
|
||||
"Failed to open the serial interface\n");
|
||||
return;
|
||||
}
|
||||
|
||||
temp_uc_timer.cb = check_uctemp_timer_cb;
|
||||
check_uctemp_timer_cb(NULL);
|
||||
}
|
||||
#else
|
||||
void sbts2050_uc_initialize(void)
|
||||
{
|
||||
LOGP(DTEMP, LOGL_NOTICE, "sysmoBTS2050 was not enabled at compile time.\n");
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,12 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
/* every 6 hours means 365*4 = 1460 EEprom writes per year (max) */
|
||||
#define TEMP_TIMER_SECS (6 * 3600)
|
||||
|
||||
/* every 1 hours means 365*24 = 8760 EEprom writes per year (max) */
|
||||
#define HOURS_TIMER_SECS (1 * 3600)
|
||||
|
||||
enum sysmobts_temp_sensor {
|
||||
SYSMOBTS_TEMP_DIGITAL = 1,
|
||||
SYSMOBTS_TEMP_RF = 2,
|
||||
|
@ -37,13 +43,9 @@ enum sysmobts_firmware_type {
|
|||
int sysmobts_firmware_reload(enum sysmobts_firmware_type type);
|
||||
|
||||
|
||||
struct uc {
|
||||
int id;
|
||||
int fd;
|
||||
const char *path;
|
||||
};
|
||||
void sbts2050_uc_check_temp(struct uc *ucontrol, int *temp_pa, int *temp_board);
|
||||
void sbts2050_uc_set_power(struct uc *ucontrol, int pmaster, int pslave, int ppa);
|
||||
int sbts2050_uc_get_status(struct uc *ucontrol, enum sbts2050_status_rqt status);
|
||||
void sbts2050_uc_check_temp(int *temp_pa, int *temp_board);
|
||||
void sbts2050_uc_set_power(int pmaster, int pslave, int ppa);
|
||||
int sbts2050_uc_get_status(enum sbts2050_status_rqt status);
|
||||
void sbts2050_uc_initialize();
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue