Send the data of GR-PEACH_HVC-P2_sample to the cloud.

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

Fork of mbed-os-example-client by mbed-os-examples

Note at the time of sample import

Please not check the "Update all libraries to the latest version" at the time of import.

Warning!

When exporting and using it, increase the following stack size.

mbed-os/features/FEATURE_LWIP/lwip-interface/lwipopts.h

#define TCPIP_THREAD_STACKSIZE      1024
->
#define TCPIP_THREAD_STACKSIZE      2048

Overview

This is a sample to send the analysis result of GR-PEACH_HVC-P2_sample to the cloud using mbed-client. Please refer to following for operation of HVC-P2.

Import programGR-PEACH_HVC-P2_sample

Sample to operate omron HVC-P2 on GR-PEACH.


Required hardware

Application setup

Client credentials

To register the application to mbed Device Connector, you need to create and set the client side certificate.

  1. Go to https://connector.mbed.com/ and log in with your mbed account
  2. On mbed Device Connector, go to https://connector.mbed.com/#credentials and click the Get my device security credentials button to get new credentials for your device.
  3. Replace the contents in security.h of this example with content copied above.

Ethernet settings

This sample uses Ethernet as the default connection type. To change the connection type, set WIFI_BP3595 in mbed_app.json:

mbed_app.json

"network-interface":{
    "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_BP3595",
    "value": "ETHERNET"
},


To specify MAC address, add fllowing function to main.cpp. (When using Wifi, setting of MAC address is not necessary.)

Specify MAC address

// set mac address
void mbed_mac_address(char *mac) {
    mac[0] = 0x00;
    mac[1] = 0x02;
    mac[2] = 0xF7;
    mac[3] = 0xF0;
    mac[4] = 0x00;
    mac[5] = 0x00;
}


Wifi settings

This example can use BP3595 Wifi Interface for managing the wireless connectivity. To run this example using Wifi, you need:

  1. A BP3595 Wifi module ( https://developer.mbed.org/components/BP3595-for-GR-PEACH/ )
  2. Mount BP3595 onto GR-PEACH
  3. Close GR-PEACH's JP21 (https://developer.mbed.org/teams/Renesas/wiki/Jumper-settings-of-GR-PEACH)
  4. In the mbed_app.json file, change

mbed_app.json

"network-interface":{
    "help": "Options are ETHERNET, WIFI_ESP8266, WIFI_BP3595",
    "value": "WIFI_BP3595"
},


Provide your Wifi SSID and password here and leave \" in the beginning and end of your SSID and password as shown in the example below:

mbed_app.json

"wifi-ssid": {
    "help": "WiFi SSID",
    "value": "\"SSID\""
},
"wifi-password": {
    "help": "WIFI Password",
    "value": "\"Password\""
}


Specify the security type for connection to be used. When the security type is WPA2, you need to specify NSAPI_SECURITY_WAP as follows:

mbed_app.json

"wifi-security":{
    "help": "Options are NSAPI_SECURITY_WEP, NSAPI_SECURITY_WPA, NSAPI_SECURITY_WPA2, NSAPI_SECURITY_WPA_WPA2",
    "value": "NSAPI_SECURITY_WEP"
},

By default, NSAPI_SECURITY_WPA_WPA2 is specified here.

Application resources

This example exposes four resources listed below:

  1. 3202/0/5700. Recognition result from HVC-P2 (GET).
  2. 3201/0/5850. Blink function, blinks LED when executed (POST).
  3. 3201/0/5853. Blink pattern, used by the blink function to determine how to blink. In the format of 1000:500:1000:500:1000:500 (PUT).
  4. 3201/0/5855. Blink color, used by the blink function. Any of red, green, blue, cyan, yellow and magenta is acceptable (PUT).

For more info on how to get notifications when resource 1 changes, or how to use resource 2, 3 and 4, please look at

Import programGR-PEACH_mbed-connector-ZXingSample-node

Node.js based Web Application for mbed Device Connector specific to GR-PEACH_mbed-os-client-ZXingSample

# This is a Web Application for GR-PEACH_mbed-os-client-ZXingSample, but it can also be used for this sample.

Committer:
dkato
Date:
Tue Mar 14 05:43:50 2017 +0000
Revision:
73:fbc0212c2eaf
Send the data of GR-PEACH_HVC-P2_sample to the cloud.

Who changed what in which revision?

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