/* ---------------------------------------------------------------------------
 * test_leds.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: remote LED test sequence
 * ---------------------------------------------------------------------------
 * 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_analogue.h"
#include "remote_digital.h"
#include "remote_relay.h"
#include "dio.h"

/* ---------------------------------------------------------------------------
 * Local constant and macro definitions
 * ---------------------------------------------------------------------------
 */

/* ---------------------------------------------------------------------------
 * Global variable definitions
 * ---------------------------------------------------------------------------
 */

/* ---------------------------------------------------------------------------
 * Local variable definitions
 * ---------------------------------------------------------------------------
 */

 
/* ---------------------------------------------------------------------------
 * Local function definitions
 * ---------------------------------------------------------------------------
 */

BOOLEAN remoteLEDTestMBexecute (void)
{
    UINT32 loopcnt;
    UINT8 buffer;
    BOOLEAN ledTest = TRUE;
    BOOLEAN receive = FALSE;
    
    
    /* Drive LEDs to status ON                                              */
    sendString (SerOutPort, GotoNewLine, testMessage,
            "Set local digital outputs to HIGH... ", Dummy, Dummy);
    /* Set digital input LEDs to ON                                         */
    for (loopcnt = 0; loopcnt < maxDO_Channels; loopcnt++)
        {
        dioWrite(thisDeviceNumber, loopcnt, TRUE);
        }
    sendString (SerOutPort, FALSE, testMessage,
            "Done", Dummy, Dummy);
    
    /* Set remote digital output LEDs to on                                 */
    sendString (SerOutPort, GotoNewLine, testMessage,
            "Set remote digital outputs to HIGH... ", Dummy, Dummy);
    if (remoteDioWriteAll(remoteDeviceNumber, digital_mb, TRUE) == OK)
        {
        sendString (SerOutPort, FALSE, testMessage,
                "Done", Dummy, Dummy);
        }
    else
        {
        sendString (SerOutPort, FALSE, testMessage,
                "Failed", Dummy, Dummy);
        }
    
    /* Set remote relay througput LEDs to on                                */
    sendString (SerOutPort, GotoNewLine, testMessage,
            "Set remote relay outputs to HIGH... ", Dummy, Dummy);
    if (remoteRelaySetAll(remoteDeviceNumber, relay_mb, TRUE) == OK)
        {
        sendString (SerOutPort, FALSE, testMessage,
                "Done", Dummy, Dummy);
        }
    else
        {
        sendString (SerOutPort, FALSE, testMessage,
                "Failed", Dummy, Dummy);
        }      
    
    
    
    
    sendString (SerOutPort, TRUE, noteMessage,
                "\tAre all LEDs turned on? ", 
            "\n\r\tPRESS y (YES) oder n (NO): ", 
            NewLine);
    
    do                                  /* do-while loop for String input   */
        {
            receive = serGet(SerOutPort, &buffer);
    
        } while ((buffer != 121) && (buffer != 110));
    
    if (buffer == 121)                  /* 121 = y (ScanCode)               */
        {
        sendString (SerOutPort, TRUE, noteMessage,
                "All LEDs working", Dummy, Dummy);
        ledTest = TRUE;
        }
    else if (buffer == 110)             /* 110 = n (ScanCode)               */
        {
        sendString (SerOutPort, TRUE, noteMessage,
                "LEDs broken", Dummy, Dummy);
        ledTest = FALSE;
        }
    
    // \TODO CALCULATE RESULT
}
