t

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

Fork of DMSupport by Embedded Artists

Revision:
22:1a58a518435c
Child:
31:d47cffcb0a3e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Display/BiosDisplay.cpp	Fri Jan 16 11:13:39 2015 +0100
@@ -0,0 +1,188 @@
+/*
+ *  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.
+ */
+
+#include "mbed.h"
+#include "BiosDisplay.h"
+#include "BiosLoader.h"
+#include "DMBoard.h"
+#include "bios.h"
+
+
+/******************************************************************************
+ * Defines and typedefs
+ *****************************************************************************/
+ 
+
+/******************************************************************************
+ * Local variables
+ *****************************************************************************/
+
+
+/******************************************************************************
+ * Private Functions
+ *****************************************************************************/
+
+BiosDisplay::BiosDisplay() : 
+    _initialized(false),
+    _poweredOn(false),
+    _bios(NULL),
+    _biosData(NULL),
+    _width(0),
+    _height(0),
+    _bpp(0),
+    _supportedRes(0),
+    _activeRes(Res_16bit_rgb565),
+    _landscape(false)
+{
+}
+
+BiosDisplay::~BiosDisplay()
+{
+  // _bios and _biosData are deallocated by BiosLoader
+}
+
+
+/******************************************************************************
+ * Public Functions
+ *****************************************************************************/
+
+BiosDisplay::DisplayError BiosDisplay::init()
+{
+  DisplayError err = DisplayError_Ok;
+  if (!_initialized) {
+    do {
+      if (BiosLoader::instance().params(&_bios, &_biosData) != DMBoard::Ok) {
+        err = DisplayError_ConfigError;
+        break;
+      }
+      
+      err = (DisplayError)_bios->displayInit(_biosData);
+      if (err != DisplayError_Ok) {
+        break;
+      }
+
+      err = (DisplayError)_bios->displayInformation(_biosData, &_width, &_height, &_bpp, &_landscape, &_supportedRes, &_activeRes);
+      if (err != DisplayError_Ok) {
+        break;
+      }
+      
+      _initialized = true;
+    } while(0);
+  }
+  return err;
+}
+
+BiosDisplay::DisplayError BiosDisplay::powerUp(void* framebuffer, Display::Resolution wanted)
+{
+  DisplayError err = DisplayError_Ok;
+  if (!_poweredOn) {
+    err = init();
+    if (err == DisplayError_Ok) {
+      do {
+        err = (DisplayError)_bios->displayPowerUp(_biosData, framebuffer, (Resolution_t)wanted);
+          
+        if (err != DisplayError_Ok) {
+          break;
+        }
+
+        err = (DisplayError)_bios->displayInformation(_biosData, &_width, &_height, &_bpp, &_landscape, &_supportedRes, &_activeRes);     
+        if (err != DisplayError_Ok) {
+          break;
+        }
+        
+        _poweredOn = true;
+      } while(0);
+    }
+  }
+  return err;
+}
+
+BiosDisplay::DisplayError BiosDisplay::powerDown()
+{
+  DisplayError err = DisplayError_Ok;
+  if (_poweredOn) {
+    err = (DisplayError)_bios->displayPowerDown(_biosData);
+    _poweredOn = false;
+  }
+  return err;
+}
+
+BiosDisplay::DisplayError BiosDisplay::backlight(int percent)
+{
+  DisplayError err = DisplayError_Ok;
+  if (!_initialized) {
+      err = DisplayError_NoInit;
+  } else {
+    err = (DisplayError)_bios->displayBacklight(_biosData, percent);
+  }      
+  return err;
+}
+
+uint16_t BiosDisplay::width()
+{
+  return _width;
+}
+
+uint16_t BiosDisplay::height()
+{
+  return _height;
+}
+
+uint16_t BiosDisplay::bytesPerPixel()
+{
+  return _bpp;
+}
+
+uint32_t BiosDisplay::fbSize()
+{
+  return _width * _height * _bpp;
+}
+
+bool BiosDisplay::landscape()
+{
+  return _landscape;
+}
+
+void* BiosDisplay::allocateFramebuffer(Display::Resolution res)
+{
+  if (_initialized) {
+    return malloc(fbSize());
+  }
+  return NULL;
+}
+
+void BiosDisplay::setFramebuffer(void* buff)
+{
+  LPC_LCD->UPBASE = (uint32_t)buff;
+}
+
+void* BiosDisplay::swapFramebuffer(void* buff)
+{
+  uint32_t old = LPC_LCD->UPBASE;
+  LPC_LCD->UPBASE = (uint32_t)buff;
+  return (void*)old;
+}
+
+bool BiosDisplay::isSupported(Display::Resolution res)
+{
+  return (_supportedRes & res);
+}
+
+BiosDisplay::Resolution BiosDisplay::currentResolution()
+{
+  return (Resolution)_activeRes;
+}
+