*/
#include "rpp/rpp.h"
+#include "rpp/mutex.h"
-#if rppCONFIG_INCLUDE_IRC == 1
+RPP_MUTEX_DEFINE(mutex_irc);
-#if rppCONFIG_DRV == 1
-#include "sys/ti_drv_het2.h"
-#include "sys/sys_pinmux.h"
+#ifndef FREERTOS_POSIX
+#include "sys/sys.h"
+#else
+#define setMuxForIRC(a, b)
+#define ircEnable(a)
+#define ircDisable(a)
#endif
static boolean_t initialized = FALSE;
+static boolean_t rpp_irc_enabled[2] = {FALSE, FALSE};
-boolean_t rpp_irc1_enabled = FALSE;
-boolean_t rpp_irc2_enabled = FALSE;
-
-int8_t rpp_irc_init() {
+int8_t rpp_irc_init()
+{
- if (initialized) {
- return FAILURE;
- }
+ if (initialized)
+ return FAILURE;
+ if (!RPP_MUTEX_INIT(mutex_irc))
+ return FAILURE;
-#if rppCONFIG_DRV == 1
- het2Init();
+#ifndef FREERTOS_POSIX
+ het2Init();
#endif
- initialized = TRUE;
- return SUCCESS;
+ initialized = TRUE;
+ return SUCCESS;
}
-int8_t rpp_irc_enable(uint8_t irc) {
+int8_t rpp_irc_enable(uint8_t irc)
+{
- if (!initialized)
- return FAILURE;
+ if (!initialized)
+ return FAILURE;
- if (irc < 1 || irc > 2)
- return -RPP_EINVAL;
+ if (irc < 1 || irc > 2)
+ return -RPP_EINVAL;
- switch (irc) {
- case 1:
- rpp_irc1_enabled = TRUE;
- break;
- case 2:
- rpp_irc2_enabled = TRUE;
- break;
- }
+ RPP_MUTEX_LOCK(mutex_irc);
+ rpp_irc_enabled[irc-1] = TRUE;
- setMuxForIRC(irc, TRUE);
- ircEnable(irc);
+ setMuxForIRC(irc, TRUE);
+ ircEnable(irc);
+ RPP_MUTEX_UNLOCK(mutex_irc);
- return SUCCESS;
+ return SUCCESS;
}
-int8_t rpp_irc_status(uint8_t irc) {
+int8_t rpp_irc_status(uint8_t irc)
+{
- if (!initialized)
- return FAILURE;
+ if (!initialized)
+ return FAILURE;
- if (irc < 1 || irc > 2)
- return -RPP_EINVAL;
+ if (irc < 1 || irc > 2)
+ return -RPP_EINVAL;
- switch (irc) {
- case 1:
- return rpp_irc1_enabled ? 1 : 0;
- case 2:
- return rpp_irc2_enabled ? 1 : 0;
- }
- return FAILURE;
+ RPP_MUTEX_LOCK(mutex_irc);
+ boolean_t ret_val = rpp_irc_enabled[irc-1];
+ RPP_MUTEX_UNLOCK(mutex_irc);
+
+ return ret_val;
}
-int32_t rpp_irc_get(uint8_t irc) {
+int32_t rpp_irc_get(uint8_t irc)
+{
- if (!initialized)
- return FAILURE;
+ if (!initialized)
+ return FAILURE;
- if (irc < 1 || irc > 2)
- return 0;
+ if (irc < 1 || irc > 2)
+ return 0;
- if (rpp_irc_status(irc) != 1)
- return FAILURE;
+ if (rpp_irc_status(irc) != 1)
+ return FAILURE;
-#if rppCONFIG_DRV == 1
- return ircGet(irc);
+#ifndef FREERTOS_POSIX
+ RPP_MUTEX_LOCK(mutex_irc);
+ int32_t ret_val = ircGet(irc);
+ RPP_MUTEX_UNLOCK(mutex_irc);
+ return ret_val;
#else
- return 1;
+ return 1;
#endif
}
-int8_t rpp_irc_disable(uint8_t irc) {
+int8_t rpp_irc_disable(uint8_t irc)
+{
- if (!initialized)
- return FAILURE;
+ if (!initialized)
+ return FAILURE;
- if (irc < 1 || irc > 2)
- return -RPP_EINVAL;
+ if (irc < 1 || irc > 2)
+ return -RPP_EINVAL;
- if (rpp_irc_status(irc) != 1)
- return FAILURE;
+ if (rpp_irc_status(irc) != 1)
+ return FAILURE;
- ircDisable(irc);
- setMuxForIRC(irc, FALSE);
- switch (irc) {
- case 1:
- rpp_irc1_enabled = FALSE;
- break;
- case 2:
- rpp_irc2_enabled = FALSE;
- break;
- }
- return FAILURE;
+ RPP_MUTEX_LOCK(mutex_irc);
+ ircDisable(irc);
+ setMuxForIRC(irc, FALSE);
+ rpp_irc_enabled[irc-1] = FALSE;
+ RPP_MUTEX_UNLOCK(mutex_irc);
+ return SUCCESS;
}
-
-#endif /* rppCONFIG_INCLUDE_IRC */