sl@2: #include "minidisplay.h" sl@5: #include sl@9: #include sl@9: sl@9: const int KMaxReadAttempt=100; sl@2: sl@2: MiniDisplay::MiniDisplay(QQuickItem *parent): sl@10: QQuickItem(parent),iReadAttempt(0),iBrightness(0) sl@2: { sl@2: // By default, QQuickItem does not draw anything. If you subclass sl@2: // QQuickItem to create a visual item, you will need to uncomment the sl@2: // following line and re-implement updatePaintNode() sl@2: sl@2: // setFlag(ItemHasContents, true); sl@3: // sl@4: //qDebug() << "New MiniDisplay"; sl@2: } sl@2: sl@2: MiniDisplay::~MiniDisplay() sl@2: { sl@4: //qDebug() << "Delete MiniDisplay"; sl@11: close(); sl@2: } sl@2: sl@4: sl@4: void MiniDisplay::open() sl@4: { sl@4: if (iDisplay.Open()) sl@4: { sl@10: iDisplay.SetBrightness(iBrightness); sl@5: emit opened(); sl@5: emit statusChanged(); sl@4: } sl@4: else sl@4: { sl@5: emit openError(); sl@4: } sl@4: } sl@4: sl@4: sl@4: void MiniDisplay::close() sl@4: { sl@11: //qDebug() << "MiniDisplay::close"; sl@11: //Try to put back ourframe position to RAM 0,0 which is a multiple of 128 sl@11: if (iDisplay.IsOpen()) sl@11: { sl@11: emit closing(); sl@11: sl@11: if (iDisplay.DisplayPositionY()%128!=0) sl@11: { sl@11: //qDebug() << "SwapBuffer to put back our frame position to zero " << iDisplay.DisplayPositionY(); sl@11: iDisplay.SwapBuffers(); sl@11: } sl@11: } sl@4: iDisplay.Close(); sl@5: emit closed(); sl@5: emit statusChanged(); sl@4: } sl@4: sl@4: bool MiniDisplay::isOpen() sl@4: { sl@4: return iDisplay.IsOpen(); sl@4: } sl@4: sl@4: void MiniDisplay::clear() sl@4: { sl@4: if (!iDisplay.IsOpen()) return; sl@4: // sl@4: iDisplay.Clear(); sl@4: } sl@4: sl@4: void MiniDisplay::fill() sl@4: { sl@4: if (!iDisplay.IsOpen()) return; sl@4: // sl@4: iDisplay.SetAllPixels(0xFF); sl@4: } sl@4: sl@4: void MiniDisplay::swapBuffers() sl@4: { sl@4: if (!iDisplay.IsOpen()) return; sl@4: // sl@4: iDisplay.SwapBuffers(); sl@4: } sl@5: sl@9: void MiniDisplay::requestPowerStatus() sl@9: { sl@9: if (!iDisplay.IsOpen()) return; sl@9: sl@9: iDisplay.RequestPowerSupplyStatus(); sl@9: QTimer::singleShot(4, this, SLOT(readTimer())); sl@9: iReadAttempt=0; sl@9: } sl@9: sl@9: void MiniDisplay::requestDeviceId() sl@9: { sl@9: if (!iDisplay.IsOpen()) return; sl@9: sl@9: iDisplay.RequestDeviceId(); sl@9: QTimer::singleShot(4, this, SLOT(readTimer())); sl@9: iReadAttempt=0; sl@9: } sl@9: sl@9: void MiniDisplay::requestFirmwareVersion() sl@9: { sl@9: if (!iDisplay.IsOpen()) return; sl@9: sl@9: iDisplay.RequestFirmwareRevision(); sl@9: QTimer::singleShot(4, this, SLOT(readTimer())); sl@9: iReadAttempt=0; sl@9: } sl@9: sl@9: sl@9: sl@5: /** sl@5: * @brief setFont sl@5: * @param aFont sl@5: */ sl@5: void MiniDisplay::setFont(const QFont& aFont) sl@5: { sl@5: iFont=aFont; sl@6: iFont.setStyleStrategy(QFont::NoAntialias); sl@5: QString strDemo="0123456789ABCDEF"; sl@5: QFontMetrics metrics(iFont); sl@6: int w=metrics.width(strDemo); sl@6: int h=metrics.height(); sl@6: QSize size(w,h); sl@5: QImage image(size,QImage::Format_Mono); sl@5: image.fill(0xFFFFFFFF); sl@6: //Draw some text into our image sl@5: { sl@5: QPainter painter(&image); sl@5: //painter.begin(&image); sl@5: painter.setPen(0xFF000000); sl@5: painter.setFont(iFont); sl@5: painter.drawText(0,metrics.ascent(),strDemo); sl@5: } sl@6: //Save image as PNG for validation sl@5: image.save("font.png"); sl@6: // sl@6: //int sizeInBytes=image.byteCount(); sl@6: int pixelCount=w*h; sl@6: BitArray bits(pixelCount); sl@6: sl@6: for (int i=0;i