<?php

if (!extension_loaded('gd')) {
    echo "Required gd extension is not available\n";
    exit;
}

require_once('Tinkerforge/IPConnection.php');
require_once('Tinkerforge/BrickletEPaper296x128.php');

use Tinkerforge\IPConnection;
use Tinkerforge\BrickletEPaper296x128;

const HOST = 'localhost';
const PORT = 4223;
const UID = 'XYZ'; // Change XYZ to the UID of your E-Paper 296x128 Bricklet
const WIDTH = 296; // Columns
const HEIGHT = 128; // Rows

// Convert GD Image to matching color bool array
function boolArrayFromImage($image, $r, $g, $b)
{
    $pixels = array();

    // Convert image pixels into 8bit pages
    for ($row = 0; $row < HEIGHT; $row++)
    {
        for ($column = 0; $column < WIDTH; $column++)
        {
            $index = imagecolorat($image, $column, $row);
			$color = imagecolorsforindex($image, $index);
	        $pixels[$row*WIDTH + $column] = (($color['red'] == $r) && ($color['green'] == $g) && ($color['blue'] == $b));
        }
    }
    
	return $pixels;
}

$ipcon = new IPConnection(); // Create IP connection
$epaper = new BrickletEPaper296x128(UID, $ipcon); // Create device object

$ipcon->connect(HOST, PORT); // Connect to brickd
// Don't use device before ipcon is connected

// Download example image here:
// https://raw.githubusercontent.com/Tinkerforge/e-paper-296x128-bricklet/master/software/examples/tf_red.png
$image = imagecreatefrompng('tf_red.png');

// Get black/white pixels from image and write them to the Bricklet buffer
$pixelsBW = boolArrayFromImage($image, 0xFF, 0xFF, 0xFF);
$epaper->writeBlackWhite(0, 0, WIDTH-1, HEIGHT-1, $pixelsBW);

// Get red pixels from image and write them to the Bricklet buffer
$pixelsRed = boolArrayFromImage($image, 0xFF, 0, 0);
$epaper->writeColor(0, 0, WIDTH-1, HEIGHT-1, $pixelsRed);

// Draw buffered values to the display
$epaper->draw();

echo "Press ctrl+c to exit\n";

?>