Sample program for communicating with Fujitsuu IoT Platform using HTTP

Dependencies:   AsciiFont GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP USBHost_custom easy-connect-gr-peach mbed-http picojson BM1383GLV KX022 rohm-sensor-hal rohm-bh1745

Overview

This sample program shows how to send the cognitive data and sensing data gathered by Omron HVC-P2 and Rohm Sensor Shield respectively to IoT Platform managed by FUJITSU ( http://jp.fujitsu.com/solutions/cloud/k5/function/paas/iot-platform/ ).

Required Hardware

Application Setup

  1. Configure the connection type. For details, please refer to the following link:
    https://developer.mbed.org/teams/Renesas/code/GR-PEACH_IoT_Platform_HTTP_sample/wiki/Connection-Type
  2. Configure Ethernet settings. For details, please refer to the following link:
    https://developer.mbed.org/teams/Renesas/code/GR-PEACH_IoT_Platform_HTTP_sample/wiki/Ethernet-settings
  3. Set up the Access Code of resource where the gathered data would be stored. For details on Access Code, please refer to the following links:
    https://iot-docs.jp-east-1.paas.cloud.global.fujitsu.com/en/manual/userguide_en.pdf
    https://iot-docs.jp-east-1.paas.cloud.global.fujitsu.com/en/manual/apireference_en.pdf
    https://iot-docs.jp-east-1.paas.cloud.global.fujitsu.com/en/manual/portalmanual_en.pdf
  4. Set up URI for the resource where the gathered data would be stored. For details, please refer to the following link:
    https://iot-docs.jp-east-1.paas.cloud.global.fujitsu.com/en/manual/userguide_en.pdf
    https://iot-docs.jp-east-1.paas.cloud.global.fujitsu.com/en/manual/apireference_en.pdf

Building Example

  1. Import this sample program onto mbed Compiler
  2. Configure the program in accordance with the description of Application Setup above
  3. Compile the sample program
  4. Plug the Ethernet cable into GR-PEACH if you would like Ethernet mode
  5. Plug micro-USB cable into the OpenSDA port which lies on the next to the RESET button
  6. Copy the binary previously downloaded to your PC to GR-PEACH in order to flash this program. When the copy is successfully completed, the drive named MBED should be re-mounted automatically
  7. Press the RESET button on the board to run the sample application

Data Format sent to IoT Platform

In this sample program, the cognitive data and sensing data are serialized into the following JSON format using picojson (https://developer.mbed.org/users/mimil/code/picojson/):

  • Face detection data

{
    "RecordType": "HVC-P2(face)",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "Age": xxx,
    "FaceRectangle": {
        "Height": xxx,
        "Left": xxx,
        "Top": xxx,
        "Width": xxx
    },
    "Gender": xxx,
    "Scores": {
        "Anger": xxx,
        "Happiness": xxx,
        "Neutral": xxx,
        "Sadness": xxx,
        "Surprise": xxx
    }
}
  • Body detection data

{
    "RecodeType": "HVC-P2(body)",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "BodyRectangle": {
        "Height": xxx,
        "Left": xxx,
        "Top": xxx,
        "Width": xxx
    }
}
  • Accelerometer data

{
    "RecodeType": "Accelerometer",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "data": [ acceleratoin(x-direction), acceleration(y-direction), acceleration(z-direction), null, null, null ]
}

Note that data[0], data[1] and data[2] are filled with the acceleration data in x, y and z direction respectively, and the remaining elements are filled with null.

  • Atmosphere data

{
    "RecodeType": "Atmosphere",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "data": [ atmosphere data, null, null, null, null, null ]
}

Note that data[0] is filled with atmosphere data, and the remaining elements are filled with null.

  • Color sensor data

{
    "RecodeType": "Color",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "data": [ Red, Green, Blue, Alpha, null, null]
}

Note that data[0], data[1], data[2] and data[3] are filled with Red, Green, Blue and Alpha elements of color respectively, and the remaining elements are filled with null.

  • Temperature data

{
    "RecodeType": "Temperature",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "data": [ Temperature, null, null, null, null, null ]
}

Note that data[0] is filled with temperature data, the remaining elements are filled with null.

  • Geomagnetism

{
    "RecodeType": "Geomagnetism",
    "id": "<GR-PEACH ID>-<Sensor ID>",
    "data": [ geomagnetism(x-direction), geomagnetism(y-direction), geomagnetism(z-direction), null, null, null]
}

Note that data[0], data[1] and data[2] are filled with the geomagnetism data in x, y and z direction respectively, and the remaining elements are filled with null.

Committer:
Osamu Nakamura
Date:
Thu Apr 12 19:04:23 2018 +0900
Revision:
7:9ae73f85dc04
Parent:
0:8373b6833bde
Update BM1422AGMV driver so that it can be compiled by ARMCC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Osamu Nakamura 0:8373b6833bde 1 #include "mbed.h"
Osamu Nakamura 0:8373b6833bde 2 #include "DisplayBace.h"
Osamu Nakamura 0:8373b6833bde 3 #include "rtos.h"
Osamu Nakamura 0:8373b6833bde 4 #include "LCD_shield_config_4_3inch.h"
Osamu Nakamura 0:8373b6833bde 5 #include "RGA.h"
Osamu Nakamura 0:8373b6833bde 6 #include "BinaryImage_RZ_A1H.h"
Osamu Nakamura 0:8373b6833bde 7 #include "recognition_proc.h"
Osamu Nakamura 0:8373b6833bde 8
Osamu Nakamura 0:8373b6833bde 9 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
Osamu Nakamura 0:8373b6833bde 10 in accordance with the frame buffer burst transfer mode. */
Osamu Nakamura 0:8373b6833bde 11 /* TOUCH BUFFER Parameter GRAPHICS_LAYER_2 */
Osamu Nakamura 0:8373b6833bde 12 #define TOUCH_BUFFER_BYTE_PER_PIXEL (4u)
Osamu Nakamura 0:8373b6833bde 13 #define TOUCH_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * TOUCH_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
Osamu Nakamura 0:8373b6833bde 14
Osamu Nakamura 0:8373b6833bde 15 /* Disp mode */
Osamu Nakamura 0:8373b6833bde 16 #define DISP_MODE_NORMAL (0)
Osamu Nakamura 0:8373b6833bde 17 #define DISP_MODE_SETTING_1 (1)
Osamu Nakamura 0:8373b6833bde 18 #define DISP_MODE_SETTING_2 (2)
Osamu Nakamura 0:8373b6833bde 19 #define DISP_MODE_SETTING_3 (3)
Osamu Nakamura 0:8373b6833bde 20
Osamu Nakamura 0:8373b6833bde 21 /* Setting range */
Osamu Nakamura 0:8373b6833bde 22 #define THRESHOLD_MIN (1)
Osamu Nakamura 0:8373b6833bde 23 #define THRESHOLD_MAX (1000)
Osamu Nakamura 0:8373b6833bde 24 #define SIZE_RANGE_MIN (20)
Osamu Nakamura 0:8373b6833bde 25 #define SIZE_RANGE_MAX (1000)
Osamu Nakamura 0:8373b6833bde 26 #define POSE_MIN (0)
Osamu Nakamura 0:8373b6833bde 27 #define POSE_MAX (2)
Osamu Nakamura 0:8373b6833bde 28 #define ANGLE_MIN (0)
Osamu Nakamura 0:8373b6833bde 29 #define ANGLE_MAX (1)
Osamu Nakamura 0:8373b6833bde 30
Osamu Nakamura 0:8373b6833bde 31 /* slide bar */
Osamu Nakamura 0:8373b6833bde 32 #define POS_SLIDE_BAR_X (185)
Osamu Nakamura 0:8373b6833bde 33 #define SLIDE_BAR_LENGTH (200)
Osamu Nakamura 0:8373b6833bde 34 #define POS_PROGRESS_0_X (POS_SLIDE_BAR_X + 15)
Osamu Nakamura 0:8373b6833bde 35
Osamu Nakamura 0:8373b6833bde 36 /* func_code */
Osamu Nakamura 0:8373b6833bde 37 #define TOUCH_KEY_CLOSE (1)
Osamu Nakamura 0:8373b6833bde 38 #define TOUCH_KEY_SETTING_1 (2)
Osamu Nakamura 0:8373b6833bde 39 #define TOUCH_KEY_SETTING_2 (3)
Osamu Nakamura 0:8373b6833bde 40 #define TOUCH_KEY_SETTING_3 (4)
Osamu Nakamura 0:8373b6833bde 41 #define TOUCH_KEY_REGISTRATION (5)
Osamu Nakamura 0:8373b6833bde 42 #define TOUCH_KEY_THRESHOLD_BODY (6)
Osamu Nakamura 0:8373b6833bde 43 #define TOUCH_KEY_THRESHOLD_FACE (7)
Osamu Nakamura 0:8373b6833bde 44 #define TOUCH_KEY_THRESHOLD_RECO (8)
Osamu Nakamura 0:8373b6833bde 45 #define TOUCH_KEY_RANGE_BODY_MIN (9)
Osamu Nakamura 0:8373b6833bde 46 #define TOUCH_KEY_RANGE_BODY_MAX (10)
Osamu Nakamura 0:8373b6833bde 47 #define TOUCH_KEY_RANGE_FACE_MIN (11)
Osamu Nakamura 0:8373b6833bde 48 #define TOUCH_KEY_RANGE_FACE_MAX (12)
Osamu Nakamura 0:8373b6833bde 49 #define TOUCH_KEY_FACE_POSE (13)
Osamu Nakamura 0:8373b6833bde 50 #define TOUCH_KEY_FACE_ANGLE (14)
Osamu Nakamura 0:8373b6833bde 51 #define TOUCH_KEY_BODY_DETECTION (15)
Osamu Nakamura 0:8373b6833bde 52 #define TOUCH_KEY_FACE_DETECTION (16)
Osamu Nakamura 0:8373b6833bde 53 #define TOUCH_KEY_AGE_ESTIMATION (17)
Osamu Nakamura 0:8373b6833bde 54 #define TOUCH_KEY_GENDER_ESTIMATION (18)
Osamu Nakamura 0:8373b6833bde 55 #define TOUCH_KEY_EXPRESSION_ESTIMATION (19)
Osamu Nakamura 0:8373b6833bde 56 #define TOUCH_KEY_SETTING_LAST (20)
Osamu Nakamura 0:8373b6833bde 57 #define TOUCH_KEY_RESET_SETTING (21)
Osamu Nakamura 0:8373b6833bde 58
Osamu Nakamura 0:8373b6833bde 59 typedef struct {
Osamu Nakamura 0:8373b6833bde 60 uint32_t pic_pos_x; /* X position of the key picture. */
Osamu Nakamura 0:8373b6833bde 61 uint32_t pic_pos_y; /* Y position of the key picture. */
Osamu Nakamura 0:8373b6833bde 62 uint32_t pic_width; /* Width of the key picture. */
Osamu Nakamura 0:8373b6833bde 63 uint32_t pic_height; /* Height of the key picture. */
Osamu Nakamura 0:8373b6833bde 64 uint32_t func_code; /* func code of the key picture. */
Osamu Nakamura 0:8373b6833bde 65 } key_pic_info_t;
Osamu Nakamura 0:8373b6833bde 66
Osamu Nakamura 0:8373b6833bde 67 static const key_pic_info_t touch_key_tbl_normal[] = {
Osamu Nakamura 0:8373b6833bde 68 /* X Y Width Height Func code */
Osamu Nakamura 0:8373b6833bde 69 { 330, 10, 140, 36, TOUCH_KEY_BODY_DETECTION },
Osamu Nakamura 0:8373b6833bde 70 { 330, 56, 140, 36, TOUCH_KEY_FACE_DETECTION },
Osamu Nakamura 0:8373b6833bde 71 { 330, 102, 140, 36, TOUCH_KEY_AGE_ESTIMATION },
Osamu Nakamura 0:8373b6833bde 72 { 330, 148, 140, 36, TOUCH_KEY_GENDER_ESTIMATION },
Osamu Nakamura 0:8373b6833bde 73 { 330, 194, 140, 36, TOUCH_KEY_EXPRESSION_ESTIMATION },
Osamu Nakamura 0:8373b6833bde 74 { 448, 240, 32, 32, TOUCH_KEY_SETTING_LAST },
Osamu Nakamura 0:8373b6833bde 75 { 0, 0, 320, 240, TOUCH_KEY_REGISTRATION },
Osamu Nakamura 0:8373b6833bde 76 { 0, 0, 0, 0, 0 } /* table end */
Osamu Nakamura 0:8373b6833bde 77 };
Osamu Nakamura 0:8373b6833bde 78
Osamu Nakamura 0:8373b6833bde 79 static const key_pic_info_t touch_key_tbl_setting_1[] = {
Osamu Nakamura 0:8373b6833bde 80 /* X Y Width Height Func code */
Osamu Nakamura 0:8373b6833bde 81 { 127, 220, 80, 34, TOUCH_KEY_RESET_SETTING },
Osamu Nakamura 0:8373b6833bde 82 { 273, 220, 80, 34, TOUCH_KEY_CLOSE },
Osamu Nakamura 0:8373b6833bde 83 { 21, 20, 146, 34, TOUCH_KEY_SETTING_1 },
Osamu Nakamura 0:8373b6833bde 84 { 167, 20, 146, 34, TOUCH_KEY_SETTING_2 },
Osamu Nakamura 0:8373b6833bde 85 { 313, 20, 146, 34, TOUCH_KEY_SETTING_3 },
Osamu Nakamura 0:8373b6833bde 86 { POS_SLIDE_BAR_X-20, 80-8, 281, 30, TOUCH_KEY_THRESHOLD_BODY },
Osamu Nakamura 0:8373b6833bde 87 { POS_SLIDE_BAR_X-20, 120-8, 281, 30, TOUCH_KEY_THRESHOLD_FACE },
Osamu Nakamura 0:8373b6833bde 88 { POS_SLIDE_BAR_X-20, 160-8, 281, 30, TOUCH_KEY_THRESHOLD_RECO },
Osamu Nakamura 0:8373b6833bde 89 { 0, 0, 0, 0, 0 } /* table end */
Osamu Nakamura 0:8373b6833bde 90 };
Osamu Nakamura 0:8373b6833bde 91
Osamu Nakamura 0:8373b6833bde 92 static const key_pic_info_t touch_key_tbl_setting_2[] = {
Osamu Nakamura 0:8373b6833bde 93 /* X Y Width Height Func code */
Osamu Nakamura 0:8373b6833bde 94 { 127, 220, 80, 34, TOUCH_KEY_RESET_SETTING },
Osamu Nakamura 0:8373b6833bde 95 { 273, 220, 80, 34, TOUCH_KEY_CLOSE },
Osamu Nakamura 0:8373b6833bde 96 { 21, 20, 146, 34, TOUCH_KEY_SETTING_1 },
Osamu Nakamura 0:8373b6833bde 97 { 167, 20, 146, 34, TOUCH_KEY_SETTING_2 },
Osamu Nakamura 0:8373b6833bde 98 { 313, 20, 146, 34, TOUCH_KEY_SETTING_3 },
Osamu Nakamura 0:8373b6833bde 99 { POS_SLIDE_BAR_X-20, 80-8, 281, 30, TOUCH_KEY_RANGE_BODY_MIN },
Osamu Nakamura 0:8373b6833bde 100 { POS_SLIDE_BAR_X-20, 110-8, 281, 30, TOUCH_KEY_RANGE_BODY_MAX },
Osamu Nakamura 0:8373b6833bde 101 { POS_SLIDE_BAR_X-20, 150-8, 281, 30, TOUCH_KEY_RANGE_FACE_MIN },
Osamu Nakamura 0:8373b6833bde 102 { POS_SLIDE_BAR_X-20, 180-8, 281, 30, TOUCH_KEY_RANGE_FACE_MAX },
Osamu Nakamura 0:8373b6833bde 103 { 0, 0, 0, 0, 0 } /* table end */
Osamu Nakamura 0:8373b6833bde 104 };
Osamu Nakamura 0:8373b6833bde 105
Osamu Nakamura 0:8373b6833bde 106 static const key_pic_info_t touch_key_tbl_setting_3[] = {
Osamu Nakamura 0:8373b6833bde 107 /* X Y Width Height Func code */
Osamu Nakamura 0:8373b6833bde 108 { 127, 220, 80, 34, TOUCH_KEY_RESET_SETTING },
Osamu Nakamura 0:8373b6833bde 109 { 273, 220, 80, 34, TOUCH_KEY_CLOSE },
Osamu Nakamura 0:8373b6833bde 110 { 21, 20, 146, 34, TOUCH_KEY_SETTING_1 },
Osamu Nakamura 0:8373b6833bde 111 { 167, 20, 146, 34, TOUCH_KEY_SETTING_2 },
Osamu Nakamura 0:8373b6833bde 112 { 313, 20, 146, 34, TOUCH_KEY_SETTING_3 },
Osamu Nakamura 0:8373b6833bde 113 { POS_SLIDE_BAR_X-20, 80-8, 281, 30, TOUCH_KEY_FACE_POSE },
Osamu Nakamura 0:8373b6833bde 114 { POS_SLIDE_BAR_X-20, 120-8, 281, 30, TOUCH_KEY_FACE_ANGLE },
Osamu Nakamura 0:8373b6833bde 115 { 0, 0, 0, 0, 0 } /* table end */
Osamu Nakamura 0:8373b6833bde 116 };
Osamu Nakamura 0:8373b6833bde 117
Osamu Nakamura 0:8373b6833bde 118 static const key_pic_info_t * p_touch_key_tbl[] = {
Osamu Nakamura 0:8373b6833bde 119 touch_key_tbl_normal, /* DISP_MODE_NORMAL */
Osamu Nakamura 0:8373b6833bde 120 touch_key_tbl_setting_1, /* DISP_MODE_SETTING_1 */
Osamu Nakamura 0:8373b6833bde 121 touch_key_tbl_setting_2, /* DISP_MODE_SETTING_2 */
Osamu Nakamura 0:8373b6833bde 122 touch_key_tbl_setting_3, /* DISP_MODE_SETTING_3 */
Osamu Nakamura 0:8373b6833bde 123 NULL
Osamu Nakamura 0:8373b6833bde 124 };
Osamu Nakamura 0:8373b6833bde 125
Osamu Nakamura 0:8373b6833bde 126 static TouckKey_LCD_shield touch(P4_0, P2_13, I2C_SDA, I2C_SCL);
Osamu Nakamura 0:8373b6833bde 127 static Semaphore sem_touch_int(0);
Osamu Nakamura 0:8373b6833bde 128
Osamu Nakamura 0:8373b6833bde 129 #if defined(__ICCARM__)
Osamu Nakamura 0:8373b6833bde 130 /* 32 bytes aligned */
Osamu Nakamura 0:8373b6833bde 131 #pragma data_alignment=32
Osamu Nakamura 0:8373b6833bde 132 static uint8_t user_frame_buffer_touch0[TOUCH_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
Osamu Nakamura 0:8373b6833bde 133 #pragma data_alignment=32
Osamu Nakamura 0:8373b6833bde 134 static uint8_t user_frame_buffer_touch1[TOUCH_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
Osamu Nakamura 0:8373b6833bde 135 #else
Osamu Nakamura 0:8373b6833bde 136 /* 32 bytes aligned */
Osamu Nakamura 0:8373b6833bde 137 static uint8_t user_frame_buffer_touch0[TOUCH_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32)));
Osamu Nakamura 0:8373b6833bde 138 static uint8_t user_frame_buffer_touch1[TOUCH_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32)));
Osamu Nakamura 0:8373b6833bde 139 #endif
Osamu Nakamura 0:8373b6833bde 140
Osamu Nakamura 0:8373b6833bde 141 static volatile int32_t vsync_count = 0;
Osamu Nakamura 0:8373b6833bde 142 static recognition_setting_t * p_setting;
Osamu Nakamura 0:8373b6833bde 143 static int disp_mode;
Osamu Nakamura 0:8373b6833bde 144
Osamu Nakamura 0:8373b6833bde 145 /****** Touch panel ******/
Osamu Nakamura 0:8373b6833bde 146 static uint32_t Scan_Key(const key_pic_info_t * key_tbl, const uint32_t pos_x, const uint32_t pos_y) {
Osamu Nakamura 0:8373b6833bde 147 uint32_t ret = 0;
Osamu Nakamura 0:8373b6833bde 148
Osamu Nakamura 0:8373b6833bde 149 while (ret == 0) {
Osamu Nakamura 0:8373b6833bde 150 if (key_tbl->func_code == 0) {
Osamu Nakamura 0:8373b6833bde 151 break;
Osamu Nakamura 0:8373b6833bde 152 }
Osamu Nakamura 0:8373b6833bde 153 /* Check the range of the X position */
Osamu Nakamura 0:8373b6833bde 154 if ((pos_x >= key_tbl->pic_pos_x) && (pos_x <= (key_tbl->pic_pos_x + key_tbl->pic_width))) {
Osamu Nakamura 0:8373b6833bde 155 /* Check the range of the Y position */
Osamu Nakamura 0:8373b6833bde 156 if ((pos_y >= key_tbl->pic_pos_y) && (pos_y <= (key_tbl->pic_pos_y + key_tbl->pic_height))) {
Osamu Nakamura 0:8373b6833bde 157 /* Decide the func code. */
Osamu Nakamura 0:8373b6833bde 158 ret = key_tbl->func_code;
Osamu Nakamura 0:8373b6833bde 159 }
Osamu Nakamura 0:8373b6833bde 160 }
Osamu Nakamura 0:8373b6833bde 161 key_tbl++;
Osamu Nakamura 0:8373b6833bde 162 }
Osamu Nakamura 0:8373b6833bde 163
Osamu Nakamura 0:8373b6833bde 164 return ret;
Osamu Nakamura 0:8373b6833bde 165 }
Osamu Nakamura 0:8373b6833bde 166
Osamu Nakamura 0:8373b6833bde 167 static void draw_button(Canvas2D_ContextClass * p_canvas2d) {
Osamu Nakamura 0:8373b6833bde 168 const graphics_image_t* p_wk;
Osamu Nakamura 0:8373b6833bde 169
Osamu Nakamura 0:8373b6833bde 170 /* Draw background */
Osamu Nakamura 0:8373b6833bde 171 p_canvas2d->drawImage(background, 320, 0);
Osamu Nakamura 0:8373b6833bde 172
Osamu Nakamura 0:8373b6833bde 173 /* Draw "HUMAN BODY" button */
Osamu Nakamura 0:8373b6833bde 174 if ((p_setting->execFlag & HVC_ACTIV_BODY_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 175 p_wk = button_off;
Osamu Nakamura 0:8373b6833bde 176 } else {
Osamu Nakamura 0:8373b6833bde 177 p_wk = button_on;
Osamu Nakamura 0:8373b6833bde 178 }
Osamu Nakamura 0:8373b6833bde 179 p_canvas2d->drawImage(p_wk, 330, 10);
Osamu Nakamura 0:8373b6833bde 180 p_canvas2d->drawImage(str_human_body, 330 + 19, 10 + 11);
Osamu Nakamura 0:8373b6833bde 181
Osamu Nakamura 0:8373b6833bde 182 /* Draw "FACE" or "RECOGNITION" button */
Osamu Nakamura 0:8373b6833bde 183 if ((p_setting->execFlag & HVC_ACTIV_FACE_RECOGNITION) == 0) {
Osamu Nakamura 0:8373b6833bde 184 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 185 p_wk = button_off;
Osamu Nakamura 0:8373b6833bde 186 } else {
Osamu Nakamura 0:8373b6833bde 187 p_wk = button_on;
Osamu Nakamura 0:8373b6833bde 188 }
Osamu Nakamura 0:8373b6833bde 189 p_canvas2d->drawImage(p_wk, 330, 56);
Osamu Nakamura 0:8373b6833bde 190 p_canvas2d->drawImage(str_face, 330 + 51, 56 + 11);
Osamu Nakamura 0:8373b6833bde 191 } else {
Osamu Nakamura 0:8373b6833bde 192 p_canvas2d->drawImage(button_on2, 330, 56);
Osamu Nakamura 0:8373b6833bde 193 p_canvas2d->drawImage(str_recognition, 330 + 19, 56 + 11);
Osamu Nakamura 0:8373b6833bde 194 }
Osamu Nakamura 0:8373b6833bde 195
Osamu Nakamura 0:8373b6833bde 196 /* Draw "AGE" button */
Osamu Nakamura 0:8373b6833bde 197 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 198 p_wk = button_inv;
Osamu Nakamura 0:8373b6833bde 199 } else if ((p_setting->execFlag & HVC_ACTIV_AGE_ESTIMATION) == 0) {
Osamu Nakamura 0:8373b6833bde 200 p_wk = button_off;
Osamu Nakamura 0:8373b6833bde 201 } else {
Osamu Nakamura 0:8373b6833bde 202 p_wk = button_on;
Osamu Nakamura 0:8373b6833bde 203 }
Osamu Nakamura 0:8373b6833bde 204 p_canvas2d->drawImage(p_wk, 330, 102);
Osamu Nakamura 0:8373b6833bde 205 p_canvas2d->drawImage(str_age, 330 + 54, 102 + 11);
Osamu Nakamura 0:8373b6833bde 206
Osamu Nakamura 0:8373b6833bde 207 /* Draw "GENDER" button */
Osamu Nakamura 0:8373b6833bde 208 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 209 p_wk = button_inv;
Osamu Nakamura 0:8373b6833bde 210 } else if ((p_setting->execFlag & HVC_ACTIV_GENDER_ESTIMATION) == 0) {
Osamu Nakamura 0:8373b6833bde 211 p_wk = button_off;
Osamu Nakamura 0:8373b6833bde 212 } else {
Osamu Nakamura 0:8373b6833bde 213 p_wk = button_on;
Osamu Nakamura 0:8373b6833bde 214 }
Osamu Nakamura 0:8373b6833bde 215 p_canvas2d->drawImage(p_wk, 330, 148);
Osamu Nakamura 0:8373b6833bde 216 p_canvas2d->drawImage(str_gender, 330 + 39, 148 + 11);
Osamu Nakamura 0:8373b6833bde 217
Osamu Nakamura 0:8373b6833bde 218 /* Draw "EXPRESSION" button */
Osamu Nakamura 0:8373b6833bde 219 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 220 p_wk = button_inv;
Osamu Nakamura 0:8373b6833bde 221 } else if ((p_setting->execFlag & HVC_ACTIV_EXPRESSION_ESTIMATION) == 0) {
Osamu Nakamura 0:8373b6833bde 222 p_wk = button_off;
Osamu Nakamura 0:8373b6833bde 223 } else {
Osamu Nakamura 0:8373b6833bde 224 p_wk = button_on;
Osamu Nakamura 0:8373b6833bde 225 }
Osamu Nakamura 0:8373b6833bde 226 p_canvas2d->drawImage(p_wk, 330, 194);
Osamu Nakamura 0:8373b6833bde 227 p_canvas2d->drawImage(str_expression, 330 + 23, 194 + 11);
Osamu Nakamura 0:8373b6833bde 228
Osamu Nakamura 0:8373b6833bde 229 /* Draw setting icon */
Osamu Nakamura 0:8373b6833bde 230 p_canvas2d->drawImage(icon_setting, LCD_PIXEL_WIDTH - 32, LCD_PIXEL_HEIGHT - 32);
Osamu Nakamura 0:8373b6833bde 231 }
Osamu Nakamura 0:8373b6833bde 232
Osamu Nakamura 0:8373b6833bde 233 static void draw_number(Canvas2D_ContextClass * p_canvas2d, int x, int y, int number) {
Osamu Nakamura 0:8373b6833bde 234 int wk_num;
Osamu Nakamura 0:8373b6833bde 235 bool disp_flg = false;
Osamu Nakamura 0:8373b6833bde 236 const graphics_image_t * p_num_tbl[] = {
Osamu Nakamura 0:8373b6833bde 237 char_0, char_1, char_2, char_3, char_4, char_5, char_6, char_7, char_8, char_9
Osamu Nakamura 0:8373b6833bde 238 };
Osamu Nakamura 0:8373b6833bde 239
Osamu Nakamura 0:8373b6833bde 240 wk_num = (number / 1000) % 10;
Osamu Nakamura 0:8373b6833bde 241 if ((wk_num != 0) || (disp_flg != false)) {
Osamu Nakamura 0:8373b6833bde 242 p_canvas2d->drawImage(p_num_tbl[wk_num], x + 9 * 0, y);
Osamu Nakamura 0:8373b6833bde 243 R_OSPL_CLEAR_ERROR();
Osamu Nakamura 0:8373b6833bde 244 disp_flg = true;
Osamu Nakamura 0:8373b6833bde 245 }
Osamu Nakamura 0:8373b6833bde 246 wk_num = (number / 100) % 10;
Osamu Nakamura 0:8373b6833bde 247 if ((wk_num != 0) || (disp_flg != false)) {
Osamu Nakamura 0:8373b6833bde 248 p_canvas2d->drawImage(p_num_tbl[wk_num], x + 9 * 1, y);
Osamu Nakamura 0:8373b6833bde 249 R_OSPL_CLEAR_ERROR();
Osamu Nakamura 0:8373b6833bde 250 disp_flg = true;
Osamu Nakamura 0:8373b6833bde 251 }
Osamu Nakamura 0:8373b6833bde 252 wk_num = (number / 10) % 10;
Osamu Nakamura 0:8373b6833bde 253 if ((wk_num != 0) || (disp_flg != false)) {
Osamu Nakamura 0:8373b6833bde 254 p_canvas2d->drawImage(p_num_tbl[wk_num], x + 9 * 2, y);
Osamu Nakamura 0:8373b6833bde 255 R_OSPL_CLEAR_ERROR();
Osamu Nakamura 0:8373b6833bde 256 }
Osamu Nakamura 0:8373b6833bde 257 wk_num = number % 10;
Osamu Nakamura 0:8373b6833bde 258 p_canvas2d->drawImage(p_num_tbl[wk_num], x + 9 * 3, y);
Osamu Nakamura 0:8373b6833bde 259 R_OSPL_CLEAR_ERROR();
Osamu Nakamura 0:8373b6833bde 260 }
Osamu Nakamura 0:8373b6833bde 261
Osamu Nakamura 0:8373b6833bde 262 static void draw_slide_bar(Canvas2D_ContextClass * p_canvas2d, int y, INT32 data, int min, int max) {
Osamu Nakamura 0:8373b6833bde 263 p_canvas2d->globalAlpha = 0.7f;
Osamu Nakamura 0:8373b6833bde 264 p_canvas2d->fillStyle = "#D9C3E6";
Osamu Nakamura 0:8373b6833bde 265 p_canvas2d->fillRect(POS_PROGRESS_0_X, y + 6, SLIDE_BAR_LENGTH + 10, 2);
Osamu Nakamura 0:8373b6833bde 266 p_canvas2d->globalAlpha = 1.0f;
Osamu Nakamura 0:8373b6833bde 267 p_canvas2d->drawImage(char_left, POS_SLIDE_BAR_X, y);
Osamu Nakamura 0:8373b6833bde 268 p_canvas2d->drawImage(char_rigth, POS_PROGRESS_0_X + SLIDE_BAR_LENGTH + 10 + 1, y);
Osamu Nakamura 0:8373b6833bde 269 p_canvas2d->fillStyle = "#5B9BD5";
Osamu Nakamura 0:8373b6833bde 270 p_canvas2d->fillRect(POS_PROGRESS_0_X + (int)(SLIDE_BAR_LENGTH * ((float)(data - min) / (max - min))), y, 10, 14);
Osamu Nakamura 0:8373b6833bde 271 }
Osamu Nakamura 0:8373b6833bde 272
Osamu Nakamura 0:8373b6833bde 273 static void draw_setting_menu(Canvas2D_ContextClass * p_canvas2d) {
Osamu Nakamura 0:8373b6833bde 274 if (disp_mode == DISP_MODE_NORMAL) {
Osamu Nakamura 0:8373b6833bde 275 return;
Osamu Nakamura 0:8373b6833bde 276 }
Osamu Nakamura 0:8373b6833bde 277
Osamu Nakamura 0:8373b6833bde 278 p_canvas2d->globalAlpha = 0.95f;
Osamu Nakamura 0:8373b6833bde 279 p_canvas2d->drawImage(background_setting, 0, 0);
Osamu Nakamura 0:8373b6833bde 280
Osamu Nakamura 0:8373b6833bde 281 /* Tab */
Osamu Nakamura 0:8373b6833bde 282 if (disp_mode == DISP_MODE_SETTING_1) {
Osamu Nakamura 0:8373b6833bde 283 p_canvas2d->globalAlpha = 0.9f;
Osamu Nakamura 0:8373b6833bde 284 p_canvas2d->fillStyle = "#5B9BD5";
Osamu Nakamura 0:8373b6833bde 285 p_canvas2d->fillRect(21, 20, 146, 34);
Osamu Nakamura 0:8373b6833bde 286 p_canvas2d->globalAlpha = 1.0f;
Osamu Nakamura 0:8373b6833bde 287 } else {
Osamu Nakamura 0:8373b6833bde 288 p_canvas2d->globalAlpha = 0.3f;
Osamu Nakamura 0:8373b6833bde 289 }
Osamu Nakamura 0:8373b6833bde 290 p_canvas2d->drawImage(str_threshold_value, 23, 30);
Osamu Nakamura 0:8373b6833bde 291
Osamu Nakamura 0:8373b6833bde 292 if (disp_mode == DISP_MODE_SETTING_2) {
Osamu Nakamura 0:8373b6833bde 293 p_canvas2d->globalAlpha = 0.9f;
Osamu Nakamura 0:8373b6833bde 294 p_canvas2d->fillStyle = "#5B9BD5";
Osamu Nakamura 0:8373b6833bde 295 p_canvas2d->fillRect(167, 20, 146, 34);
Osamu Nakamura 0:8373b6833bde 296 p_canvas2d->globalAlpha = 1.0f;
Osamu Nakamura 0:8373b6833bde 297 } else {
Osamu Nakamura 0:8373b6833bde 298 p_canvas2d->globalAlpha = 0.3f;
Osamu Nakamura 0:8373b6833bde 299 }
Osamu Nakamura 0:8373b6833bde 300 p_canvas2d->drawImage(str_detection_size, 181, 30);
Osamu Nakamura 0:8373b6833bde 301
Osamu Nakamura 0:8373b6833bde 302 if (disp_mode == DISP_MODE_SETTING_3) {
Osamu Nakamura 0:8373b6833bde 303 p_canvas2d->globalAlpha = 0.9f;
Osamu Nakamura 0:8373b6833bde 304 p_canvas2d->fillStyle = "#5B9BD5";
Osamu Nakamura 0:8373b6833bde 305 p_canvas2d->fillRect(313, 20, 146, 34);
Osamu Nakamura 0:8373b6833bde 306 p_canvas2d->globalAlpha = 1.0f;
Osamu Nakamura 0:8373b6833bde 307 } else {
Osamu Nakamura 0:8373b6833bde 308 p_canvas2d->globalAlpha = 0.3f;
Osamu Nakamura 0:8373b6833bde 309 }
Osamu Nakamura 0:8373b6833bde 310 p_canvas2d->drawImage(str_face, 342, 30);
Osamu Nakamura 0:8373b6833bde 311 p_canvas2d->drawImage(str_angle, 383, 30);
Osamu Nakamura 0:8373b6833bde 312
Osamu Nakamura 0:8373b6833bde 313 /* Setting */
Osamu Nakamura 0:8373b6833bde 314 p_canvas2d->globalAlpha = 1.0f;
Osamu Nakamura 0:8373b6833bde 315 if (disp_mode == DISP_MODE_SETTING_1) {
Osamu Nakamura 0:8373b6833bde 316 p_canvas2d->drawImage(str_human_body, 30, 80);
Osamu Nakamura 0:8373b6833bde 317 p_canvas2d->drawImage(str_face, 30, 120);
Osamu Nakamura 0:8373b6833bde 318 p_canvas2d->drawImage(str_recognition, 30, 160);
Osamu Nakamura 0:8373b6833bde 319
Osamu Nakamura 0:8373b6833bde 320 draw_slide_bar(p_canvas2d, 80, p_setting->threshold.bdThreshold, THRESHOLD_MIN, THRESHOLD_MAX);
Osamu Nakamura 0:8373b6833bde 321 draw_slide_bar(p_canvas2d, 120, p_setting->threshold.dtThreshold, THRESHOLD_MIN, THRESHOLD_MAX);
Osamu Nakamura 0:8373b6833bde 322 draw_slide_bar(p_canvas2d, 160, p_setting->threshold.rsThreshold, THRESHOLD_MIN, THRESHOLD_MAX);
Osamu Nakamura 0:8373b6833bde 323
Osamu Nakamura 0:8373b6833bde 324 draw_number(p_canvas2d, 430, 80, p_setting->threshold.bdThreshold);
Osamu Nakamura 0:8373b6833bde 325 draw_number(p_canvas2d, 430, 120, p_setting->threshold.dtThreshold);
Osamu Nakamura 0:8373b6833bde 326 draw_number(p_canvas2d, 430, 160, p_setting->threshold.rsThreshold);
Osamu Nakamura 0:8373b6833bde 327 } else if (disp_mode == DISP_MODE_SETTING_2) {
Osamu Nakamura 0:8373b6833bde 328 p_canvas2d->drawImage(str_human_body, 30, 80);
Osamu Nakamura 0:8373b6833bde 329 p_canvas2d->drawImage(str_min, 140, 80);
Osamu Nakamura 0:8373b6833bde 330 p_canvas2d->drawImage(str_max, 140, 110);
Osamu Nakamura 0:8373b6833bde 331 p_canvas2d->drawImage(str_face, 30, 150);
Osamu Nakamura 0:8373b6833bde 332 p_canvas2d->drawImage(str_min, 140, 150);
Osamu Nakamura 0:8373b6833bde 333 p_canvas2d->drawImage(str_max, 140, 180);
Osamu Nakamura 0:8373b6833bde 334
Osamu Nakamura 0:8373b6833bde 335 draw_slide_bar(p_canvas2d, 80, p_setting->sizeRange.bdMinSize, SIZE_RANGE_MIN, SIZE_RANGE_MAX);
Osamu Nakamura 0:8373b6833bde 336 draw_slide_bar(p_canvas2d, 110, p_setting->sizeRange.bdMaxSize, SIZE_RANGE_MIN, SIZE_RANGE_MAX);
Osamu Nakamura 0:8373b6833bde 337 draw_slide_bar(p_canvas2d, 150, p_setting->sizeRange.dtMinSize, SIZE_RANGE_MIN, SIZE_RANGE_MAX);
Osamu Nakamura 0:8373b6833bde 338 draw_slide_bar(p_canvas2d, 180, p_setting->sizeRange.dtMaxSize, SIZE_RANGE_MIN, SIZE_RANGE_MAX);
Osamu Nakamura 0:8373b6833bde 339
Osamu Nakamura 0:8373b6833bde 340 draw_number(p_canvas2d, 430, 80, p_setting->sizeRange.bdMinSize);
Osamu Nakamura 0:8373b6833bde 341 draw_number(p_canvas2d, 430, 110, p_setting->sizeRange.bdMaxSize);
Osamu Nakamura 0:8373b6833bde 342 draw_number(p_canvas2d, 430, 150, p_setting->sizeRange.dtMinSize);
Osamu Nakamura 0:8373b6833bde 343 draw_number(p_canvas2d, 430, 180, p_setting->sizeRange.dtMaxSize);
Osamu Nakamura 0:8373b6833bde 344 } else {
Osamu Nakamura 0:8373b6833bde 345 int wk_data;
Osamu Nakamura 0:8373b6833bde 346
Osamu Nakamura 0:8373b6833bde 347 p_canvas2d->drawImage(str_yaw, 30, 80);
Osamu Nakamura 0:8373b6833bde 348 p_canvas2d->drawImage(str_angle, 30 + 41, 80);
Osamu Nakamura 0:8373b6833bde 349 p_canvas2d->drawImage(str_roll, 30, 120);
Osamu Nakamura 0:8373b6833bde 350 p_canvas2d->drawImage(str_angle, 30 + 42, 120);
Osamu Nakamura 0:8373b6833bde 351
Osamu Nakamura 0:8373b6833bde 352 if (p_setting->pose == 0) {
Osamu Nakamura 0:8373b6833bde 353 wk_data = 30;
Osamu Nakamura 0:8373b6833bde 354 } else if (p_setting->pose == 1) {
Osamu Nakamura 0:8373b6833bde 355 wk_data = 60;
Osamu Nakamura 0:8373b6833bde 356 } else {
Osamu Nakamura 0:8373b6833bde 357 wk_data = 90;
Osamu Nakamura 0:8373b6833bde 358 }
Osamu Nakamura 0:8373b6833bde 359 draw_slide_bar(p_canvas2d, 80, p_setting->pose, POSE_MIN , POSE_MAX);
Osamu Nakamura 0:8373b6833bde 360 p_canvas2d->drawImage(char_plus_minus, 426, 80);
Osamu Nakamura 0:8373b6833bde 361 draw_number(p_canvas2d, 420, 80, wk_data); /* 30 60 90 */
Osamu Nakamura 0:8373b6833bde 362 p_canvas2d->drawImage(char_angle, 457, 80);
Osamu Nakamura 0:8373b6833bde 363
Osamu Nakamura 0:8373b6833bde 364 if (p_setting->angle == 0) {
Osamu Nakamura 0:8373b6833bde 365 wk_data = 15;
Osamu Nakamura 0:8373b6833bde 366 } else {
Osamu Nakamura 0:8373b6833bde 367 wk_data = 45;
Osamu Nakamura 0:8373b6833bde 368 }
Osamu Nakamura 0:8373b6833bde 369 draw_slide_bar(p_canvas2d, 120, p_setting->angle, ANGLE_MIN, ANGLE_MAX);
Osamu Nakamura 0:8373b6833bde 370 p_canvas2d->drawImage(char_plus_minus, 426, 120);
Osamu Nakamura 0:8373b6833bde 371 draw_number(p_canvas2d, 420, 120, wk_data); /* 15 45 */
Osamu Nakamura 0:8373b6833bde 372 p_canvas2d->drawImage(char_angle, 457, 120);
Osamu Nakamura 0:8373b6833bde 373 }
Osamu Nakamura 0:8373b6833bde 374 p_canvas2d->drawImage(str_reset, 144, 230);
Osamu Nakamura 0:8373b6833bde 375 p_canvas2d->drawImage(str_close, 290, 230);
Osamu Nakamura 0:8373b6833bde 376 }
Osamu Nakamura 0:8373b6833bde 377
Osamu Nakamura 0:8373b6833bde 378 static void draw_touch_layer(DisplayBase * p_display, frame_buffer_t * frmbuf_info, Canvas2D_ContextClass * p_canvas2d) {
Osamu Nakamura 0:8373b6833bde 379 while (vsync_count > 0) {
Osamu Nakamura 0:8373b6833bde 380 Thread::wait(1);
Osamu Nakamura 0:8373b6833bde 381 }
Osamu Nakamura 0:8373b6833bde 382
Osamu Nakamura 0:8373b6833bde 383 /* Swap the frame buffer */
Osamu Nakamura 0:8373b6833bde 384 if (frmbuf_info->draw_buffer_index == 1) {
Osamu Nakamura 0:8373b6833bde 385 frmbuf_info->draw_buffer_index = 0;
Osamu Nakamura 0:8373b6833bde 386 } else {
Osamu Nakamura 0:8373b6833bde 387 frmbuf_info->draw_buffer_index = 1;
Osamu Nakamura 0:8373b6833bde 388 }
Osamu Nakamura 0:8373b6833bde 389
Osamu Nakamura 0:8373b6833bde 390 /* Clear */
Osamu Nakamura 0:8373b6833bde 391 p_canvas2d->clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
Osamu Nakamura 0:8373b6833bde 392
Osamu Nakamura 0:8373b6833bde 393 /* Draw button */
Osamu Nakamura 0:8373b6833bde 394 draw_button(p_canvas2d);
Osamu Nakamura 0:8373b6833bde 395
Osamu Nakamura 0:8373b6833bde 396 /* Draw setting menu */
Osamu Nakamura 0:8373b6833bde 397 draw_setting_menu(p_canvas2d);
Osamu Nakamura 0:8373b6833bde 398
Osamu Nakamura 0:8373b6833bde 399 /* Complete drawing */
Osamu Nakamura 0:8373b6833bde 400 R_GRAPHICS_Finish(p_canvas2d->c_LanguageContext);
Osamu Nakamura 0:8373b6833bde 401 p_display->Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_2,
Osamu Nakamura 0:8373b6833bde 402 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index]);
Osamu Nakamura 0:8373b6833bde 403 vsync_count = 1;
Osamu Nakamura 0:8373b6833bde 404 }
Osamu Nakamura 0:8373b6833bde 405
Osamu Nakamura 0:8373b6833bde 406 static void set_progress(int x, INT32 * p_data, int min, int max, bool * p_slide, int last_key) {
Osamu Nakamura 0:8373b6833bde 407 int now_pos = POS_PROGRESS_0_X + (int)(SLIDE_BAR_LENGTH * (float)(*p_data - min) / (max - min));
Osamu Nakamura 0:8373b6833bde 408
Osamu Nakamura 0:8373b6833bde 409 x -= 5;
Osamu Nakamura 0:8373b6833bde 410 if ((last_key == 0) && (x > (now_pos - 10)) && (x < (now_pos + 20))) {
Osamu Nakamura 0:8373b6833bde 411 *p_slide = true;
Osamu Nakamura 0:8373b6833bde 412 }
Osamu Nakamura 0:8373b6833bde 413 if (x < POS_PROGRESS_0_X) {
Osamu Nakamura 0:8373b6833bde 414 x = POS_PROGRESS_0_X;
Osamu Nakamura 0:8373b6833bde 415 }
Osamu Nakamura 0:8373b6833bde 416 if (x > (POS_PROGRESS_0_X + SLIDE_BAR_LENGTH)) {
Osamu Nakamura 0:8373b6833bde 417 x = (POS_PROGRESS_0_X + SLIDE_BAR_LENGTH);
Osamu Nakamura 0:8373b6833bde 418 }
Osamu Nakamura 0:8373b6833bde 419 if (*p_slide) {
Osamu Nakamura 0:8373b6833bde 420 *p_data = ((float)(x - POS_PROGRESS_0_X) / (float)SLIDE_BAR_LENGTH * (float)(max - min)) + min;
Osamu Nakamura 0:8373b6833bde 421 } else if ((x > now_pos) && (*p_data < max)) {
Osamu Nakamura 0:8373b6833bde 422 *p_data += 1;
Osamu Nakamura 0:8373b6833bde 423 } else if ((x < now_pos) && (*p_data > min)) {
Osamu Nakamura 0:8373b6833bde 424 *p_data -= 1;
Osamu Nakamura 0:8373b6833bde 425 } else {
Osamu Nakamura 0:8373b6833bde 426 /* do nothing */
Osamu Nakamura 0:8373b6833bde 427 }
Osamu Nakamura 0:8373b6833bde 428 }
Osamu Nakamura 0:8373b6833bde 429
Osamu Nakamura 0:8373b6833bde 430 static void init_touch_layer(DisplayBase * p_display, frame_buffer_t * frmbuf_info, Canvas2D_ContextClass * p_canvas2d) {
Osamu Nakamura 0:8373b6833bde 431 errnum_t err;
Osamu Nakamura 0:8373b6833bde 432 Canvas2D_ContextConfigClass config;
Osamu Nakamura 0:8373b6833bde 433 DisplayBase::rect_t rect;
Osamu Nakamura 0:8373b6833bde 434
Osamu Nakamura 0:8373b6833bde 435 /* The layer by which the buttons is drawn */
Osamu Nakamura 0:8373b6833bde 436 memset(user_frame_buffer_touch0, 0, sizeof(user_frame_buffer_touch0));
Osamu Nakamura 0:8373b6833bde 437 memset(user_frame_buffer_touch1, 0, sizeof(user_frame_buffer_touch1));
Osamu Nakamura 0:8373b6833bde 438 frmbuf_info->buffer_address[0] = user_frame_buffer_touch0;
Osamu Nakamura 0:8373b6833bde 439 frmbuf_info->buffer_address[1] = user_frame_buffer_touch1;
Osamu Nakamura 0:8373b6833bde 440 frmbuf_info->buffer_count = 2;
Osamu Nakamura 0:8373b6833bde 441 frmbuf_info->show_buffer_index = 0;
Osamu Nakamura 0:8373b6833bde 442 frmbuf_info->draw_buffer_index = 0;
Osamu Nakamura 0:8373b6833bde 443 frmbuf_info->width = LCD_PIXEL_WIDTH;
Osamu Nakamura 0:8373b6833bde 444 frmbuf_info->byte_per_pixel = TOUCH_BUFFER_BYTE_PER_PIXEL;
Osamu Nakamura 0:8373b6833bde 445 frmbuf_info->stride = TOUCH_BUFFER_STRIDE;
Osamu Nakamura 0:8373b6833bde 446 frmbuf_info->height = LCD_PIXEL_HEIGHT;
Osamu Nakamura 0:8373b6833bde 447 frmbuf_info->pixel_format = PIXEL_FORMAT_ARGB8888;
Osamu Nakamura 0:8373b6833bde 448
Osamu Nakamura 0:8373b6833bde 449 rect.vs = 0;
Osamu Nakamura 0:8373b6833bde 450 rect.vw = LCD_PIXEL_HEIGHT;
Osamu Nakamura 0:8373b6833bde 451 rect.hs = 0;
Osamu Nakamura 0:8373b6833bde 452 rect.hw = LCD_PIXEL_WIDTH;
Osamu Nakamura 0:8373b6833bde 453 p_display->Graphics_Read_Setting(
Osamu Nakamura 0:8373b6833bde 454 DisplayBase::GRAPHICS_LAYER_2,
Osamu Nakamura 0:8373b6833bde 455 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index],
Osamu Nakamura 0:8373b6833bde 456 TOUCH_BUFFER_STRIDE,
Osamu Nakamura 0:8373b6833bde 457 DisplayBase::GRAPHICS_FORMAT_ARGB8888,
Osamu Nakamura 0:8373b6833bde 458 DisplayBase::WR_RD_WRSWA_32BIT,
Osamu Nakamura 0:8373b6833bde 459 &rect
Osamu Nakamura 0:8373b6833bde 460 );
Osamu Nakamura 0:8373b6833bde 461 p_display->Graphics_Start(DisplayBase::GRAPHICS_LAYER_2);
Osamu Nakamura 0:8373b6833bde 462
Osamu Nakamura 0:8373b6833bde 463 /* Drawing buttons */
Osamu Nakamura 0:8373b6833bde 464 config.frame_buffer = frmbuf_info;
Osamu Nakamura 0:8373b6833bde 465 *p_canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
Osamu Nakamura 0:8373b6833bde 466 err = R_OSPL_GetErrNum();
Osamu Nakamura 0:8373b6833bde 467 if (err != 0) {
Osamu Nakamura 0:8373b6833bde 468 printf("Line %d, err %d\n", __LINE__, err);
Osamu Nakamura 0:8373b6833bde 469 mbed_die();
Osamu Nakamura 0:8373b6833bde 470 }
Osamu Nakamura 0:8373b6833bde 471 }
Osamu Nakamura 0:8373b6833bde 472
Osamu Nakamura 0:8373b6833bde 473 static void touch_int_callback(void) {
Osamu Nakamura 0:8373b6833bde 474 sem_touch_int.release();
Osamu Nakamura 0:8373b6833bde 475 }
Osamu Nakamura 0:8373b6833bde 476
Osamu Nakamura 0:8373b6833bde 477 void touch_lcd_int(DisplayBase::int_type_t int_type) {
Osamu Nakamura 0:8373b6833bde 478 /* Interrupt callback function for Vsync interruption */
Osamu Nakamura 0:8373b6833bde 479 if (int_type == DisplayBase::INT_TYPE_S0_LO_VSYNC) {
Osamu Nakamura 0:8373b6833bde 480 if (vsync_count > 0) {
Osamu Nakamura 0:8373b6833bde 481 vsync_count--;
Osamu Nakamura 0:8373b6833bde 482 }
Osamu Nakamura 0:8373b6833bde 483 }
Osamu Nakamura 0:8373b6833bde 484 }
Osamu Nakamura 0:8373b6833bde 485
Osamu Nakamura 0:8373b6833bde 486 void touch_task(DisplayBase * p_display) {
Osamu Nakamura 0:8373b6833bde 487 frame_buffer_t frame_buffer_info;
Osamu Nakamura 0:8373b6833bde 488 Canvas2D_ContextClass canvas2d;
Osamu Nakamura 0:8373b6833bde 489 TouchKey::touch_pos_t touch_pos[1];
Osamu Nakamura 0:8373b6833bde 490 int touch_num = 0;
Osamu Nakamura 0:8373b6833bde 491 int touch_num_last = 0;
Osamu Nakamura 0:8373b6833bde 492 bool key_rep = false;
Osamu Nakamura 0:8373b6833bde 493 int func_code;
Osamu Nakamura 0:8373b6833bde 494 int func_code_last = 0;
Osamu Nakamura 0:8373b6833bde 495 bool slide = false;
Osamu Nakamura 0:8373b6833bde 496 Timer key_time;
Osamu Nakamura 0:8373b6833bde 497 int wait_time;
Osamu Nakamura 0:8373b6833bde 498 int last_setting_mode = DISP_MODE_SETTING_1;
Osamu Nakamura 0:8373b6833bde 499
Osamu Nakamura 0:8373b6833bde 500 p_setting = GetRecognitionSettingPointer();
Osamu Nakamura 0:8373b6833bde 501 disp_mode = DISP_MODE_NORMAL;
Osamu Nakamura 0:8373b6833bde 502
Osamu Nakamura 0:8373b6833bde 503 /* Initializing Touch layer */
Osamu Nakamura 0:8373b6833bde 504 init_touch_layer(p_display, &frame_buffer_info, &canvas2d);
Osamu Nakamura 0:8373b6833bde 505 draw_touch_layer(p_display, &frame_buffer_info, &canvas2d);
Osamu Nakamura 0:8373b6833bde 506
Osamu Nakamura 0:8373b6833bde 507 /* Callback setting */
Osamu Nakamura 0:8373b6833bde 508 touch.SetCallback(&touch_int_callback);
Osamu Nakamura 0:8373b6833bde 509
Osamu Nakamura 0:8373b6833bde 510 /* Reset touch IC */
Osamu Nakamura 0:8373b6833bde 511 touch.Reset();
Osamu Nakamura 0:8373b6833bde 512
Osamu Nakamura 0:8373b6833bde 513 key_time.reset();
Osamu Nakamura 0:8373b6833bde 514 key_time.start();
Osamu Nakamura 0:8373b6833bde 515
Osamu Nakamura 0:8373b6833bde 516 while (1) {
Osamu Nakamura 0:8373b6833bde 517 /* Wait touch event */
Osamu Nakamura 0:8373b6833bde 518 sem_touch_int.wait();
Osamu Nakamura 0:8373b6833bde 519
Osamu Nakamura 0:8373b6833bde 520 /* Get touch coordinates */
Osamu Nakamura 0:8373b6833bde 521 touch_num = touch.GetCoordinates(1, touch_pos);
Osamu Nakamura 0:8373b6833bde 522
Osamu Nakamura 0:8373b6833bde 523 if (slide) {
Osamu Nakamura 0:8373b6833bde 524 wait_time = 80;
Osamu Nakamura 0:8373b6833bde 525 } else {
Osamu Nakamura 0:8373b6833bde 526 wait_time = 250;
Osamu Nakamura 0:8373b6833bde 527 }
Osamu Nakamura 0:8373b6833bde 528 if ((key_time.read_ms() > wait_time) || (touch_num != touch_num_last)) {
Osamu Nakamura 0:8373b6833bde 529 key_time.reset();
Osamu Nakamura 0:8373b6833bde 530 key_time.start();
Osamu Nakamura 0:8373b6833bde 531 if ((touch_num != 0) && ((touch_num_last == 0) || (key_rep == true))) {
Osamu Nakamura 0:8373b6833bde 532 key_rep = false;
Osamu Nakamura 0:8373b6833bde 533 func_code = Scan_Key(p_touch_key_tbl[disp_mode], touch_pos[0].x, touch_pos[0].y);
Osamu Nakamura 0:8373b6833bde 534 if (slide) {
Osamu Nakamura 0:8373b6833bde 535 func_code = func_code_last;
Osamu Nakamura 0:8373b6833bde 536 }
Osamu Nakamura 0:8373b6833bde 537 if (func_code != 0) {
Osamu Nakamura 0:8373b6833bde 538 switch (func_code) {
Osamu Nakamura 0:8373b6833bde 539 case TOUCH_KEY_SETTING_LAST:
Osamu Nakamura 0:8373b6833bde 540 disp_mode = last_setting_mode;
Osamu Nakamura 0:8373b6833bde 541 break;
Osamu Nakamura 0:8373b6833bde 542 case TOUCH_KEY_CLOSE:
Osamu Nakamura 0:8373b6833bde 543 disp_mode = DISP_MODE_NORMAL;
Osamu Nakamura 0:8373b6833bde 544 SetSettingReq();
Osamu Nakamura 0:8373b6833bde 545 break;
Osamu Nakamura 0:8373b6833bde 546 case TOUCH_KEY_SETTING_1:
Osamu Nakamura 0:8373b6833bde 547 disp_mode = DISP_MODE_SETTING_1;
Osamu Nakamura 0:8373b6833bde 548 last_setting_mode = DISP_MODE_SETTING_1;
Osamu Nakamura 0:8373b6833bde 549 break;
Osamu Nakamura 0:8373b6833bde 550 case TOUCH_KEY_SETTING_2:
Osamu Nakamura 0:8373b6833bde 551 disp_mode = DISP_MODE_SETTING_2;
Osamu Nakamura 0:8373b6833bde 552 last_setting_mode = DISP_MODE_SETTING_2;
Osamu Nakamura 0:8373b6833bde 553 break;
Osamu Nakamura 0:8373b6833bde 554 case TOUCH_KEY_SETTING_3:
Osamu Nakamura 0:8373b6833bde 555 disp_mode = DISP_MODE_SETTING_3;
Osamu Nakamura 0:8373b6833bde 556 last_setting_mode = DISP_MODE_SETTING_3;
Osamu Nakamura 0:8373b6833bde 557 break;
Osamu Nakamura 0:8373b6833bde 558 case TOUCH_KEY_REGISTRATION:
Osamu Nakamura 0:8373b6833bde 559 if ((p_setting->execFlag & HVC_ACTIV_FACE_RECOGNITION) != 0) {
Osamu Nakamura 0:8373b6833bde 560 SetRegistrationrReq();
Osamu Nakamura 0:8373b6833bde 561 }
Osamu Nakamura 0:8373b6833bde 562 break;
Osamu Nakamura 0:8373b6833bde 563 case TOUCH_KEY_THRESHOLD_BODY:
Osamu Nakamura 0:8373b6833bde 564 set_progress(touch_pos[0].x, &p_setting->threshold.bdThreshold,
Osamu Nakamura 0:8373b6833bde 565 THRESHOLD_MIN, THRESHOLD_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 566 key_rep = true;
Osamu Nakamura 0:8373b6833bde 567 break;
Osamu Nakamura 0:8373b6833bde 568 case TOUCH_KEY_THRESHOLD_FACE:
Osamu Nakamura 0:8373b6833bde 569 set_progress(touch_pos[0].x, &p_setting->threshold.dtThreshold,
Osamu Nakamura 0:8373b6833bde 570 THRESHOLD_MIN, THRESHOLD_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 571 key_rep = true;
Osamu Nakamura 0:8373b6833bde 572 break;
Osamu Nakamura 0:8373b6833bde 573 case TOUCH_KEY_THRESHOLD_RECO:
Osamu Nakamura 0:8373b6833bde 574 set_progress(touch_pos[0].x, &p_setting->threshold.rsThreshold,
Osamu Nakamura 0:8373b6833bde 575 THRESHOLD_MIN, THRESHOLD_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 576 key_rep = true;
Osamu Nakamura 0:8373b6833bde 577 break;
Osamu Nakamura 0:8373b6833bde 578 case TOUCH_KEY_RANGE_BODY_MIN:
Osamu Nakamura 0:8373b6833bde 579 set_progress(touch_pos[0].x, &p_setting->sizeRange.bdMinSize,
Osamu Nakamura 0:8373b6833bde 580 SIZE_RANGE_MIN, SIZE_RANGE_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 581 if (p_setting->sizeRange.bdMinSize > p_setting->sizeRange.bdMaxSize) {
Osamu Nakamura 0:8373b6833bde 582 p_setting->sizeRange.bdMaxSize = p_setting->sizeRange.bdMinSize;
Osamu Nakamura 0:8373b6833bde 583 }
Osamu Nakamura 0:8373b6833bde 584 key_rep = true;
Osamu Nakamura 0:8373b6833bde 585 break;
Osamu Nakamura 0:8373b6833bde 586 case TOUCH_KEY_RANGE_BODY_MAX:
Osamu Nakamura 0:8373b6833bde 587 set_progress(touch_pos[0].x, &p_setting->sizeRange.bdMaxSize,
Osamu Nakamura 0:8373b6833bde 588 SIZE_RANGE_MIN, SIZE_RANGE_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 589 if (p_setting->sizeRange.bdMaxSize < p_setting->sizeRange.bdMinSize) {
Osamu Nakamura 0:8373b6833bde 590 p_setting->sizeRange.bdMinSize = p_setting->sizeRange.bdMaxSize;
Osamu Nakamura 0:8373b6833bde 591 }
Osamu Nakamura 0:8373b6833bde 592 key_rep = true;
Osamu Nakamura 0:8373b6833bde 593 break;
Osamu Nakamura 0:8373b6833bde 594 case TOUCH_KEY_RANGE_FACE_MIN:
Osamu Nakamura 0:8373b6833bde 595 set_progress(touch_pos[0].x, &p_setting->sizeRange.dtMinSize,
Osamu Nakamura 0:8373b6833bde 596 SIZE_RANGE_MIN, SIZE_RANGE_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 597 if (p_setting->sizeRange.dtMinSize > p_setting->sizeRange.dtMaxSize) {
Osamu Nakamura 0:8373b6833bde 598 p_setting->sizeRange.dtMaxSize = p_setting->sizeRange.dtMinSize;
Osamu Nakamura 0:8373b6833bde 599 }
Osamu Nakamura 0:8373b6833bde 600 key_rep = true;
Osamu Nakamura 0:8373b6833bde 601 break;
Osamu Nakamura 0:8373b6833bde 602 case TOUCH_KEY_RANGE_FACE_MAX:
Osamu Nakamura 0:8373b6833bde 603 set_progress(touch_pos[0].x, &p_setting->sizeRange.dtMaxSize,
Osamu Nakamura 0:8373b6833bde 604 SIZE_RANGE_MIN, SIZE_RANGE_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 605 if (p_setting->sizeRange.dtMaxSize < p_setting->sizeRange.dtMinSize) {
Osamu Nakamura 0:8373b6833bde 606 p_setting->sizeRange.dtMinSize = p_setting->sizeRange.dtMaxSize;
Osamu Nakamura 0:8373b6833bde 607 }
Osamu Nakamura 0:8373b6833bde 608 key_rep = true;
Osamu Nakamura 0:8373b6833bde 609 break;
Osamu Nakamura 0:8373b6833bde 610 case TOUCH_KEY_FACE_POSE:
Osamu Nakamura 0:8373b6833bde 611 set_progress(touch_pos[0].x, &p_setting->pose,
Osamu Nakamura 0:8373b6833bde 612 POSE_MIN, POSE_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 613 if (slide) {
Osamu Nakamura 0:8373b6833bde 614 key_rep = true;
Osamu Nakamura 0:8373b6833bde 615 }
Osamu Nakamura 0:8373b6833bde 616 break;
Osamu Nakamura 0:8373b6833bde 617 case TOUCH_KEY_FACE_ANGLE:
Osamu Nakamura 0:8373b6833bde 618 set_progress(touch_pos[0].x, &p_setting->angle,
Osamu Nakamura 0:8373b6833bde 619 ANGLE_MIN, ANGLE_MAX, &slide, touch_num_last);
Osamu Nakamura 0:8373b6833bde 620 if (slide) {
Osamu Nakamura 0:8373b6833bde 621 key_rep = true;
Osamu Nakamura 0:8373b6833bde 622 }
Osamu Nakamura 0:8373b6833bde 623 break;
Osamu Nakamura 0:8373b6833bde 624 case TOUCH_KEY_BODY_DETECTION:
Osamu Nakamura 0:8373b6833bde 625 if ((p_setting->execFlag & HVC_ACTIV_BODY_DETECTION) != 0) {
Osamu Nakamura 0:8373b6833bde 626 p_setting->execFlag &= ~HVC_ACTIV_BODY_DETECTION;
Osamu Nakamura 0:8373b6833bde 627 } else {
Osamu Nakamura 0:8373b6833bde 628 p_setting->execFlag |= HVC_ACTIV_BODY_DETECTION;
Osamu Nakamura 0:8373b6833bde 629 }
Osamu Nakamura 0:8373b6833bde 630 break;
Osamu Nakamura 0:8373b6833bde 631 case TOUCH_KEY_FACE_DETECTION:
Osamu Nakamura 0:8373b6833bde 632 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 633 p_setting->execFlag |= HVC_ACTIV_FACE_DETECTION;
Osamu Nakamura 0:8373b6833bde 634 } else if ((p_setting->execFlag & HVC_ACTIV_FACE_RECOGNITION) == 0) {
Osamu Nakamura 0:8373b6833bde 635 p_setting->execFlag |= HVC_ACTIV_FACE_RECOGNITION;
Osamu Nakamura 0:8373b6833bde 636 } else {
Osamu Nakamura 0:8373b6833bde 637 p_setting->execFlag &= ~(HVC_ACTIV_FACE_DETECTION | HVC_ACTIV_FACE_RECOGNITION);
Osamu Nakamura 0:8373b6833bde 638 }
Osamu Nakamura 0:8373b6833bde 639 break;
Osamu Nakamura 0:8373b6833bde 640 case TOUCH_KEY_AGE_ESTIMATION:
Osamu Nakamura 0:8373b6833bde 641 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 642 /* do nothing */
Osamu Nakamura 0:8373b6833bde 643 } else if ((p_setting->execFlag & HVC_ACTIV_AGE_ESTIMATION) != 0) {
Osamu Nakamura 0:8373b6833bde 644 p_setting->execFlag &= ~HVC_ACTIV_AGE_ESTIMATION;
Osamu Nakamura 0:8373b6833bde 645 } else {
Osamu Nakamura 0:8373b6833bde 646 p_setting->execFlag |= HVC_ACTIV_AGE_ESTIMATION;
Osamu Nakamura 0:8373b6833bde 647 }
Osamu Nakamura 0:8373b6833bde 648 break;
Osamu Nakamura 0:8373b6833bde 649 case TOUCH_KEY_GENDER_ESTIMATION:
Osamu Nakamura 0:8373b6833bde 650 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 651 /* do nothing */
Osamu Nakamura 0:8373b6833bde 652 } else if ((p_setting->execFlag & HVC_ACTIV_GENDER_ESTIMATION) != 0) {
Osamu Nakamura 0:8373b6833bde 653 p_setting->execFlag &= ~HVC_ACTIV_GENDER_ESTIMATION;
Osamu Nakamura 0:8373b6833bde 654 } else {
Osamu Nakamura 0:8373b6833bde 655 p_setting->execFlag |= HVC_ACTIV_GENDER_ESTIMATION;
Osamu Nakamura 0:8373b6833bde 656 }
Osamu Nakamura 0:8373b6833bde 657 break;
Osamu Nakamura 0:8373b6833bde 658 case TOUCH_KEY_EXPRESSION_ESTIMATION:
Osamu Nakamura 0:8373b6833bde 659 if ((p_setting->execFlag & HVC_ACTIV_FACE_DETECTION) == 0) {
Osamu Nakamura 0:8373b6833bde 660 /* do nothing */
Osamu Nakamura 0:8373b6833bde 661 } else if ((p_setting->execFlag & HVC_ACTIV_EXPRESSION_ESTIMATION) != 0) {
Osamu Nakamura 0:8373b6833bde 662 p_setting->execFlag &= ~HVC_ACTIV_EXPRESSION_ESTIMATION;
Osamu Nakamura 0:8373b6833bde 663 } else {
Osamu Nakamura 0:8373b6833bde 664 p_setting->execFlag |= HVC_ACTIV_EXPRESSION_ESTIMATION;
Osamu Nakamura 0:8373b6833bde 665 }
Osamu Nakamura 0:8373b6833bde 666 break;
Osamu Nakamura 0:8373b6833bde 667 case TOUCH_KEY_RESET_SETTING:
Osamu Nakamura 0:8373b6833bde 668 if (disp_mode == DISP_MODE_SETTING_1) {
Osamu Nakamura 0:8373b6833bde 669 p_setting->threshold.bdThreshold = BODY_THRESHOLD_DEFAULT;
Osamu Nakamura 0:8373b6833bde 670 p_setting->threshold.hdThreshold = HAND_THRESHOLD_DEFAULT;
Osamu Nakamura 0:8373b6833bde 671 p_setting->threshold.dtThreshold = FACE_THRESHOLD_DEFAULT;
Osamu Nakamura 0:8373b6833bde 672 p_setting->threshold.rsThreshold = REC_THRESHOLD_DEFAULT;
Osamu Nakamura 0:8373b6833bde 673 } else if (disp_mode == DISP_MODE_SETTING_2) {
Osamu Nakamura 0:8373b6833bde 674 p_setting->sizeRange.bdMinSize = BODY_SIZE_RANGE_MIN_DEFAULT;
Osamu Nakamura 0:8373b6833bde 675 p_setting->sizeRange.bdMaxSize = BODY_SIZE_RANGE_MAX_DEFAULT;
Osamu Nakamura 0:8373b6833bde 676 p_setting->sizeRange.hdMinSize = HAND_SIZE_RANGE_MIN_DEFAULT;
Osamu Nakamura 0:8373b6833bde 677 p_setting->sizeRange.hdMaxSize = HAND_SIZE_RANGE_MAX_DEFAULT;
Osamu Nakamura 0:8373b6833bde 678 p_setting->sizeRange.dtMinSize = FACE_SIZE_RANGE_MIN_DEFAULT;
Osamu Nakamura 0:8373b6833bde 679 p_setting->sizeRange.dtMaxSize = FACE_SIZE_RANGE_MAX_DEFAULT;
Osamu Nakamura 0:8373b6833bde 680 } else if (disp_mode == DISP_MODE_SETTING_3) {
Osamu Nakamura 0:8373b6833bde 681 p_setting->pose = FACE_POSE_DEFAULT;
Osamu Nakamura 0:8373b6833bde 682 p_setting->angle = FACE_ANGLE_DEFAULT;
Osamu Nakamura 0:8373b6833bde 683 } else {
Osamu Nakamura 0:8373b6833bde 684 /* do nothing */
Osamu Nakamura 0:8373b6833bde 685 }
Osamu Nakamura 0:8373b6833bde 686 break;
Osamu Nakamura 0:8373b6833bde 687 default:
Osamu Nakamura 0:8373b6833bde 688 break;
Osamu Nakamura 0:8373b6833bde 689 }
Osamu Nakamura 0:8373b6833bde 690 draw_touch_layer(p_display, &frame_buffer_info, &canvas2d);
Osamu Nakamura 0:8373b6833bde 691 }
Osamu Nakamura 0:8373b6833bde 692 func_code_last = func_code;
Osamu Nakamura 0:8373b6833bde 693 } else {
Osamu Nakamura 0:8373b6833bde 694 slide = false;
Osamu Nakamura 0:8373b6833bde 695 }
Osamu Nakamura 0:8373b6833bde 696 }
Osamu Nakamura 0:8373b6833bde 697 touch_num_last = touch_num;
Osamu Nakamura 0:8373b6833bde 698 }
Osamu Nakamura 0:8373b6833bde 699 }
Osamu Nakamura 0:8373b6833bde 700