t

Dependencies:   DM_FATFileSystem DM_HttpServer DM_USBHost EthernetInterface USBDevice mbed-rpc mbed-rtos

Fork of DMSupport by Embedded Artists

DMBoard.h

Committer:
embeddedartists
Date:
2014-12-02
Revision:
2:887c6b45e7fa
Parent:
0:6b68dac0d986
Child:
3:2fa7755f2cef

File content as of revision 2:887c6b45e7fa:

/*
 *  Copyright 2014 Embedded Artists AB
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

#ifndef DMBOARD_H
#define DMBOARD_H

#include "mbed.h"
#include "dm_board_config.h"
#include "RtosLog.h"

#if defined(DM_BOARD_USE_MCI_FS)
  #include "MCIFileSystem.h"
#endif
#if defined(DM_BOARD_USE_QSPI_FS)
  #include "QSPIFileSystem.h"
#elif defined(DM_BOARD_USE_QSPI)
  #include "SPIFI.h"
#endif
#if defined(DM_BOARD_USE_DISPLAY)
  #include "Display.h"
#endif
#if defined(DM_BOARD_USE_TOUCH)
  #include "TouchPanel.h"
#endif

/**
 * Example of using the Board class:
 *
 * @code
 * #include "mbed.h"
 * #include "DMBoard.h"
 *
 * int main(void) {
 *    DMBoard* board = &DMBoard::instance();
 *    board->init();
 *    ...
 *    board->setLed(1, true);
 * }
 * @endcode
 */
class DMBoard {
public:
    enum Leds {
        Led1,
        Led2,
        Led3,
        Led4,
    };
  
    enum BoardError {
        Ok            =       0,
        MemoryError   =       1,
        SpifiError    =       1,
        DisplayError  =       2,
        TouchError    =       3,
    };
    
    static DMBoard& instance()
    {
        static DMBoard singleton;
        return singleton;
    }
  

    /** Initializes the wanted features
     *
     *  @returns
     *       Ok on success
     *       An error code on failure
     */
    BoardError init();
  
    void setLED(Leds led, bool on);
    void buzzer(float value);
    bool buttonPressed();
    
#if defined(DM_BOARD_USE_TOUCH)
    TouchPanel* touchPanel() { return _touch; }
#endif
#if defined(DM_BOARD_USE_DISPLAY)
    Display* display() { return &(Display::instance()); }

    friend class Display;
#endif
    RtosLog* logger() { return &_logger; }

private:

    bool _initialized;

#if defined(DM_BOARD_USE_MCI_FS)
    MCIFileSystem _mcifs;
#endif
#if defined(DM_BOARD_USE_QSPI_FS)
    QSPIFileSystem _qspifs;
#endif
#if defined(DM_BOARD_USE_TOUCH)
    TouchPanel* _touch;
#endif

    PwmOut _buzzer;
    DigitalIn _button;
    DigitalOut _led1;
    DigitalOut _led2;
    DigitalOut _led3;
    DigitalOut _led4;

    RtosLog _logger;

    explicit DMBoard();
    // hide copy constructor
    DMBoard(const DMBoard&);
    // hide assign operator
    DMBoard& operator=(const DMBoard&);
    ~DMBoard();
    
    BoardError readConfiguration();
#if defined(DM_BOARD_USE_DISPLAY)
    BoardError readDisplayConfiguration(uint8_t** data, uint32_t* size);
#endif
};

#endif