DiplayApp library

Dependents:   mbed-os_Watson-IoT_ZXing_sample mbed-os_Watson-IoT_ZXing_sample GR-Boads_Camera_DisplayApp GR-Boads_Camera_DisplayApp ... more

For Windows PC

For Mac

Serial setting

You need to connect your PC and MicroUSB Connector(RZ/A1 Ch.0).

/media/uploads/dkato/usb0_and_button.jpg

Troubleshooting!

If your PC isn't Windows10, you need to install the specified driver from the below URL.
https://os.mbed.com/handbook/USBSerial

Unfortunately, since that is "Unsigned driver", you cannot install as is depending on your Windows version. Since the setting method is different for each PC, please search with "Unsigned driver" keyword on the search site.

トラブルシューティング!

Windows10以外ご使用の場合、ドライバのインストールが必要となります。下記サイトのからドライバーをダウンロードできます。
https://os.mbed.com/handbook/USBSerial

但し、「署名なしドライバ」となっていますので、お使いのWindowsバージョンによってはそのままインストールすることはできません。お使いのPC毎に設定方法が異なるため、検索サイトで「署名なしドライバ」で検索してください。

Committer:
dkato
Date:
Thu Jun 21 09:54:13 2018 +0000
Revision:
5:6c04d9d15395
Parent:
4:3c46efbe6d21
Supports mbed-os 5.9.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:13c1f522bbef 1
dkato 0:13c1f522bbef 2 #include "mbed.h"
dkato 0:13c1f522bbef 3 #include "DisplayApp.h"
dkato 0:13c1f522bbef 4
dkato 0:13c1f522bbef 5 void DisplayApp::display_app_process() {
dkato 0:13c1f522bbef 6 int data;
dkato 0:13c1f522bbef 7 int pos_x_wk;
dkato 0:13c1f522bbef 8 int pos_wk;
dkato 0:13c1f522bbef 9
dkato 4:3c46efbe6d21 10 while (!PcApp.configured()) {
dkato 4:3c46efbe6d21 11 Thread::wait(100);
dkato 4:3c46efbe6d21 12 }
dkato 0:13c1f522bbef 13
dkato 0:13c1f522bbef 14 while (1) {
dkato 4:3c46efbe6d21 15 if (PcApp.readable()) {
dkato 4:3c46efbe6d21 16 data = PcApp.getc();
dkato 1:fdcf2c6a1167 17 if (data == '{') {
dkato 1:fdcf2c6a1167 18 pos_seq = POS_SEQ_START;
dkato 1:fdcf2c6a1167 19 } else if (data == 'X') {
dkato 1:fdcf2c6a1167 20 if (pos_seq == POS_SEQ_START) {
dkato 1:fdcf2c6a1167 21 pos_seq = POS_SEQ_X;
dkato 1:fdcf2c6a1167 22 } else {
dkato 1:fdcf2c6a1167 23 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 24 }
dkato 1:fdcf2c6a1167 25 } else if (data == 'Y') {
dkato 1:fdcf2c6a1167 26 if (pos_seq == POS_SEQ_C) {
dkato 1:fdcf2c6a1167 27 pos_seq = POS_SEQ_Y;
dkato 1:fdcf2c6a1167 28 } else {
dkato 1:fdcf2c6a1167 29 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 30 }
dkato 1:fdcf2c6a1167 31 } else if (data == '=') {
dkato 1:fdcf2c6a1167 32 if (pos_seq == POS_SEQ_X) {
dkato 1:fdcf2c6a1167 33 pos_seq = POS_SEQ_X_POS;
dkato 1:fdcf2c6a1167 34 pos_wk = 0;
dkato 1:fdcf2c6a1167 35 } else if (pos_seq == POS_SEQ_Y) {
dkato 1:fdcf2c6a1167 36 pos_seq = POS_SEQ_Y_POS;
dkato 1:fdcf2c6a1167 37 pos_wk = 0;
dkato 1:fdcf2c6a1167 38 } else {
dkato 1:fdcf2c6a1167 39 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 40 }
dkato 1:fdcf2c6a1167 41 } else if (data == '-') {
dkato 1:fdcf2c6a1167 42 if (pos_seq == POS_SEQ_X_POS) {
dkato 1:fdcf2c6a1167 43 pos_seq = POS_SEQ_X_M;
dkato 1:fdcf2c6a1167 44 } else if (pos_seq == POS_SEQ_Y_POS) {
dkato 1:fdcf2c6a1167 45 pos_seq = POS_SEQ_Y_M;
dkato 1:fdcf2c6a1167 46 } else {
dkato 1:fdcf2c6a1167 47 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 48 }
dkato 1:fdcf2c6a1167 49 } else if ((data >= '0') && (data <= '9')) {
dkato 1:fdcf2c6a1167 50 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_Y_POS)) {
dkato 1:fdcf2c6a1167 51 pos_wk = (pos_wk * 10) + (data - '0');
dkato 1:fdcf2c6a1167 52 } else if ((pos_seq == POS_SEQ_X_M) && (data == '1')) {
dkato 1:fdcf2c6a1167 53 pos_wk = -1;
dkato 1:fdcf2c6a1167 54 } else if ((pos_seq == POS_SEQ_Y_M) && (data == '1')) {
dkato 1:fdcf2c6a1167 55 pos_wk = -1;
dkato 1:fdcf2c6a1167 56 } else {
dkato 1:fdcf2c6a1167 57 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 58 }
dkato 1:fdcf2c6a1167 59 } else if (data == ',') {
dkato 1:fdcf2c6a1167 60 if ((pos_seq == POS_SEQ_X_POS) || (pos_seq == POS_SEQ_X_M)) {
dkato 1:fdcf2c6a1167 61 pos_x_wk = pos_wk;
dkato 1:fdcf2c6a1167 62 pos_seq = POS_SEQ_C;
dkato 1:fdcf2c6a1167 63 } else {
dkato 1:fdcf2c6a1167 64 pos_seq = POS_SEQ_INIT;
dkato 1:fdcf2c6a1167 65 }
dkato 1:fdcf2c6a1167 66 } else if (data == '}') {
dkato 1:fdcf2c6a1167 67 if ((pos_seq == POS_SEQ_Y_POS) || (pos_seq == POS_SEQ_Y_M)) {
dkato 1:fdcf2c6a1167 68 pos_seq = POS_SEQ_END;
dkato 1:fdcf2c6a1167 69 if ((pos_x != pos_x_wk) || (pos_y != pos_wk)) {
dkato 1:fdcf2c6a1167 70 pos_x = pos_x_wk;
dkato 1:fdcf2c6a1167 71 pos_y = pos_wk;
dkato 3:693902c86ca0 72 if (event) {
dkato 3:693902c86ca0 73 event.call();
dkato 3:693902c86ca0 74 }
dkato 1:fdcf2c6a1167 75 }
dkato 1:fdcf2c6a1167 76 } else {
dkato 1:fdcf2c6a1167 77 pos_seq = POS_SEQ_INIT;
dkato 0:13c1f522bbef 78 }
dkato 0:13c1f522bbef 79 } else {
dkato 0:13c1f522bbef 80 pos_seq = POS_SEQ_INIT;
dkato 0:13c1f522bbef 81 }
dkato 0:13c1f522bbef 82 } else {
dkato 1:fdcf2c6a1167 83 Thread::wait(10);
dkato 0:13c1f522bbef 84 }
dkato 0:13c1f522bbef 85 }
dkato 0:13c1f522bbef 86 }
dkato 0:13c1f522bbef 87
dkato 4:3c46efbe6d21 88 DisplayApp::DisplayApp(osPriority tsk_pri, uint32_t stack_size) :
dkato 4:3c46efbe6d21 89 PcApp(0x1f00, 0x2012, 0x0001, false), displayThread(tsk_pri, stack_size) {
dkato 3:693902c86ca0 90 displayThread.start(callback(this, &DisplayApp::display_app_process));
dkato 0:13c1f522bbef 91 }
dkato 0:13c1f522bbef 92
dkato 0:13c1f522bbef 93 void DisplayApp::SendHeader(uint32_t size) {
dkato 0:13c1f522bbef 94 uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
dkato 0:13c1f522bbef 95
dkato 0:13c1f522bbef 96 headder_data[8] = (uint8_t)((uint32_t)size >> 0);
dkato 0:13c1f522bbef 97 headder_data[9] = (uint8_t)((uint32_t)size >> 8);
dkato 0:13c1f522bbef 98 headder_data[10] = (uint8_t)((uint32_t)size >> 16);
dkato 0:13c1f522bbef 99 headder_data[11] = (uint8_t)((uint32_t)size >> 24);
dkato 4:3c46efbe6d21 100 PcApp.writeBlock((uint8_t *)headder_data, sizeof(headder_data));
dkato 0:13c1f522bbef 101 }
dkato 0:13c1f522bbef 102
dkato 0:13c1f522bbef 103 void DisplayApp::SendData(uint8_t * buf, uint32_t size) {
dkato 0:13c1f522bbef 104 int send_size;
dkato 0:13c1f522bbef 105 int send_index = 0;
dkato 0:13c1f522bbef 106
dkato 0:13c1f522bbef 107 while (size > 0) {
dkato 0:13c1f522bbef 108 if (size > MAX_PACKET_SIZE_EPBULK) {
dkato 0:13c1f522bbef 109 send_size = MAX_PACKET_SIZE_EPBULK;
dkato 0:13c1f522bbef 110 } else {
dkato 0:13c1f522bbef 111 send_size = size;
dkato 0:13c1f522bbef 112 }
dkato 4:3c46efbe6d21 113 PcApp.writeBlock(&buf[send_index], send_size);
dkato 0:13c1f522bbef 114 send_index += send_size;
dkato 0:13c1f522bbef 115 size -= send_size;
dkato 0:13c1f522bbef 116 }
dkato 0:13c1f522bbef 117 }
dkato 0:13c1f522bbef 118
dkato 0:13c1f522bbef 119 int DisplayApp::SendRgb888(uint8_t * buf, uint32_t pic_width, uint32_t pic_height) {
dkato 0:13c1f522bbef 120 uint32_t offset_size = 54;
dkato 0:13c1f522bbef 121 uint32_t buf_stride = (((pic_width * 4u) + 31u) & ~31u);
dkato 0:13c1f522bbef 122 uint32_t pic_size = buf_stride * pic_height;
dkato 0:13c1f522bbef 123 uint32_t total_size = pic_size + offset_size;
dkato 0:13c1f522bbef 124 uint8_t wk_bitmap_buf[54];
dkato 0:13c1f522bbef 125 int wk_idx = 0;
dkato 0:13c1f522bbef 126
dkato 4:3c46efbe6d21 127 if (!PcApp.configured()) {
dkato 0:13c1f522bbef 128 return 0;
dkato 0:13c1f522bbef 129 }
dkato 4:3c46efbe6d21 130 if (PcApp._putc(0) == 0) { // terminal connect check
dkato 0:13c1f522bbef 131 return 0;
dkato 0:13c1f522bbef 132 }
dkato 0:13c1f522bbef 133 SendHeader(total_size);
dkato 0:13c1f522bbef 134
dkato 0:13c1f522bbef 135 /* BITMAPFILEHEADER */
dkato 0:13c1f522bbef 136 wk_bitmap_buf[wk_idx++] = 'B';
dkato 0:13c1f522bbef 137 wk_bitmap_buf[wk_idx++] = 'M';
dkato 0:13c1f522bbef 138 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 0); /* bfSize */
dkato 0:13c1f522bbef 139 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 8); /* bfSize */
dkato 0:13c1f522bbef 140 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 16); /* bfSize */
dkato 0:13c1f522bbef 141 wk_bitmap_buf[wk_idx++] = (uint8_t)(total_size >> 24); /* bfSize */
dkato 0:13c1f522bbef 142 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */
dkato 0:13c1f522bbef 143 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved1 */
dkato 0:13c1f522bbef 144 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */
dkato 0:13c1f522bbef 145 wk_bitmap_buf[wk_idx++] = 0; /* bfReserved2 */
dkato 0:13c1f522bbef 146 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 0); /* bfOffBits */
dkato 0:13c1f522bbef 147 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 8); /* bfOffBits */
dkato 0:13c1f522bbef 148 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 16); /* bfOffBits */
dkato 0:13c1f522bbef 149 wk_bitmap_buf[wk_idx++] = (uint8_t)(offset_size >> 24); /* bfOffBits */
dkato 0:13c1f522bbef 150
dkato 0:13c1f522bbef 151 /* BITMAPINFOHEADER */
dkato 0:13c1f522bbef 152 wk_bitmap_buf[wk_idx++] = 40; /* biSize */
dkato 0:13c1f522bbef 153 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
dkato 0:13c1f522bbef 154 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
dkato 0:13c1f522bbef 155 wk_bitmap_buf[wk_idx++] = 0; /* biSize */
dkato 0:13c1f522bbef 156 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 0); /* biWidth */
dkato 0:13c1f522bbef 157 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 8); /* biWidth */
dkato 0:13c1f522bbef 158 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 16); /* biWidth */
dkato 0:13c1f522bbef 159 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_width >> 24); /* biWidth */
dkato 0:13c1f522bbef 160 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 0); /* biHeight */
dkato 0:13c1f522bbef 161 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 8); /* biHeight */
dkato 0:13c1f522bbef 162 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 16); /* biHeight */
dkato 0:13c1f522bbef 163 wk_bitmap_buf[wk_idx++] = (uint8_t)((-(long)pic_height) >> 24); /* biHeight */
dkato 0:13c1f522bbef 164 wk_bitmap_buf[wk_idx++] = 1; /* biPlanes */
dkato 0:13c1f522bbef 165 wk_bitmap_buf[wk_idx++] = 0; /* biPlanes */
dkato 0:13c1f522bbef 166 wk_bitmap_buf[wk_idx++] = 32; /* biBitCount */
dkato 0:13c1f522bbef 167 wk_bitmap_buf[wk_idx++] = 0; /* biBitCount */
dkato 0:13c1f522bbef 168
dkato 0:13c1f522bbef 169 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 170 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 171 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 172 wk_bitmap_buf[wk_idx++] = 0; /* biCopmression */
dkato 0:13c1f522bbef 173 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 0); /* biSizeImage */
dkato 0:13c1f522bbef 174 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 8); /* biSizeImage */
dkato 0:13c1f522bbef 175 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 16); /* biSizeImage */
dkato 0:13c1f522bbef 176 wk_bitmap_buf[wk_idx++] = (uint8_t)(pic_size >> 24); /* biSizeImage */
dkato 0:13c1f522bbef 177 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 178 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 179 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 180 wk_bitmap_buf[wk_idx++] = 0; /* biXPixPerMeter */
dkato 0:13c1f522bbef 181 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 182 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 183 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 184 wk_bitmap_buf[wk_idx++] = 0; /* biYPixPerMeter */
dkato 0:13c1f522bbef 185
dkato 0:13c1f522bbef 186 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 187 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 188 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 189 wk_bitmap_buf[wk_idx++] = 0; /* biClrUsed */
dkato 0:13c1f522bbef 190 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 0:13c1f522bbef 191 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 0:13c1f522bbef 192 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 0:13c1f522bbef 193 wk_bitmap_buf[wk_idx++] = 0; /* biCirImportant */
dkato 4:3c46efbe6d21 194 PcApp.writeBlock(wk_bitmap_buf, wk_idx);
dkato 0:13c1f522bbef 195
dkato 0:13c1f522bbef 196 SendData(buf, pic_size);
dkato 0:13c1f522bbef 197 wk_idx += pic_size;
dkato 0:13c1f522bbef 198
dkato 0:13c1f522bbef 199 return wk_idx;
dkato 0:13c1f522bbef 200 };
dkato 0:13c1f522bbef 201
dkato 3:693902c86ca0 202 void DisplayApp::SetCallback(Callback<void()> func) {
dkato 3:693902c86ca0 203 event = func;
dkato 3:693902c86ca0 204 }
dkato 3:693902c86ca0 205
dkato 0:13c1f522bbef 206 int DisplayApp::SendJpeg(uint8_t * buf, uint32_t size) {
dkato 4:3c46efbe6d21 207 if (!PcApp.configured()) {
dkato 0:13c1f522bbef 208 return 0;
dkato 0:13c1f522bbef 209 }
dkato 4:3c46efbe6d21 210 if (PcApp._putc(0) == 0) { // terminal connect check
dkato 0:13c1f522bbef 211 return 0;
dkato 0:13c1f522bbef 212 }
dkato 0:13c1f522bbef 213 SendHeader(size);
dkato 0:13c1f522bbef 214 SendData(buf, size);
dkato 0:13c1f522bbef 215
dkato 0:13c1f522bbef 216 return size;
dkato 0:13c1f522bbef 217 }
dkato 0:13c1f522bbef 218
dkato 0:13c1f522bbef 219 int DisplayApp::GetMaxTouchNum(void) {
dkato 0:13c1f522bbef 220 return 1;
dkato 0:13c1f522bbef 221 }
dkato 0:13c1f522bbef 222
dkato 0:13c1f522bbef 223 int DisplayApp::GetCoordinates(int touch_buff_num, touch_pos_t * p_touch) {
dkato 0:13c1f522bbef 224 touch_pos_t * wk_touch;
dkato 0:13c1f522bbef 225 int count = 0;
dkato 0:13c1f522bbef 226 int x = pos_x;
dkato 0:13c1f522bbef 227 int y = pos_y;
dkato 0:13c1f522bbef 228
dkato 0:13c1f522bbef 229 if (touch_buff_num > 0) {
dkato 0:13c1f522bbef 230 count = 0;
dkato 0:13c1f522bbef 231 wk_touch = &p_touch[0];
dkato 0:13c1f522bbef 232 wk_touch->valid = false;
dkato 0:13c1f522bbef 233 wk_touch->x = 0;
dkato 0:13c1f522bbef 234 wk_touch->y = 0;
dkato 0:13c1f522bbef 235 if (x >= 0) {
dkato 0:13c1f522bbef 236 count = 1;
dkato 0:13c1f522bbef 237 wk_touch->valid = true;
dkato 0:13c1f522bbef 238 wk_touch->x = (uint32_t)x;
dkato 0:13c1f522bbef 239 }
dkato 0:13c1f522bbef 240 if (y >= 0) {
dkato 0:13c1f522bbef 241 count = 1;
dkato 0:13c1f522bbef 242 wk_touch->valid = true;
dkato 0:13c1f522bbef 243 wk_touch->y = (uint32_t)y;
dkato 0:13c1f522bbef 244 }
dkato 0:13c1f522bbef 245 }
dkato 0:13c1f522bbef 246
dkato 0:13c1f522bbef 247 return count;
dkato 0:13c1f522bbef 248 }