diff src/cs/services/lls/lls_functions.c @ 0:4e78acac3d88

src/{condat,cs,gpf,nucleus}: import from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:23:26 +0000
parents
children 5bf097aeaad7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/services/lls/lls_functions.c	Fri Oct 16 06:23:26 2020 +0000
@@ -0,0 +1,189 @@
+/**
+ * @file   lls_functions.c
+ *
+ * Implementation of LLS functions.
+ *
+ * @author   Laurent Sollier (l-sollier@ti.com)
+ * @version 0.1
+ */
+
+/*
+ * History:
+ *
+ *   Date          Author       Modification
+ *  ----------------------------------------
+ *  03/12/2002     L Sollier    Create
+ *
+ *
+ * (C) Copyright 2002 by Texas Instruments Incorporated, All Rights Reserved
+ */
+
+#ifndef _WINDOWS
+   #include "l1sw.cfg"
+   #include "chipset.cfg"
+#endif
+
+#include "lls/lls_i.h"
+#include "lls/lls_api.h"
+
+#include "spi/spi_api.h"
+#include "rvf/rvf_api.h"
+
+
+/* Number of available equipment's */
+#define NUMBER_OF_EQUIPMENT 3
+
+/* Parameters for each EQUIPMENT */
+typedef struct
+{
+   T_LLS_EQUIPMENT  equipment_sort;
+   UINT16			page;
+   UINT16			address;
+   UINT8            bit;
+} T_EQUIPMENT_PARAM;
+
+/* Table of parameters for all the equipment's */
+typedef T_EQUIPMENT_PARAM T_EQUIPMENT_PARAM_TABLE[NUMBER_OF_EQUIPMENT];
+
+/* Definition of the parameters for the equipment */
+#if (ANLG_FAM == 2)
+   static T_EQUIPMENT_PARAM_TABLE equipment_param_table = 
+   {  {LLS_LED_A,         PAGE1, AUXLED,  0},
+      {LLS_BACKLIGHT,     PAGE1, AUXLED,  1},
+      {LLS_PRECHARGE_LED, PAGE0, BCICTL2, 5}
+   };
+#else
+   static T_EQUIPMENT_PARAM_TABLE equipment_param_table = {0};
+#endif
+
+/* Save of the action to perform */
+typedef struct
+{
+   T_LLS_EQUIPMENT   equipment_index;
+   UINT8             action;
+} T_ACTION;
+
+static T_ACTION action_to_perform = {0};
+
+/* Mutex used to protect perform only one action simultaneously */
+static T_RVF_MUTEX mutex;
+
+
+/**
+ * @name Functions implementation
+ *
+ */
+/*@{*/
+
+/**
+ * function: lls_initialize
+ */
+T_RV_RET lls_initialize(void)
+{
+   T_RV_RET ret = RV_OK;
+   UINT8 i;
+
+   /* Mutex initialization */
+   ret = rvf_initialize_mutex(&mutex);
+   if (ret != RVF_OK)
+      return RV_INTERNAL_ERR;
+
+   /* Initialisation of the equipment at SWITCH_OFF */
+   for (i = 0; i < NUMBER_OF_EQUIPMENT; i++)
+   {
+      ret = lls_switch_off(equipment_param_table[i].equipment_sort);
+      if (ret != RV_OK)
+         return RV_INTERNAL_ERR;
+   }
+
+   return RV_OK;
+}
+
+
+/**
+ * function: lls_kill_service
+ */
+T_RV_RET lls_kill_service(void)
+{
+   T_RV_RET ret = RV_OK;
+   ret = rvf_delete_mutex(&mutex);
+   if (ret != RVF_OK)
+      return RV_INTERNAL_ERR;
+
+   return ret;
+}
+
+
+/**
+ * function: lls_callback_equipment_status
+ */
+void lls_callback_equipment_status(UINT16* equipment_status)
+{
+   T_RV_RET ret = RV_OK;
+   UINT16 new_equipment_status = *equipment_status;
+
+   LLS_SEND_TRACE_PARAM("LLS: Received equipment status", (UINT32) new_equipment_status, RV_TRACE_LEVEL_DEBUG_LOW);
+
+   if (action_to_perform.action == SWITCH_ON)
+      new_equipment_status |= 1 << equipment_param_table[action_to_perform.equipment_index].bit;
+   else
+      new_equipment_status &= ~(1 << equipment_param_table[action_to_perform.equipment_index].bit);
+
+   LLS_SEND_TRACE_PARAM("LLS: New equipment status", (UINT32) new_equipment_status, RV_TRACE_LEVEL_DEBUG_LOW);
+
+   ret = spi_abb_write(equipment_param_table[action_to_perform.equipment_index].page,
+                 equipment_param_table[action_to_perform.equipment_index].address,
+                 new_equipment_status);
+
+   if (ret != RV_OK)
+      LLS_SEND_TRACE("LLS: Error on SPI read",  RV_TRACE_LEVEL_ERROR);
+
+
+   rvf_unlock_mutex(&mutex);
+}
+
+/**
+ * function: lls_manage_equipment
+ */
+T_RV_RET lls_manage_equipment(UINT8 equipment_index, UINT8 action)
+{
+   T_RV_RET ret = RV_OK;
+
+   /* Lock mutex until response from SPI is received */
+   rvf_lock_mutex(&mutex);
+
+   /* Save action to do */
+   action_to_perform.equipment_index = equipment_index;
+   action_to_perform.action = action;
+
+   ret = spi_abb_read(equipment_param_table[equipment_index].page,
+                equipment_param_table[equipment_index].address,
+                lls_callback_equipment_status);
+
+   if (ret != RV_OK)
+      LLS_SEND_TRACE("LLS: Error on SPI read",  RV_TRACE_LEVEL_ERROR);
+
+   return ret;
+}
+
+/**
+ * function: lls_search_index
+ */
+T_RV_RET lls_search_index(T_LLS_EQUIPMENT equipment, UINT8* equipment_index)
+{
+   T_RV_RET ret = RV_OK;
+   UINT8 i;
+
+   for (i = 0; i < NUMBER_OF_EQUIPMENT; i++)
+      if (equipment == equipment_param_table[i].equipment_sort)
+      {
+         *equipment_index = i;
+         return RV_OK;
+      }
+
+   return RV_INVALID_PARAMETER;
+}
+
+
+
+/*@}*/