Sample program that can send the recognition data from HVC-P2 to Fujitsu IoT Platform using REST (HTTP)

Dependencies:   AsciiFont GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP USBHost_custom easy-connect-gr-peach mbed-http picojson

Information

Here are both English and Japanese description. First, English description is shown followed by Japanese one. 本ページには英語版と日本語版の説明があります。まず英語版、続いて日本語版の説明となります。

Overview

This sample program shows how to send the cognitive data gathered by Omron HVC-P2 (Human Vision Components B5T-007001) to IoT Platform managed by FUJITSU ( http://jp.fujitsu.com/solutions/cloud/k5/function/paas/iot-platform/ ).

Hardware Configuration

/media/uploads/dkato/composition_hvcp2_demo.jpg

When executing this sample program, please configure the above H/W as shown below:
/media/uploads/dkato/composition_hvcp2_demo_2.jpg

Also, please close JP3 of GR-PEACH as follows:
/media/uploads/RyoheiHagimoto/usb.jpg

Application Preconfiguration

Build Procedure

  • Import this sample program onto mbed Compiler
  • In GR-PEACH_HVC-P2_IoTPlatform_http/IoT_Platform/iot_platform.cpp, please replace <ACCESS CODE> with the access code you set up on IoT Platform. For details on how to set up Access Code, please refer to the above Application Setup. Then, please delete the line beginning with #error macro.

Access Code configuration

#define ACCESS_CODE <Access CODE>
#error "You need to replace <Access CODE for your resource> with yours"
  • In GR-PEACH_HVC-P2_IoTPlatform_http/IoT_Platform/iot_platform.cpp, please replace <Base URI>, <Tenant ID> and <Path-to-Resource> below with yours and delete the line beginning with #error macro. For details on <Base URI> and <Tenant ID>, please contact FUJITSU LIMITED. Also, for details on <Path-to-Resource>, please refer to the above Application Setup.

URI configuration

std::string put_uri_base("<Base URI>/v1/<Tenant ID>/<Path-to-Resource>.json");
#error "You need to replace <Base URI>, <Tenant ID> and <Path-to-Resource> with yours"
**snip**
std::string get_uri("<Base URI>/v1/<Tenant ID>/<Path-to-Resource>/_past.json");
#error "You need to replace <Base URI>, <Tenant ID> and <Path-to-Resource> with yours"
  • Compile the program. If compilation is successfully terminated, the binary should be downloaded on your PC.
  • Plug Ethernet cable into GR-PEACH
  • Plug micro-USB cable into the port which lies on the next to RESET button. If GR-PEACH is successfully recognized, it appears as the USB flash disk named mbed as show below:
    /media/uploads/HinoNaka/mbed_drive.png
  • Copy the downloaded binary to mbed drive
  • Press RESET button on GR-PEACH in order to run the program. If it's successfully run, you can see the following message on terminal:
    /media/uploads/HinoNaka/iotplatform_log.png

Format of Data to be sent to IoT Platform

In this program, the cognitive data sent from HVC-P2 is serialized in the following JSON format and send it to IoT Platform:

  • Face detection data

{
    "RecodeType": "HVC-P2(face)"
    "id": <GR-PEACH ID>-<Sensor ID>"
    "FaceRectangle": {
        "Height": xxxx,
        "Left": xxxx,
        "Top": xxxx,
        "Width": xxxx,
    },
    "Gender": "male" or "female",
    "Scores": {
        "Anger": zzz,
        "Hapiness": zzz,
        "Neutral": zzz,
        "Sadness": zzz,
        "Surprise": zzz
    }
}

xxxx: Top-left coordinate, width and height of the rectangle circumscribing the detected face in LCD display coordinate system
zzz: the value indicating the expression estimated from the detected face

//

  • Body detection data

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

xxxx: Top-left coordinate, width and height of the rectangle circumscribing the detected body in LCD display coordinate system

概要

本プログラムは、オムロン社製HVC-P2 (Human Vision Components B5T-007001)で収集した各種認識データを、富士通社のIoT Platform ( http://jp.fujitsu.com/solutions/cloud/k5/function/paas/iot-platform/ ) に送信するサンプルプログラムです。

ハードウェア構成

/media/uploads/dkato/composition_hvcp2_demo.jpg

本プログラムを動作させる場合、上記H/Wを下図のように接続してください。 /media/uploads/dkato/composition_hvcp2_demo_2.jpg

また下図に示すGR-PEACHのJP3をショートしてください。 /media/uploads/RyoheiHagimoto/usb.jpg

アプリケーションの事前設定

ビルド手順

  • 本サンプルプログラムをmbed Compilerにインポートします
  • 下記に示すGR-PEACH_HVC-P2_IoTPlatform_http/IoT_Platform/iot_platform.cpp中の<ACCESS CODE> を、IoT Platform上で設定したアクセスコードで上書きしてください。<Access Code>の設定方法につきましては、上述のApplication Setupを参照願います。また #errorマクロで始まる行を削除してください。

Access Code configuration

#define ACCESS_CODE <Access CODE>
#error "You need to replace <Access CODE for your resource> with yours"
  • 下記に示すGR-PEACH_HVC-P2_IoTPlatform_http/IoT_Platform/iot_platform.cpp中の<Base URI><Tenant ID>、および<Path-to-Resource>>を適当な値に置換えるとともに、#errorマクロで始まる行を削除してください。ここで、<Base URI>、 <Tenant ID>の詳細につきましては富士通社へご確認願います。また<Path-to-Resource>>につきましては、Application Setupの項を参照ください。

URI configuration

std::string put_uri_base("<Base URI>/v1/<Tenant ID>/<Path-to-Resource>.json");
#error "You need to replace <Base URI>, <Tenant ID> and <Path-to-Resource> with yours"
(中略)
std::string get_uri("<Base URI>/v1/<Tenant ID>/<Path-to-Resource>/_past.json");
#error "You need to replace <Base URI>, <Tenant ID> and <Path-to-Resource> with yours"
  • プログラムをコンパイルします。コンパイルが正常終了すると、バイナリがお使いのPCにダウンロードされます。
  • GR-PEACHのRJ-45コネクタにEthernetケーブルを差し込んでください。
  • USBA - Micro USBケーブルを、GR-PEACHのRESETボタンの隣に配置されたMicro USBポートに差し込んでください。GR-PEACHが正常に認識されると、下図に示すようにGR-PEACHがmbedという名称のUSBドライブとして認識されます。
    /media/uploads/HinoNaka/mbed_drive.png
  • ダウンロードしたバイナリをmbedドライブにコピーします。
  • RESETボタンを押下してプログラムを実行します。正常に実行された場合、下記に示すメッセージがターミナル上に表示されます。
    /media/uploads/HinoNaka/iotplatform_log.png

送信データフォーマット

本プログラムでは、HVC-P2が収集した認識データを下記のJSONフォーマットにシリアライズし、IoT Platformへ送信します。

  • Face detection data

{
    "RecodeType": "HVC-P2(face)"
    "id": <GR-PEACH ID>-<Sensor ID>"
    "FaceRectangle": {
        "Height": xxxx,
        "Left": xxxx,
        "Top": xxxx,
        "Width": xxxx,
    },
    "Gender": "male" or "female",
    "Scores": {
        "Anger": zzz,
        "Hapiness": zzz,
        "Neutral": zzz,
        "Sadness": zzz,
        "Surprise": zzz
    }
}

xxxx: LCD表示座標系における検出した顔に外接する矩形の左上座標・幅・高さ
zzz: 検出した顔から推定した各種感情を示す数値

//

  • Body detection data

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

xxxx: LCD表示座標系における検出した人体に外接する矩形の左上座標・幅・高さ
Committer:
Osamu Nakamura
Date:
Thu Sep 07 18:15:54 2017 +0900
Revision:
0:813a237f1c50
Initial commit

Who changed what in which revision?

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