Files
diplomarbeit/Tester/SW/Eclipse/Applications/remote/remote_relay.c
T
Matthias a0ccd623c6 Moved remotely
git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@110 9fe90eed-be63-e94b-8204-d34ff4c2ff93
2009-01-12 08:37:59 +00:00

222 lines
6.4 KiB
C

/* ---------------------------------------------------------------------------
* remote_relay.c (c) 2008 Micro-key bv
* ---------------------------------------------------------------------------
* Micro-key bv
* Industrieweg 28, 9804 TG Noordhorn
* Postbus 92, 9800 AB Zuidhorn
* The Netherlands
* Tel: +31 594 503020
* Fax: +31 594 505825
* Email: support@microkey.nl
* Web: www.microkey.nl
* ---------------------------------------------------------------------------
* Description:
* ---------------------------------------------------------------------------
* Version(s): 0.1, Dez 16, 2008, MMi
* Creation.
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* System include files
* ---------------------------------------------------------------------------
*/
#include "LPC23xx.h"
#include "types.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
/* ---------------------------------------------------------------------------
* Application include files
* ---------------------------------------------------------------------------
*/
#include "protocolfunctions.h"
#include "BusProtocol.h"
#include "SerOut.h"
#include "remote_relay.h"
/* ---------------------------------------------------------------------------
* Local constant and macro definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Global variable definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Local variable definitions
* ---------------------------------------------------------------------------
*/
BOOLEAN remoteRelayInitialised = FALSE;
/* ---------------------------------------------------------------------------
* Local function definitions
* ---------------------------------------------------------------------------
*/
void remoteRelayInit(void)
{
UINT32 loopcnt;
RESULT set_mb;
RESULT set_eb;
remoteRelayInitialised = TRUE;
sendString(SerOutPort, TRUE, importantMessage, NewLine,
"Initialise relay remote buffers...", Dummy);
for (loopcnt = 0; loopcnt < NUMBER_OF_TOTAL_RLY; loopcnt++)
{
remoteRelayInputs[loopcnt] = 0;
}
sendString(SerOutPort, FALSE, importantMessage, "Done", Dummy, Dummy);
vSemaphoreCreateBinary (remoteRelaySemaphore);
sendString (SerOutPort, TRUE, importantMessage,
"Take relay semaphore... ", Dummy, Dummy);
if (xSemaphoreTake(remoteRelaySemaphore, 0) == pdTRUE)
{
sendString (SerOutPort, FALSE, importantMessage,
"Done", Dummy, Dummy);
}
else
{
sendString (SerOutPort, FALSE, importantMessage,
"Failed", Dummy, Dummy);
}
sendString(SerOutPort, TRUE, importantMessage,
"reset remote relays...", Dummy, Dummy);
set_mb = remoteRelaySetAll (remoteDeviceNumber, relay_mb, FALSE);
set_eb = remoteRelaySetAll (remoteDeviceNumber, relay_eb, FALSE);
if ((set_mb == OK) && (set_eb == OK))
{
sendString(SerOutPort, FALSE, importantMessage, "Done", Dummy, Dummy);
}
else
{
sendString(SerOutPort, FALSE, importantMessage, "Failed", Dummy, Dummy);
}
}
RESULT remoteRelaySet (UINT8 device, UINT8 channel, BOOLEAN value)
{
INT32 sendArray[2];
RESULT returnValue;
if (remoteRelayInitialised == FALSE)
{
/* Remote digital driver is not initialised */
sendString (SerOutPort, TRUE, importantMessage,
"\t\trelay not intialised", Dummy, Dummy);
return (ERROR);
}
sendArray[0] = (INT32)channel;
sendArray[1] = (INT32)value;
bpSendCallRpc(handleBus1, device, 28, 2, sendArray);
if (xSemaphoreTake(remoteRelaySemaphore, 3000) != pdTRUE)
{
sendString (SerOutPort, TRUE, importantMessage,
s_tab, "relay set was not successful", Dummy);
returnValue = ERROR;
}
else
{
remoteRelayInputs[channel] = value;
returnValue = OK;
}
return (returnValue);
}
BOOLEAN remoteRelayRead (UINT8 device, UINT8 channel)
{
if (remoteRelayInitialised == FALSE)
{
/* Remote digital driver is not initialised */
sendString (SerOutPort, TRUE, importantMessage,
"\t\trelay not intialised", Dummy, Dummy);
return;
}
}
RESULT remoteRelaySetAll(UINT8 device, t_boardtype_relay board, BOOLEAN value)
{
INT32 sendArray[2];
UINT32 loopcnt = 0;
UINT32 loopend = 0;
RESULT returnValue;
if (remoteRelayInitialised == FALSE)
{
/* Remote digital driver is not initialised */
sendString (SerOutPort, TRUE, importantMessage,
"\t\trelay not intialised", Dummy, Dummy);
return (ERROR);
}
sendArray[0] = (INT32)board;
sendArray[1] = (INT32)value;
bpSendCallRpc(handleBus1, device, 29, 2, sendArray);
if (xSemaphoreTake(remoteRelaySemaphore, 3000) != pdTRUE)
{
sendString(SerOutPort, TRUE, importantMessage, s_tab,
"relay set was not successful", Dummy);
returnValue = ERROR;
}
else
{
switch (board)
{
case relay_mb:
loopcnt = 0;
loopend = NUMBER_OF_RLY_MB;
break;
case relay_eb:
loopcnt = NUMBER_OF_RLY_MB;
loopend = NUMBER_OF_TOTAL_RLY;
break;
}
for (loopcnt; loopcnt < loopend; loopcnt++)
{
remoteRelayInputs[loopcnt] = value;
}
returnValue = OK;
}
return (returnValue);
}
void remoteRelaySemaphoreRelease (UINT8 requestNr, UINT8 nrOfResults, UINT32 *results)
{
xSemaphoreGive (remoteRelaySemaphore);
}