158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_BRAILLE_DISPLAY_PRIVATE_BRLAPI_CONNECTION_H_ 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_BRAILLE_DISPLAY_PRIVATE_BRLAPI_CONNECTION_H_ 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/basictypes.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/callback_forward.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "library_loaders/libbrlapi.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace extensions { 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace api { 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace braille_display_private { 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// A connection to the brlapi server. See brlapi.h for more information 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// about the semantics of the methods in this class. 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class BrlapiConnection { 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef base::Closure OnDataReadyCallback; 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) enum ConnectResult { 240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CONNECT_ERROR_RETRY, 250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CONNECT_ERROR_NO_RETRY, 260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CONNECT_SUCCESS, 270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) }; 280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static scoped_ptr<BrlapiConnection> Create(LibBrlapiLoader* loader); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~BrlapiConnection(); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual ConnectResult Connect(const OnDataReadyCallback& onDataReady) = 0; 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void Disconnect() = 0; 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool Connected() = 0; 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Gets the last brlapi error on this thread. 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // This works ismilar to errno in C. There's one thread-local error 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // value, meaning that this method should be called after any 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // other method of this class that can return an error without calling 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // another method in between. This class is not thread safe. 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual brlapi_error_t* BrlapiError() = 0; 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Gets a description of the last brlapi error for this thread, useful 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // for logging. 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual std::string BrlapiStrError() = 0; 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Gets the total size of the display, which may be 0 if no display is 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // present, returning true on success. Note that this is cached in the 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // brlapi client so it is cheap. 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool GetDisplaySize(size_t* size) = 0; 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Sends the specified cells to the display. The array size must 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // be equal to what GetDisplaySize() last returned for this connection. 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool WriteDots(const unsigned char* cells) = 0; 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Reads the next keyboard command, returning true on success. 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Returns < 0 on error, 0 if no more keys are pending and > 0 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // on success, in which case keyCode will be set to the key command 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // value. 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual int ReadKey(brlapi_keyCode_t* keyCode) = 0; 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BrlapiConnection(); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrlapiConnection); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace braille_display_private 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace api 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace extensions 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_BRAILLE_DISPLAY_PRIVATE_BRLAPI_CONNECTION_H_ 75