TLMoto / Nextion

Dependents:   Display

Committer:
franciscodias
Date:
Mon May 04 17:52:49 2020 +0000
Revision:
1:e4163fd9aa4c
1234

Who changed what in which revision?

UserRevisionLine numberNew contents of line
franciscodias 1:e4163fd9aa4c 1 /**
franciscodias 1:e4163fd9aa4c 2 * @file NexHardware.cpp
franciscodias 1:e4163fd9aa4c 3 *
franciscodias 1:e4163fd9aa4c 4 * The implementation of base API for using Nextion.
franciscodias 1:e4163fd9aa4c 5 *
franciscodias 1:e4163fd9aa4c 6 * @author Wu Pengfei (email:<pengfei.wu@itead.cc>)
franciscodias 1:e4163fd9aa4c 7 * @date 2015/8/11
franciscodias 1:e4163fd9aa4c 8 * @copyright
franciscodias 1:e4163fd9aa4c 9 * Copyright (C) 2014-2015 ITEAD Intelligent Systems Co., Ltd. \n
franciscodias 1:e4163fd9aa4c 10 * This program is free software; you can redistribute it and/or
franciscodias 1:e4163fd9aa4c 11 * modify it under the terms of the GNU General Public License as
franciscodias 1:e4163fd9aa4c 12 * published by the Free Software Foundation; either version 2 of
franciscodias 1:e4163fd9aa4c 13 * the License, or (at your option) any later version.
franciscodias 1:e4163fd9aa4c 14 */
franciscodias 1:e4163fd9aa4c 15 #include "NexHardware.h"
franciscodias 1:e4163fd9aa4c 16 #include "Utilities.h"
franciscodias 1:e4163fd9aa4c 17
franciscodias 1:e4163fd9aa4c 18 #define NEX_RET_CMD_FINISHED (0x01)
franciscodias 1:e4163fd9aa4c 19 #define NEX_RET_EVENT_LAUNCHED (0x88)
franciscodias 1:e4163fd9aa4c 20 #define NEX_RET_EVENT_UPGRADED (0x89)
franciscodias 1:e4163fd9aa4c 21 #define NEX_RET_EVENT_TOUCH_HEAD (0x65)
franciscodias 1:e4163fd9aa4c 22 #define NEX_RET_EVENT_POSITION_HEAD (0x67)
franciscodias 1:e4163fd9aa4c 23 #define NEX_RET_EVENT_SLEEP_POSITION_HEAD (0x68)
franciscodias 1:e4163fd9aa4c 24 #define NEX_RET_CURRENT_PAGE_ID_HEAD (0x66)
franciscodias 1:e4163fd9aa4c 25 #define NEX_RET_STRING_HEAD (0x70)
franciscodias 1:e4163fd9aa4c 26 #define NEX_RET_NUMBER_HEAD (0x71)
franciscodias 1:e4163fd9aa4c 27 #define NEX_RET_INVALID_CMD (0x00)
franciscodias 1:e4163fd9aa4c 28 #define NEX_RET_INVALID_COMPONENT_ID (0x02)
franciscodias 1:e4163fd9aa4c 29 #define NEX_RET_INVALID_PAGE_ID (0x03)
franciscodias 1:e4163fd9aa4c 30 #define NEX_RET_INVALID_PICTURE_ID (0x04)
franciscodias 1:e4163fd9aa4c 31 #define NEX_RET_INVALID_FONT_ID (0x05)
franciscodias 1:e4163fd9aa4c 32 #define NEX_RET_INVALID_BAUD (0x11)
franciscodias 1:e4163fd9aa4c 33 #define NEX_RET_INVALID_VARIABLE (0x1A)
franciscodias 1:e4163fd9aa4c 34 #define NEX_RET_INVALID_OPERATION (0x1B)
franciscodias 1:e4163fd9aa4c 35
franciscodias 1:e4163fd9aa4c 36 char txt[32];
franciscodias 1:e4163fd9aa4c 37 char cmd[64];
franciscodias 1:e4163fd9aa4c 38 char buf[12];
franciscodias 1:e4163fd9aa4c 39 char msg[32];
franciscodias 1:e4163fd9aa4c 40 unsigned char wrData;
franciscodias 1:e4163fd9aa4c 41
franciscodias 1:e4163fd9aa4c 42 /*
franciscodias 1:e4163fd9aa4c 43 * Receive uint32_t data.
franciscodias 1:e4163fd9aa4c 44 *
franciscodias 1:e4163fd9aa4c 45 * @param number - save uint32_t data.
franciscodias 1:e4163fd9aa4c 46 * @param 100 - set 100 time.
franciscodias 1:e4163fd9aa4c 47 *
franciscodias 1:e4163fd9aa4c 48 * @retval 1 - success.
franciscodias 1:e4163fd9aa4c 49 * @retval 0 - failed.
franciscodias 1:e4163fd9aa4c 50 *
franciscodias 1:e4163fd9aa4c 51 */
franciscodias 1:e4163fd9aa4c 52 uint8_t recvRetNumber(uint32_t *number)
franciscodias 1:e4163fd9aa4c 53 {
franciscodias 1:e4163fd9aa4c 54 uint8_t ret = 0;
franciscodias 1:e4163fd9aa4c 55 char temp[8];
franciscodias 1:e4163fd9aa4c 56
franciscodias 1:e4163fd9aa4c 57 if (!number)
franciscodias 1:e4163fd9aa4c 58 {
franciscodias 1:e4163fd9aa4c 59 goto __return;
franciscodias 1:e4163fd9aa4c 60 }
franciscodias 1:e4163fd9aa4c 61
franciscodias 1:e4163fd9aa4c 62 nexDelay(100);
franciscodias 1:e4163fd9aa4c 63 if (8 != nexSerial_readBytes((char *)temp, 8))
franciscodias 1:e4163fd9aa4c 64 {
franciscodias 1:e4163fd9aa4c 65 goto __return;
franciscodias 1:e4163fd9aa4c 66 }
franciscodias 1:e4163fd9aa4c 67
franciscodias 1:e4163fd9aa4c 68 if (temp[0] == NEX_RET_NUMBER_HEAD && temp[5] == 0xFF && temp[6] == 0xFF && temp[7] == 0xFF)
franciscodias 1:e4163fd9aa4c 69 {
franciscodias 1:e4163fd9aa4c 70 *number = ((uint32_t)temp[4] << 24) | ((uint32_t)temp[3] << 16) | (temp[2] << 8) | (temp[1]);
franciscodias 1:e4163fd9aa4c 71 ret = 1;
franciscodias 1:e4163fd9aa4c 72 }
franciscodias 1:e4163fd9aa4c 73
franciscodias 1:e4163fd9aa4c 74 __return:
franciscodias 1:e4163fd9aa4c 75
franciscodias 1:e4163fd9aa4c 76 /*if (ret)
franciscodias 1:e4163fd9aa4c 77 {
franciscodias 1:e4163fd9aa4c 78 dbSerialPrint("recvRetNumber :");
franciscodias 1:e4163fd9aa4c 79 dbSerialPrintln(*number);
franciscodias 1:e4163fd9aa4c 80 }
franciscodias 1:e4163fd9aa4c 81 else
franciscodias 1:e4163fd9aa4c 82 {
franciscodias 1:e4163fd9aa4c 83 dbSerialPrintln("recvRetNumber err");
franciscodias 1:e4163fd9aa4c 84 }*/
franciscodias 1:e4163fd9aa4c 85
franciscodias 1:e4163fd9aa4c 86 return ret;
franciscodias 1:e4163fd9aa4c 87 }
franciscodias 1:e4163fd9aa4c 88
franciscodias 1:e4163fd9aa4c 89 /*
franciscodias 1:e4163fd9aa4c 90 * Receive string data.
franciscodias 1:e4163fd9aa4c 91 *
franciscodias 1:e4163fd9aa4c 92 * @param buffer - save string data.
franciscodias 1:e4163fd9aa4c 93 * @param len - string buffer length.
franciscodias 1:e4163fd9aa4c 94 * @param 100 - set 100 time.
franciscodias 1:e4163fd9aa4c 95 *
franciscodias 1:e4163fd9aa4c 96 * @return the length of string buffer.
franciscodias 1:e4163fd9aa4c 97 *
franciscodias 1:e4163fd9aa4c 98 */
franciscodias 1:e4163fd9aa4c 99 uint16_t recvRetString(char *buffer, uint16_t len)
franciscodias 1:e4163fd9aa4c 100 {
franciscodias 1:e4163fd9aa4c 101 uint16_t ret = 0;
franciscodias 1:e4163fd9aa4c 102 uint8_t str_start_flag = 0;
franciscodias 1:e4163fd9aa4c 103 uint8_t cnt_0xff = 0;
franciscodias 1:e4163fd9aa4c 104 char arr[32];
franciscodias 1:e4163fd9aa4c 105 char *temp = arr;
franciscodias 1:e4163fd9aa4c 106 uint8_t c = 0;
franciscodias 1:e4163fd9aa4c 107 long start;
franciscodias 1:e4163fd9aa4c 108
franciscodias 1:e4163fd9aa4c 109 if (!buffer || len == 0)
franciscodias 1:e4163fd9aa4c 110 {
franciscodias 1:e4163fd9aa4c 111 goto __return;
franciscodias 1:e4163fd9aa4c 112 }
franciscodias 1:e4163fd9aa4c 113
franciscodias 1:e4163fd9aa4c 114 start = 500;
franciscodias 1:e4163fd9aa4c 115 while (start)
franciscodias 1:e4163fd9aa4c 116 {
franciscodias 1:e4163fd9aa4c 117 while (nexSerial_available())
franciscodias 1:e4163fd9aa4c 118 {
franciscodias 1:e4163fd9aa4c 119 c = nexSerial_read();
franciscodias 1:e4163fd9aa4c 120 if (str_start_flag)
franciscodias 1:e4163fd9aa4c 121 {
franciscodias 1:e4163fd9aa4c 122 if (0xFF == c)
franciscodias 1:e4163fd9aa4c 123 {
franciscodias 1:e4163fd9aa4c 124 cnt_0xff++;
franciscodias 1:e4163fd9aa4c 125 if (cnt_0xff >= 3)
franciscodias 1:e4163fd9aa4c 126 {
franciscodias 1:e4163fd9aa4c 127 break;
franciscodias 1:e4163fd9aa4c 128 }
franciscodias 1:e4163fd9aa4c 129 }
franciscodias 1:e4163fd9aa4c 130 else
franciscodias 1:e4163fd9aa4c 131 {
franciscodias 1:e4163fd9aa4c 132 temp += (char)c;
franciscodias 1:e4163fd9aa4c 133 }
franciscodias 1:e4163fd9aa4c 134 }
franciscodias 1:e4163fd9aa4c 135 else if (NEX_RET_STRING_HEAD == c)
franciscodias 1:e4163fd9aa4c 136 {
franciscodias 1:e4163fd9aa4c 137 str_start_flag = 1;
franciscodias 1:e4163fd9aa4c 138 }
franciscodias 1:e4163fd9aa4c 139 }
franciscodias 1:e4163fd9aa4c 140
franciscodias 1:e4163fd9aa4c 141 if (cnt_0xff >= 3)
franciscodias 1:e4163fd9aa4c 142 {
franciscodias 1:e4163fd9aa4c 143 break;
franciscodias 1:e4163fd9aa4c 144 }
franciscodias 1:e4163fd9aa4c 145 --start;
franciscodias 1:e4163fd9aa4c 146 }
franciscodias 1:e4163fd9aa4c 147
franciscodias 1:e4163fd9aa4c 148 ret = ArrayLength(temp);
franciscodias 1:e4163fd9aa4c 149 ret = ret > len ? len : ret;
franciscodias 1:e4163fd9aa4c 150 strncpy(buffer, temp, ret);
franciscodias 1:e4163fd9aa4c 151
franciscodias 1:e4163fd9aa4c 152 __return:
franciscodias 1:e4163fd9aa4c 153 /*
franciscodias 1:e4163fd9aa4c 154 dbSerialPrint("recvRetString[");
franciscodias 1:e4163fd9aa4c 155 dbSerialPrint(temp.length());
franciscodias 1:e4163fd9aa4c 156 dbSerialPrint(",");
franciscodias 1:e4163fd9aa4c 157 dbSerialPrint(temp);
franciscodias 1:e4163fd9aa4c 158 dbSerialPrintln("]");
franciscodias 1:e4163fd9aa4c 159 */
franciscodias 1:e4163fd9aa4c 160 return ret;
franciscodias 1:e4163fd9aa4c 161 }
franciscodias 1:e4163fd9aa4c 162
franciscodias 1:e4163fd9aa4c 163 /*
franciscodias 1:e4163fd9aa4c 164 * Command is executed successfully.
franciscodias 1:e4163fd9aa4c 165 *
franciscodias 1:e4163fd9aa4c 166 * @param 100 - set 100 time.
franciscodias 1:e4163fd9aa4c 167 *
franciscodias 1:e4163fd9aa4c 168 * @retval 1 - success.
franciscodias 1:e4163fd9aa4c 169 * @retval 0 - failed.
franciscodias 1:e4163fd9aa4c 170 *
franciscodias 1:e4163fd9aa4c 171 */
franciscodias 1:e4163fd9aa4c 172 uint8_t recvRetCommandFinished()
franciscodias 1:e4163fd9aa4c 173 {
franciscodias 1:e4163fd9aa4c 174 uint8_t ret = 0;
franciscodias 1:e4163fd9aa4c 175 uint8_t temp[4] = {0};
franciscodias 1:e4163fd9aa4c 176 // nexSerial.set100(100);
franciscodias 1:e4163fd9aa4c 177 if (ArrayLength(temp) != nexSerial_readBytes((char *)temp, ArrayLength(temp)))
franciscodias 1:e4163fd9aa4c 178 {
franciscodias 1:e4163fd9aa4c 179 ret = 0;
franciscodias 1:e4163fd9aa4c 180 }
franciscodias 1:e4163fd9aa4c 181
franciscodias 1:e4163fd9aa4c 182 if (temp[0] == NEX_RET_CMD_FINISHED && temp[1] == 0xFF && temp[2] == 0xFF && temp[3] == 0xFF)
franciscodias 1:e4163fd9aa4c 183 {
franciscodias 1:e4163fd9aa4c 184 ret = 1;
franciscodias 1:e4163fd9aa4c 185 }
franciscodias 1:e4163fd9aa4c 186 /*
franciscodias 1:e4163fd9aa4c 187 if (ret)
franciscodias 1:e4163fd9aa4c 188 {
franciscodias 1:e4163fd9aa4c 189 dbSerialPrintln("recvRetCommandFinished ok");
franciscodias 1:e4163fd9aa4c 190 }
franciscodias 1:e4163fd9aa4c 191 else
franciscodias 1:e4163fd9aa4c 192 {
franciscodias 1:e4163fd9aa4c 193 dbSerialPrintln("recvRetCommandFinished err");
franciscodias 1:e4163fd9aa4c 194 }
franciscodias 1:e4163fd9aa4c 195 */
franciscodias 1:e4163fd9aa4c 196 return ret;
franciscodias 1:e4163fd9aa4c 197 }
franciscodias 1:e4163fd9aa4c 198
franciscodias 1:e4163fd9aa4c 199 void sendCommand(char *command)
franciscodias 1:e4163fd9aa4c 200 {
franciscodias 1:e4163fd9aa4c 201 nexSerial_print(command);
franciscodias 1:e4163fd9aa4c 202 nexSerial_write(0xFF);
franciscodias 1:e4163fd9aa4c 203 nexSerial_write(0xFF);
franciscodias 1:e4163fd9aa4c 204 nexSerial_write(0xFF);
franciscodias 1:e4163fd9aa4c 205 }
franciscodias 1:e4163fd9aa4c 206
franciscodias 1:e4163fd9aa4c 207 uint8_t nexInit(void)
franciscodias 1:e4163fd9aa4c 208 {
franciscodias 1:e4163fd9aa4c 209 uint8_t ret1 = 0;
franciscodias 1:e4163fd9aa4c 210 uint8_t ret2 = 0;
franciscodias 1:e4163fd9aa4c 211
franciscodias 1:e4163fd9aa4c 212 //dbSerialBegin(9600);
franciscodias 1:e4163fd9aa4c 213 nexSerial_init(9600);
franciscodias 1:e4163fd9aa4c 214 sendCommand("");
franciscodias 1:e4163fd9aa4c 215 sendCommand("bkcmd=1");
franciscodias 1:e4163fd9aa4c 216 ret1 = recvRetCommandFinished();
franciscodias 1:e4163fd9aa4c 217 sendCommand("page 0");
franciscodias 1:e4163fd9aa4c 218 ret2 = recvRetCommandFinished();
franciscodias 1:e4163fd9aa4c 219 return ret1 && ret2;
franciscodias 1:e4163fd9aa4c 220 }
franciscodias 1:e4163fd9aa4c 221
franciscodias 1:e4163fd9aa4c 222 void nexLoop(struct NexObject *nex_listen_list[])
franciscodias 1:e4163fd9aa4c 223 {
franciscodias 1:e4163fd9aa4c 224 static uint8_t __buffer[10];
franciscodias 1:e4163fd9aa4c 225
franciscodias 1:e4163fd9aa4c 226 uint16_t i;
franciscodias 1:e4163fd9aa4c 227 uint8_t limit = 20;
franciscodias 1:e4163fd9aa4c 228 uint8_t c;
franciscodias 1:e4163fd9aa4c 229
franciscodias 1:e4163fd9aa4c 230 while (nexSerial_available() > 0)
franciscodias 1:e4163fd9aa4c 231 {
franciscodias 1:e4163fd9aa4c 232 nexDelay(10);
franciscodias 1:e4163fd9aa4c 233 c = nexSerial_read();
franciscodias 1:e4163fd9aa4c 234
franciscodias 1:e4163fd9aa4c 235 if (NEX_RET_EVENT_TOUCH_HEAD == c)
franciscodias 1:e4163fd9aa4c 236 {
franciscodias 1:e4163fd9aa4c 237 if (nexSerial_available() >= 6)
franciscodias 1:e4163fd9aa4c 238 {
franciscodias 1:e4163fd9aa4c 239 __buffer[0] = c;
franciscodias 1:e4163fd9aa4c 240 for (i = 1; i < 7; i++)
franciscodias 1:e4163fd9aa4c 241 {
franciscodias 1:e4163fd9aa4c 242 __buffer[i] = nexSerial_read();
franciscodias 1:e4163fd9aa4c 243 }
franciscodias 1:e4163fd9aa4c 244 __buffer[i] = 0x00;
franciscodias 1:e4163fd9aa4c 245
franciscodias 1:e4163fd9aa4c 246 if (0xFF == __buffer[4] && 0xFF == __buffer[5] && 0xFF == __buffer[6])
franciscodias 1:e4163fd9aa4c 247 {
franciscodias 1:e4163fd9aa4c 248 NexTouch_iterate(nex_listen_list, __buffer[1], __buffer[2], (int32_t)__buffer[3]);
franciscodias 1:e4163fd9aa4c 249 }
franciscodias 1:e4163fd9aa4c 250 }
franciscodias 1:e4163fd9aa4c 251 }
franciscodias 1:e4163fd9aa4c 252 }
franciscodias 1:e4163fd9aa4c 253 }