DisplayAPP_Base

Dependents:   GR-Boads_Camera_DisplayApp_base GR-Boads_Camera_DisplayApp_base DisplayApp LED01

DisplayApp.h

Committer:
dkato
Date:
2016-09-15
Revision:
0:13c1f522bbef
Child:
2:b7ffe5216cd7

File content as of revision 0:13c1f522bbef:

/**************************************************************************//**
* @file          DisplayApp.h
* @brief         DisplayApp API
******************************************************************************/

#ifndef DISPLAY_APP_H
#define DISPLAY_APP_H

#include "mbed.h"
#include "rtos.h"
#include "USBSerial.h"

/** A class to communicate a DisplayApp
 *
 */
class DisplayApp {
public:
    /** Touch position structure */
    typedef struct {
        uint32_t x;      /**< The position of the x-coordinate. */
        uint32_t y;      /**< The position of the y-coordinate. */
        bool     valid;  /**< Whether a valid data.. */
    } touch_pos_t;

    /** Constructor: Initializes DisplayApp.
     *
     */
    DisplayApp();

    /** Send RGB888 data
     *
     * @param buf data buffer address
     * @param pic_width picture width
     * @param pic_height picture height
     * @return send data size
     */
    int SendRgb888(uint8_t * buf, uint32_t pic_width, uint32_t pic_height);

    /** Send JPEG data
     *
     * @param buf data buffer address
     * @param size data size
     * @return send data size
     */
    int SendJpeg(uint8_t * buf, uint32_t size);

    /** Attach a function to call when touch panel int
     *
     *  @param fptr A pointer to a void function, or 0 to set as none
     */
    void SetCallback(void (*fptr)(void)) {
        if(fptr != NULL) {
            event.attach(fptr);
        }
    }
    /** Attach a member function to call when touch panel int
     *
     *  @param tptr pointer to the object to call the member function on
     *  @param mptr pointer to the member function to be called
     */
    template<typename T>
    void SetCallback(T* tptr, void (T::*mptr)(void)) {
        if((mptr != NULL) && (tptr != NULL)) {
            event.attach(tptr, mptr);
        }
    }
    /** Get the maximum number of simultaneous touches 
     * 
     * @return The maximum number of simultaneous touches.
     */
    int GetMaxTouchNum(void);

   /** Get the coordinates
     *
     * @param touch_buff_num The number of structure p_touch.
     * @param p_touch Touch position information.
     * @return The number of touch points.
     */
    int GetCoordinates(int touch_buff_num, touch_pos_t * p_touch);

private:
    typedef enum {
        POS_SEQ_INIT,
        POS_SEQ_START,
        POS_SEQ_X,
        POS_SEQ_X_POS,
        POS_SEQ_X_M,
        POS_SEQ_C,
        POS_SEQ_Y,
        POS_SEQ_Y_POS,
        POS_SEQ_Y_M,
        POS_SEQ_END,
    } pos_seq_t;

    Thread displayThread;
    USBSerial * pPcApp;
    pos_seq_t pos_seq;
    int pos_x;
    int pos_y;
    FunctionPointer event;

    void touch_int_callback(void);
    void display_app_process();
    static void display_app_process_static(void const * arg);
    void SendHeader(uint32_t size);
    void SendData(uint8_t * buf, uint32_t size);
};
#endif