Renesas / Mbed OS GR-PEACH_HVC-P2_sample

Dependencies:   AsciiFont

Information

Please see here for Japanese version.
日本語版はこちらを参照ください。

What is this ?

This is a sample that runs OMRON HVC-P2 with GR-PEACH. In this sample, you can try following among the functions of HVC-P2 : Human Body Detection, Face Detection, Age Estimation, Gender Estimation, Expression Estimation and Face Recognition.
Both GR-PEACH and HVC-P2 use Renesas RZ/A1H included ARM® Cortex™-A9 processor.

/media/uploads/dkato/hvcp2_demo_img3.jpg

HVC-P2 (Human Vision Components B5T-007001) is a human-sensing component that recognizes people. It is an integrated module that is built into other device and provides both the OKAO Vision's ten types of image sensing and a camera module.
For details, please refer to the following link.

In the HVCApi folder of this sample, the code of the following link destination Sample Code "SampleCode_rev.2.0.2" is used. (You can download from "Product Information" -> "Sample Code" in the middle of the following page.)
http://www.omron.com/ecb/products/mobile/hvc_p2/

Constitution

  1. HVC-P2 x 1
  2. USBA-microUSB conversion cable x 2
  3. USBA-microUSB conversion adapter x 1
  4. GR-PEACH x 1
  5. 4.3inc LCD shield x 1

/media/uploads/dkato/composition_hvcp2_demo.jpg

/media/uploads/dkato/composition_hvcp2_demo_2.jpg

Please close JP3 of GR-PEACH.
/media/uploads/RyoheiHagimoto/usb.jpg

How to use

It starts when connecting the power supply USB cable. At startup, all functions are turned off. By pressing the button on the right of the screen you can switch the function on / off.

  • Function ON : orange or green
  • Function OFF : blue or gray

Only the FACE button changes to "FACE (blue) -> FACE (orange) -> RECOGNITION (green)". When FACE (blue), following buttons are gray and can not be operated : AGE, GENDER and EXPRESSION.
"Response time" at the bottom left of the screen indicates "image processing + USB transfer time". It is not pure image processing time.

Register Data (Face Recognition)

Set the FACE button to RECOGNITION (green), and touch the screen with one person on the screen to register the face. In this sample, face registration will record up to 10 people. Delete the old registrant when registering after 11 people. Registration information is stored in the RAM on the HVC-P2 side. It is discarded by power off and reset.

/media/uploads/dkato/hvcp2_demo_img2.jpg

Change parameters

When you press Config icon at the bottom right of the screen, the parameter setting screen is displayed. You can change threshold value, detection size and face angle parameters.

/media/uploads/dkato/hvcp2_demo_config_icon.jpg
/media/uploads/dkato/hvcp2_demo_config.jpg

Change transfer image size

By pressing USER_BUTTON0 on the back of the board, the image transfer size switches in the order of "160 x 120 -> 320 x 240 -> no image".
/media/uploads/dkato/gr-peach_switch2.jpg

Committer:
dkato
Date:
Fri Sep 28 05:16:44 2018 +0000
Revision:
8:92c19be0aced
Parent:
0:f5de229c9a00
Supports mbed-os-5.10

Who changed what in which revision?

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