Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: NexHardware.cpp
- Revision:
- 1:e4163fd9aa4c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/NexHardware.cpp Mon May 04 17:52:49 2020 +0000
@@ -0,0 +1,253 @@
+/**
+ * @file NexHardware.cpp
+ *
+ * The implementation of base API for using Nextion.
+ *
+ * @author Wu Pengfei (email:<pengfei.wu@itead.cc>)
+ * @date 2015/8/11
+ * @copyright
+ * Copyright (C) 2014-2015 ITEAD Intelligent Systems Co., Ltd. \n
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ */
+#include "NexHardware.h"
+#include "Utilities.h"
+
+#define NEX_RET_CMD_FINISHED (0x01)
+#define NEX_RET_EVENT_LAUNCHED (0x88)
+#define NEX_RET_EVENT_UPGRADED (0x89)
+#define NEX_RET_EVENT_TOUCH_HEAD (0x65)
+#define NEX_RET_EVENT_POSITION_HEAD (0x67)
+#define NEX_RET_EVENT_SLEEP_POSITION_HEAD (0x68)
+#define NEX_RET_CURRENT_PAGE_ID_HEAD (0x66)
+#define NEX_RET_STRING_HEAD (0x70)
+#define NEX_RET_NUMBER_HEAD (0x71)
+#define NEX_RET_INVALID_CMD (0x00)
+#define NEX_RET_INVALID_COMPONENT_ID (0x02)
+#define NEX_RET_INVALID_PAGE_ID (0x03)
+#define NEX_RET_INVALID_PICTURE_ID (0x04)
+#define NEX_RET_INVALID_FONT_ID (0x05)
+#define NEX_RET_INVALID_BAUD (0x11)
+#define NEX_RET_INVALID_VARIABLE (0x1A)
+#define NEX_RET_INVALID_OPERATION (0x1B)
+
+char txt[32];
+char cmd[64];
+char buf[12];
+char msg[32];
+unsigned char wrData;
+
+/*
+ * Receive uint32_t data.
+ *
+ * @param number - save uint32_t data.
+ * @param 100 - set 100 time.
+ *
+ * @retval 1 - success.
+ * @retval 0 - failed.
+ *
+ */
+uint8_t recvRetNumber(uint32_t *number)
+{
+ uint8_t ret = 0;
+ char temp[8];
+
+ if (!number)
+ {
+ goto __return;
+ }
+
+ nexDelay(100);
+ if (8 != nexSerial_readBytes((char *)temp, 8))
+ {
+ goto __return;
+ }
+
+ if (temp[0] == NEX_RET_NUMBER_HEAD && temp[5] == 0xFF && temp[6] == 0xFF && temp[7] == 0xFF)
+ {
+ *number = ((uint32_t)temp[4] << 24) | ((uint32_t)temp[3] << 16) | (temp[2] << 8) | (temp[1]);
+ ret = 1;
+ }
+
+__return:
+
+ /*if (ret)
+ {
+ dbSerialPrint("recvRetNumber :");
+ dbSerialPrintln(*number);
+ }
+ else
+ {
+ dbSerialPrintln("recvRetNumber err");
+ }*/
+
+ return ret;
+}
+
+/*
+ * Receive string data.
+ *
+ * @param buffer - save string data.
+ * @param len - string buffer length.
+ * @param 100 - set 100 time.
+ *
+ * @return the length of string buffer.
+ *
+ */
+uint16_t recvRetString(char *buffer, uint16_t len)
+{
+ uint16_t ret = 0;
+ uint8_t str_start_flag = 0;
+ uint8_t cnt_0xff = 0;
+ char arr[32];
+ char *temp = arr;
+ uint8_t c = 0;
+ long start;
+
+ if (!buffer || len == 0)
+ {
+ goto __return;
+ }
+
+ start = 500;
+ while (start)
+ {
+ while (nexSerial_available())
+ {
+ c = nexSerial_read();
+ if (str_start_flag)
+ {
+ if (0xFF == c)
+ {
+ cnt_0xff++;
+ if (cnt_0xff >= 3)
+ {
+ break;
+ }
+ }
+ else
+ {
+ temp += (char)c;
+ }
+ }
+ else if (NEX_RET_STRING_HEAD == c)
+ {
+ str_start_flag = 1;
+ }
+ }
+
+ if (cnt_0xff >= 3)
+ {
+ break;
+ }
+ --start;
+ }
+
+ ret = ArrayLength(temp);
+ ret = ret > len ? len : ret;
+ strncpy(buffer, temp, ret);
+
+__return:
+ /*
+ dbSerialPrint("recvRetString[");
+ dbSerialPrint(temp.length());
+ dbSerialPrint(",");
+ dbSerialPrint(temp);
+ dbSerialPrintln("]");
+ */
+ return ret;
+}
+
+/*
+ * Command is executed successfully.
+ *
+ * @param 100 - set 100 time.
+ *
+ * @retval 1 - success.
+ * @retval 0 - failed.
+ *
+ */
+uint8_t recvRetCommandFinished()
+{
+ uint8_t ret = 0;
+ uint8_t temp[4] = {0};
+ // nexSerial.set100(100);
+ if (ArrayLength(temp) != nexSerial_readBytes((char *)temp, ArrayLength(temp)))
+ {
+ ret = 0;
+ }
+
+ if (temp[0] == NEX_RET_CMD_FINISHED && temp[1] == 0xFF && temp[2] == 0xFF && temp[3] == 0xFF)
+ {
+ ret = 1;
+ }
+ /*
+ if (ret)
+ {
+ dbSerialPrintln("recvRetCommandFinished ok");
+ }
+ else
+ {
+ dbSerialPrintln("recvRetCommandFinished err");
+ }
+ */
+ return ret;
+}
+
+void sendCommand(char *command)
+{
+ nexSerial_print(command);
+ nexSerial_write(0xFF);
+ nexSerial_write(0xFF);
+ nexSerial_write(0xFF);
+}
+
+uint8_t nexInit(void)
+{
+ uint8_t ret1 = 0;
+ uint8_t ret2 = 0;
+
+ //dbSerialBegin(9600);
+ nexSerial_init(9600);
+ sendCommand("");
+ sendCommand("bkcmd=1");
+ ret1 = recvRetCommandFinished();
+ sendCommand("page 0");
+ ret2 = recvRetCommandFinished();
+ return ret1 && ret2;
+}
+
+void nexLoop(struct NexObject *nex_listen_list[])
+{
+ static uint8_t __buffer[10];
+
+ uint16_t i;
+ uint8_t limit = 20;
+ uint8_t c;
+
+ while (nexSerial_available() > 0)
+ {
+ nexDelay(10);
+ c = nexSerial_read();
+
+ if (NEX_RET_EVENT_TOUCH_HEAD == c)
+ {
+ if (nexSerial_available() >= 6)
+ {
+ __buffer[0] = c;
+ for (i = 1; i < 7; i++)
+ {
+ __buffer[i] = nexSerial_read();
+ }
+ __buffer[i] = 0x00;
+
+ if (0xFF == __buffer[4] && 0xFF == __buffer[5] && 0xFF == __buffer[6])
+ {
+ NexTouch_iterate(nex_listen_list, __buffer[1], __buffer[2], (int32_t)__buffer[3]);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file