aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorÁlvaro Neira Ayuso <anayuso@sysmocom.de>2014-03-15 02:13:07 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-03-16 14:21:41 +0100
commit2dca8f37e5d44802221abb4d6fd31ec51fb9921a (patch)
tree27babc40d2002bf49a4d745656bfcd2911f0940d /src
parent4b614a0246ef3952407e86a89df7a437704275d1 (diff)
misc/sysmobts_misc: function for switching off/on and requesting status power
I have extended the principal function that we use for requesting information to the microcontroller for switching off/on the board and the PA. And I have extended it for requesting the power status information of the board and the PA. Signed-off-by: Alvaro Neira Ayuso <anayuso@sysmocom.de>
Diffstat (limited to 'src')
-rw-r--r--src/osmo-bts-sysmo/misc/sysmobts_misc.c93
-rw-r--r--src/osmo-bts-sysmo/misc/sysmobts_misc.h10
2 files changed, 103 insertions, 0 deletions
diff --git a/src/osmo-bts-sysmo/misc/sysmobts_misc.c b/src/osmo-bts-sysmo/misc/sysmobts_misc.c
index 55a7a2a6..9ea26c29 100644
--- a/src/osmo-bts-sysmo/misc/sysmobts_misc.c
+++ b/src/osmo-bts-sysmo/misc/sysmobts_misc.c
@@ -120,6 +120,12 @@ static struct msgb *sbts2050_ucinfo_get(struct uc *ucontrol, struct ucinfo info)
case SBTS2050_TEMP_RQT:
num = sizeof(command->cmd.tempGet);
break;
+ case SBTS2050_PWR_RQT:
+ num = sizeof(command->cmd.pwrSetState);
+ break;
+ case SBTS2050_PWR_STATUS:
+ num = sizeof(command->cmd.pwrGetStatus);
+ break;
default:
return NULL;
}
@@ -138,6 +144,17 @@ static struct msgb *sbts2050_ucinfo_get(struct uc *ucontrol, struct ucinfo info)
command->u8Id = info.id;
command->u8Len = sizeof(command->cmd.tempGet);
break;
+ case SBTS2050_PWR_RQT:
+ command->u8Id = info.id;
+ command->u8Len = sizeof(command->cmd.pwrSetState);
+ command->cmd.pwrSetState.u1MasterEn = !!info.master;
+ command->cmd.pwrSetState.u1SlaveEn = !!info.slave;
+ command->cmd.pwrSetState.u1PwrAmpEn = !!info.pa;
+ break;
+ case SBTS2050_PWR_STATUS:
+ command->u8Id = info.id;
+ command->u8Len = sizeof(command->cmd.pwrGetStatus);
+ break;
default:
goto err;
}
@@ -182,6 +199,82 @@ err:
#endif
/**********************************************************************
+ * Get power status function
+ *********************************************************************/
+int sbts2050_uc_status(struct uc *ucontrol, enum sbts2050_status_rqt status)
+{
+#ifdef BUILD_SBTS2050
+ struct msgb *msg;
+ struct ucinfo info = {
+ .id = SBTS2050_PWR_STATUS,
+ };
+ rsppkt_t *response;
+ int val_status;
+
+ msg = sbts2050_ucinfo_get(ucontrol, info);
+
+ if (msg == NULL) {
+ LOGP(DTEMP, LOGL_ERROR, "Error switching off some unit");
+ return -1;
+ }
+
+ response = (rsppkt_t *)msg->data;
+
+ switch (status) {
+ case SBTS2050_STATUS_MASTER:
+ val_status = response->rsp.pwrGetStatus.u1MasterEn;
+ break;
+ case SBTS2050_STATUS_SLAVE:
+ val_status = response->rsp.pwrGetStatus.u1SlaveEn;
+ break;
+ case SBTS2050_STATUS_PA:
+ val_status = response->rsp.pwrGetStatus.u1PwrAmpEn;
+ break;
+ default:
+ msgb_free(msg);
+ return -1;
+ }
+ msgb_free(msg);
+ return val_status;
+#else
+ return -1;
+#endif
+}
+
+/**********************************************************************
+ * Uc Power Switching handling
+ *********************************************************************/
+void sbts2050_uc_power(struct uc *ucontrol, int pmaster, int pslave, int ppa)
+{
+#ifdef BUILD_SBTS2050
+ struct msgb *msg;
+ struct ucinfo info = {
+ .id = 0x00,
+ .master = pmaster,
+ .slave = pslave,
+ .pa = ppa
+ };
+
+ msg = sbts2050_ucinfo_get(ucontrol, info);
+
+ if (msg == NULL) {
+ LOGP(DTEMP, LOGL_ERROR, "Error switching off some unit");
+ return;
+ }
+
+ LOGP(DTEMP, LOGL_DEBUG, "Switch off/on success:\n"
+ "MASTER %s\n"
+ "SLAVE %s\n"
+ "PA %s\n",
+ pmaster ? "ON" : "OFF",
+ pslave ? "ON" : "OFF",
+ ppa ? "ON" : "OFF");
+
+ msgb_free(msg);
+#endif
+}
+
+/**********************************************************************
* Uc temperature handling
*********************************************************************/
void sbts2050_uc_check_temp(struct uc *ucontrol, int *temp_pa, int *temp_board)
diff --git a/src/osmo-bts-sysmo/misc/sysmobts_misc.h b/src/osmo-bts-sysmo/misc/sysmobts_misc.h
index 3c6513ee..01878f24 100644
--- a/src/osmo-bts-sysmo/misc/sysmobts_misc.h
+++ b/src/osmo-bts-sysmo/misc/sysmobts_misc.h
@@ -13,6 +13,12 @@ enum sysmobts_temp_type {
_NUM_TEMP_TYPES
};
+enum sbts2050_status_rqt {
+ SBTS2050_STATUS_MASTER,
+ SBTS2050_STATUS_SLAVE,
+ SBTS2050_STATUS_PA
+};
+
struct uc {
int id;
int fd;
@@ -33,6 +39,10 @@ void sysmobts_check_temp(int no_eeprom_write);
void sbts2050_uc_check_temp(struct uc *ucontrol, int *temp_pa, int *temp_board);
+void sbts2050_uc_power(struct uc *ucontrol, int pmaster, int pslave, int ppa);
+
+int sbts2050_uc_status(struct uc *ucontrol, enum sbts2050_status_rqt status);
+
int sysmobts_update_hours(int no_epprom_write);
enum sysmobts_firmware_type {