mirror of
				https://e.coding.net/weidongshan/01_all_series_quickstart.git
				synced 2025-11-04 13:05:59 +08:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			ec60a9af5b
			...
			24c2643aef
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					24c2643aef | ||
| 
						 | 
					c9f103616c | 
@@ -139,7 +139,10 @@ int read_gps_raw_data(int fd, char *buf)
 | 
			
		||||
				buf[i++] = c;
 | 
			
		||||
			}
 | 
			
		||||
			if (c == '\n' || c == '\r')
 | 
			
		||||
            {
 | 
			
		||||
                buf[i] = '\0';
 | 
			
		||||
				return 0;
 | 
			
		||||
            }
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
@@ -227,6 +230,7 @@ int main(int argc, char **argv)
 | 
			
		||||
		/* parse line */
 | 
			
		||||
		if (iRet == 0)
 | 
			
		||||
		{
 | 
			
		||||
            printf("GPS raw data: %s\n", buf);
 | 
			
		||||
			iRet = parse_gps_raw_data(buf, time, Lat, ns, Lng, ew);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,29 @@
 | 
			
		||||
 | 
			
		||||
# 1. 使用不同的开发板内核时, 一定要修改KERN_DIR
 | 
			
		||||
# 2. KERN_DIR中的内核要事先配置、编译, 为了能编译内核, 要先设置下列环境变量:
 | 
			
		||||
# 2.1 ARCH,          比如: export ARCH=arm64
 | 
			
		||||
# 2.2 CROSS_COMPILE, 比如: export CROSS_COMPILE=aarch64-linux-gnu-
 | 
			
		||||
# 2.3 PATH,          比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 
 | 
			
		||||
# 注意: 不同的开发板不同的编译器上述3个环境变量不一定相同,
 | 
			
		||||
#       请参考各开发板的高级用户使用手册
 | 
			
		||||
 | 
			
		||||
#KERN_DIR =  /home/book/100ask_imx6ull-sdk/Linux-4.9.88 # 板子所用内核源码的目录
 | 
			
		||||
#KERN_DIR =  /home/book/100ask_imx6ull_mini-sdk/Buildroot_2020.02.x/output/build/linux-origin_master
 | 
			
		||||
KERN_DIR =  /home/book/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x/output/build/linux-origin_master
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	make -C $(KERN_DIR) M=`pwd` modules 
 | 
			
		||||
	$(CROSS_COMPILE)gcc -o led_test led_test.c
 | 
			
		||||
clean:
 | 
			
		||||
	make -C $(KERN_DIR) M=`pwd` modules clean
 | 
			
		||||
	rm -rf modules.order  led_test
 | 
			
		||||
 | 
			
		||||
# 参考内核源码drivers/char/ipmi/Makefile
 | 
			
		||||
# 要想把a.c, b.c编译成ab.ko, 可以这样指定:
 | 
			
		||||
# ab-y := a.o b.o
 | 
			
		||||
# obj-m += ab.o
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
obj-m += led_drv.o
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,169 @@
 | 
			
		||||
#include "asm-generic/errno-base.h"
 | 
			
		||||
#include "asm-generic/gpio.h"
 | 
			
		||||
#include "asm/uaccess.h"
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/poll.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/fs.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/miscdevice.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/major.h>
 | 
			
		||||
#include <linux/mutex.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/seq_file.h>
 | 
			
		||||
#include <linux/stat.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <linux/device.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/kmod.h>
 | 
			
		||||
#include <linux/gfp.h>
 | 
			
		||||
#include <linux/gpio/consumer.h>
 | 
			
		||||
#include <linux/platform_device.h>
 | 
			
		||||
#include <linux/of_gpio.h>
 | 
			
		||||
#include <linux/of_irq.h>
 | 
			
		||||
#include <linux/interrupt.h>
 | 
			
		||||
#include <linux/irq.h>
 | 
			
		||||
#include <linux/slab.h>
 | 
			
		||||
#include <linux/fcntl.h>
 | 
			
		||||
#include <linux/timer.h>
 | 
			
		||||
 | 
			
		||||
struct gpio_desc{
 | 
			
		||||
	int gpio;
 | 
			
		||||
	int irq;
 | 
			
		||||
    char *name;
 | 
			
		||||
    int key;
 | 
			
		||||
	struct timer_list key_timer;
 | 
			
		||||
} ;
 | 
			
		||||
 | 
			
		||||
/* STM32MP157有2个LED: PA10控制的LED2, PG8控制的LED3
 | 
			
		||||
 *
 | 
			
		||||
 * cat /sys/class/gpio/gpiochip96/label 可以看到 GPIOG
 | 
			
		||||
 * 所以 PG8'的编号 = 96+8=104
 | 
			
		||||
 *
 | 
			
		||||
 * cat /sys/kernel/debug/gpio : 可以看到 gpio-10, 它被占用了
 | 
			
		||||
 *
 | 
			
		||||
 * 所以我们使用104
 | 
			
		||||
 */
 | 
			
		||||
static struct gpio_desc gpios[] = {
 | 
			
		||||
    {104, 0, "led3", },  
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* 主设备号                                                                 */
 | 
			
		||||
static int major = 0;
 | 
			
		||||
static struct class *gpio_class;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* 实现对应的open/read/write等函数,填入file_operations结构体                   */
 | 
			
		||||
static ssize_t gpio_drv_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
 | 
			
		||||
{
 | 
			
		||||
	char tmp_buf[2];
 | 
			
		||||
	int err;
 | 
			
		||||
    int count = sizeof(gpios)/sizeof(gpios[0]);
 | 
			
		||||
 | 
			
		||||
	if (size != 2)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	err = copy_from_user(tmp_buf, buf, 1);
 | 
			
		||||
 | 
			
		||||
	if (tmp_buf[0] >= count)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	tmp_buf[1] = gpio_get_value(gpios[tmp_buf[0]].gpio);
 | 
			
		||||
 | 
			
		||||
	err = copy_to_user(buf, tmp_buf, 2);
 | 
			
		||||
	
 | 
			
		||||
	return 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ssize_t gpio_drv_write(struct file *file, const char __user *buf, size_t size, loff_t *offset)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char ker_buf[2];
 | 
			
		||||
    int err;
 | 
			
		||||
 | 
			
		||||
    if (size != 2)
 | 
			
		||||
        return -EINVAL;
 | 
			
		||||
 | 
			
		||||
    err = copy_from_user(ker_buf, buf, size);
 | 
			
		||||
    
 | 
			
		||||
    if (ker_buf[0] >= sizeof(gpios)/sizeof(gpios[0]))
 | 
			
		||||
        return -EINVAL;
 | 
			
		||||
 | 
			
		||||
    gpio_set_value(gpios[ker_buf[0]].gpio, ker_buf[1]);
 | 
			
		||||
    return 2;    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* 定义自己的file_operations结构体                                              */
 | 
			
		||||
static struct file_operations gpio_key_drv = {
 | 
			
		||||
	.owner	 = THIS_MODULE,
 | 
			
		||||
	.read    = gpio_drv_read,
 | 
			
		||||
	.write   = gpio_drv_write,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* 在入口函数 */
 | 
			
		||||
static int __init gpio_drv_init(void)
 | 
			
		||||
{
 | 
			
		||||
    int err;
 | 
			
		||||
    int i;
 | 
			
		||||
    int count = sizeof(gpios)/sizeof(gpios[0]);
 | 
			
		||||
    
 | 
			
		||||
	printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
 | 
			
		||||
	
 | 
			
		||||
	for (i = 0; i < count; i++)
 | 
			
		||||
	{		
 | 
			
		||||
		/* set pin as output */
 | 
			
		||||
		err = gpio_request(gpios[i].gpio, gpios[i].name);
 | 
			
		||||
		if (err < 0) {
 | 
			
		||||
			printk("can not request gpio %s %d\n", gpios[i].name, gpios[i].gpio);
 | 
			
		||||
			return -ENODEV;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		gpio_direction_output(gpios[i].gpio, 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* 注册file_operations 	*/
 | 
			
		||||
	major = register_chrdev(0, "100ask_led", &gpio_key_drv);  /* /dev/gpio_desc */
 | 
			
		||||
 | 
			
		||||
	gpio_class = class_create(THIS_MODULE, "100ask_led_class");
 | 
			
		||||
	if (IS_ERR(gpio_class)) {
 | 
			
		||||
		printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
 | 
			
		||||
		unregister_chrdev(major, "100ask_led_class");
 | 
			
		||||
		return PTR_ERR(gpio_class);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	device_create(gpio_class, NULL, MKDEV(major, 0), NULL, "100ask_led"); /* /dev/100ask_gpio */
 | 
			
		||||
	
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 有入口函数就应该有出口函数:卸载驱动程序时,就会去调用这个出口函数
 | 
			
		||||
 */
 | 
			
		||||
static void __exit gpio_drv_exit(void)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
    int count = sizeof(gpios)/sizeof(gpios[0]);
 | 
			
		||||
    
 | 
			
		||||
	printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
 | 
			
		||||
 | 
			
		||||
	device_destroy(gpio_class, MKDEV(major, 0));
 | 
			
		||||
	class_destroy(gpio_class);
 | 
			
		||||
	unregister_chrdev(major, "100ask_led");
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < count; i++)
 | 
			
		||||
	{
 | 
			
		||||
		gpio_free(gpios[i].gpio);		
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* 7. 其他完善:提供设备信息,自动创建设备节点                                     */
 | 
			
		||||
 | 
			
		||||
module_init(gpio_drv_init);
 | 
			
		||||
module_exit(gpio_drv_exit);
 | 
			
		||||
 | 
			
		||||
MODULE_LICENSE("GPL");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,74 @@
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <poll.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
static int fd;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//int led_on(int which);
 | 
			
		||||
//int led_off(int which);
 | 
			
		||||
//int led_status(int which);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ./led_test <0|1|2|..>  on 
 | 
			
		||||
 * ./led_test <0|1|2|..>  off
 | 
			
		||||
 * ./led_test <0|1|2|..>
 | 
			
		||||
 */
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int ret;
 | 
			
		||||
	char buf[2];
 | 
			
		||||
 | 
			
		||||
	int i;
 | 
			
		||||
	
 | 
			
		||||
	/* 1. 判断参数 */
 | 
			
		||||
	if (argc < 2) 
 | 
			
		||||
	{
 | 
			
		||||
		printf("Usage: %s <0|1|2|...> [on | off]\n", argv[0]);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/* 2. 打开文件 */
 | 
			
		||||
	fd = open("/dev/100ask_led", O_RDWR);
 | 
			
		||||
	if (fd == -1)
 | 
			
		||||
	{
 | 
			
		||||
		printf("can not open file /dev/100ask_led\n");
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (argc == 3)
 | 
			
		||||
	{
 | 
			
		||||
		/* write */
 | 
			
		||||
		buf[0] = strtol(argv[1], NULL, 0);
 | 
			
		||||
 | 
			
		||||
		if (strcmp(argv[2], "on") == 0)
 | 
			
		||||
			buf[1] = 0;
 | 
			
		||||
		else
 | 
			
		||||
			buf[1] = 1;
 | 
			
		||||
		
 | 
			
		||||
		ret = write(fd, buf, 2);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		buf[0] = strtol(argv[1], NULL, 0);
 | 
			
		||||
		ret = read(fd, buf, 2);
 | 
			
		||||
		if (ret == 2)
 | 
			
		||||
		{
 | 
			
		||||
			printf("led %d status is %s\n", buf[0], buf[1] == 0 ? "on" : "off");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	close(fd);
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -6,9 +6,14 @@
 | 
			
		||||
cd adbd_files
 | 
			
		||||
cp * / -rf
 | 
			
		||||
 | 
			
		||||
dos2unix /lib/udev/rules.d/61-usb-adbd.rules
 | 
			
		||||
dos2unix /usr/bin/usb_config
 | 
			
		||||
dos2unix /etc/init.d/S99adbd
 | 
			
		||||
 | 
			
		||||
chmod +x /usr/bin/adb
 | 
			
		||||
chmod +x /usr/bin/adbd
 | 
			
		||||
chmod +x /usr/bin/usb_config
 | 
			
		||||
chmod +x  /etc/init.d/S99adbd
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
QT       += core gui
 | 
			
		||||
 | 
			
		||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 | 
			
		||||
 | 
			
		||||
CONFIG += c++11
 | 
			
		||||
 | 
			
		||||
# The following define makes your compiler emit warnings if you use
 | 
			
		||||
# any Qt feature that has been marked deprecated (the exact warnings
 | 
			
		||||
# depend on your compiler). Please consult the documentation of the
 | 
			
		||||
# deprecated API in order to know how to port your code away from it.
 | 
			
		||||
DEFINES += QT_DEPRECATED_WARNINGS
 | 
			
		||||
 | 
			
		||||
# You can also make your code fail to compile if it uses deprecated APIs.
 | 
			
		||||
# In order to do so, uncomment the following line.
 | 
			
		||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
 | 
			
		||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 | 
			
		||||
 | 
			
		||||
SOURCES += \
 | 
			
		||||
    main.cpp \
 | 
			
		||||
    mainwindow.cpp
 | 
			
		||||
 | 
			
		||||
HEADERS += \
 | 
			
		||||
    mainwindow.h
 | 
			
		||||
 | 
			
		||||
FORMS += \
 | 
			
		||||
    mainwindow.ui
 | 
			
		||||
 | 
			
		||||
# Default rules for deployment.
 | 
			
		||||
qnx: target.path = /tmp/$${TARGET}/bin
 | 
			
		||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
 | 
			
		||||
!isEmpty(target.path): INSTALLS += target
 | 
			
		||||
@@ -0,0 +1,338 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE QtCreatorProject>
 | 
			
		||||
<!-- Written by QtCreator 4.12.2, 2025-04-22T05:29:24. -->
 | 
			
		||||
<qtcreator>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>EnvironmentId</variable>
 | 
			
		||||
  <value type="QByteArray">{02215df0-8c5c-48af-80a6-48273a33f310}</value>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>ProjectExplorer.Project.ActiveTarget</variable>
 | 
			
		||||
  <value type="int">0</value>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>ProjectExplorer.Project.EditorSettings</variable>
 | 
			
		||||
  <valuemap type="QVariantMap">
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
 | 
			
		||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
 | 
			
		||||
    <value type="QString" key="language">Cpp</value>
 | 
			
		||||
    <valuemap type="QVariantMap" key="value">
 | 
			
		||||
     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
 | 
			
		||||
    <value type="QString" key="language">QmlJS</value>
 | 
			
		||||
    <valuemap type="QVariantMap" key="value">
 | 
			
		||||
     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
 | 
			
		||||
   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.IndentSize">4</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.TabSize">8</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
 | 
			
		||||
   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
 | 
			
		||||
   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
 | 
			
		||||
  </valuemap>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>ProjectExplorer.Project.PluginSettings</variable>
 | 
			
		||||
  <valuemap type="QVariantMap">
 | 
			
		||||
   <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
 | 
			
		||||
   <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
 | 
			
		||||
   <value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ClangTools">
 | 
			
		||||
    <value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
 | 
			
		||||
    <value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
 | 
			
		||||
    <value type="int" key="ClangTools.ParallelJobs">2</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
 | 
			
		||||
    <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
 | 
			
		||||
    <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
 | 
			
		||||
    <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
  </valuemap>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>ProjectExplorer.Project.Target.0</variable>
 | 
			
		||||
  <valuemap type="QVariantMap">
 | 
			
		||||
   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">100ask</value>
 | 
			
		||||
   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">100ask</value>
 | 
			
		||||
   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{79744cd3-2ede-4774-85eb-8dd996080ebe}</value>
 | 
			
		||||
   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
 | 
			
		||||
   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
 | 
			
		||||
   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
 | 
			
		||||
    <value type="bool">true</value>
 | 
			
		||||
    <value type="int" key="EnableQmlDebugging">0</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/book/build-IOT-100ask-Debug</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/book/build-IOT-100ask-Debug</value>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
 | 
			
		||||
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
 | 
			
		||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
 | 
			
		||||
    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
 | 
			
		||||
    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
 | 
			
		||||
    <value type="int" key="QtQuickCompiler">2</value>
 | 
			
		||||
    <value type="int" key="SeparateDebugInfo">2</value>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
 | 
			
		||||
    <value type="bool">true</value>
 | 
			
		||||
    <value type="int" key="EnableQmlDebugging">2</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/book/build-IOT-100ask-Release</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/book/build-IOT-100ask-Release</value>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
 | 
			
		||||
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
 | 
			
		||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
 | 
			
		||||
    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
 | 
			
		||||
    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
 | 
			
		||||
    <value type="int" key="QtQuickCompiler">0</value>
 | 
			
		||||
    <value type="int" key="SeparateDebugInfo">2</value>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
 | 
			
		||||
    <value type="bool">true</value>
 | 
			
		||||
    <value type="int" key="EnableQmlDebugging">0</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/book/build-IOT-100ask-Profile</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/book/build-IOT-100ask-Profile</value>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
 | 
			
		||||
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
 | 
			
		||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
 | 
			
		||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
 | 
			
		||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
			
		||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
			
		||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
 | 
			
		||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
			
		||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
 | 
			
		||||
     </valuemap>
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
 | 
			
		||||
    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
 | 
			
		||||
    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
 | 
			
		||||
    <value type="int" key="QtQuickCompiler">0</value>
 | 
			
		||||
    <value type="int" key="SeparateDebugInfo">0</value>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
 | 
			
		||||
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
 | 
			
		||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
 | 
			
		||||
    </valuemap>
 | 
			
		||||
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
 | 
			
		||||
    <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
 | 
			
		||||
    <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
 | 
			
		||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
 | 
			
		||||
    <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="Analyzer.Perf.Events">
 | 
			
		||||
     <value type="QString">cpu-cycles</value>
 | 
			
		||||
    </valuelist>
 | 
			
		||||
    <valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
 | 
			
		||||
    <value type="int" key="Analyzer.Perf.Frequency">250</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
 | 
			
		||||
     <value type="QString">-e</value>
 | 
			
		||||
     <value type="QString">cpu-cycles</value>
 | 
			
		||||
     <value type="QString">--call-graph</value>
 | 
			
		||||
     <value type="QString">dwarf,4096</value>
 | 
			
		||||
     <value type="QString">-F</value>
 | 
			
		||||
     <value type="QString">250</value>
 | 
			
		||||
    </valuelist>
 | 
			
		||||
    <value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
 | 
			
		||||
    <value type="int" key="Analyzer.Perf.StackSize">4096</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
 | 
			
		||||
    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
 | 
			
		||||
    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
 | 
			
		||||
    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
 | 
			
		||||
    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
 | 
			
		||||
    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
 | 
			
		||||
    <value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
 | 
			
		||||
    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
 | 
			
		||||
    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
 | 
			
		||||
    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
 | 
			
		||||
    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
 | 
			
		||||
    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
 | 
			
		||||
     <value type="int">0</value>
 | 
			
		||||
     <value type="int">1</value>
 | 
			
		||||
     <value type="int">2</value>
 | 
			
		||||
     <value type="int">3</value>
 | 
			
		||||
     <value type="int">4</value>
 | 
			
		||||
     <value type="int">5</value>
 | 
			
		||||
     <value type="int">6</value>
 | 
			
		||||
     <value type="int">7</value>
 | 
			
		||||
     <value type="int">8</value>
 | 
			
		||||
     <value type="int">9</value>
 | 
			
		||||
     <value type="int">10</value>
 | 
			
		||||
     <value type="int">11</value>
 | 
			
		||||
     <value type="int">12</value>
 | 
			
		||||
     <value type="int">13</value>
 | 
			
		||||
     <value type="int">14</value>
 | 
			
		||||
    </valuelist>
 | 
			
		||||
    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
 | 
			
		||||
    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/book/IOT/IOT.pro</value>
 | 
			
		||||
    <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/book/IOT/IOT.pro</value>
 | 
			
		||||
    <value type="QString" key="RunConfiguration.Arguments"></value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
 | 
			
		||||
    <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
 | 
			
		||||
    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
 | 
			
		||||
    <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
 | 
			
		||||
    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/book/build-IOT-100ask-Debug</value>
 | 
			
		||||
   </valuemap>
 | 
			
		||||
   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
 | 
			
		||||
  </valuemap>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>ProjectExplorer.Project.TargetCount</variable>
 | 
			
		||||
  <value type="int">1</value>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
 | 
			
		||||
  <value type="int">22</value>
 | 
			
		||||
 </data>
 | 
			
		||||
 <data>
 | 
			
		||||
  <variable>Version</variable>
 | 
			
		||||
  <value type="int">22</value>
 | 
			
		||||
 </data>
 | 
			
		||||
</qtcreator>
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
    QApplication a(argc, argv);
 | 
			
		||||
    MainWindow w;
 | 
			
		||||
    w.show();
 | 
			
		||||
    return a.exec();
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,28 @@
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
#include "ui_mainwindow.h"
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
MainWindow::MainWindow(QWidget *parent)
 | 
			
		||||
    : QMainWindow(parent)
 | 
			
		||||
    , ui(new Ui::MainWindow)
 | 
			
		||||
{
 | 
			
		||||
    ui->setupUi(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MainWindow::~MainWindow()
 | 
			
		||||
{
 | 
			
		||||
    delete ui;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_pushButton_clicked()
 | 
			
		||||
{
 | 
			
		||||
    /* burn button */
 | 
			
		||||
    qDebug() << "Burn Button clicked!";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_pushButton_2_clicked()
 | 
			
		||||
{
 | 
			
		||||
    /* test button */
 | 
			
		||||
    qDebug() << "Test Button clicked!";
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
#ifndef MAINWINDOW_H
 | 
			
		||||
#define MAINWINDOW_H
 | 
			
		||||
 | 
			
		||||
#include <QMainWindow>
 | 
			
		||||
 | 
			
		||||
QT_BEGIN_NAMESPACE
 | 
			
		||||
namespace Ui { class MainWindow; }
 | 
			
		||||
QT_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
class MainWindow : public QMainWindow
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    MainWindow(QWidget *parent = nullptr);
 | 
			
		||||
    ~MainWindow();
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
    void on_pushButton_clicked();
 | 
			
		||||
 | 
			
		||||
    void on_pushButton_2_clicked();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Ui::MainWindow *ui;
 | 
			
		||||
};
 | 
			
		||||
#endif // MAINWINDOW_H
 | 
			
		||||
@@ -0,0 +1,58 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ui version="4.0">
 | 
			
		||||
 <class>MainWindow</class>
 | 
			
		||||
 <widget class="QMainWindow" name="MainWindow">
 | 
			
		||||
  <property name="geometry">
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>800</width>
 | 
			
		||||
    <height>600</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
   <string>MainWindow</string>
 | 
			
		||||
  </property>
 | 
			
		||||
  <widget class="QWidget" name="centralwidget">
 | 
			
		||||
   <widget class="QPushButton" name="pushButton">
 | 
			
		||||
    <property name="geometry">
 | 
			
		||||
     <rect>
 | 
			
		||||
      <x>140</x>
 | 
			
		||||
      <y>210</y>
 | 
			
		||||
      <width>161</width>
 | 
			
		||||
      <height>91</height>
 | 
			
		||||
     </rect>
 | 
			
		||||
    </property>
 | 
			
		||||
    <property name="text">
 | 
			
		||||
     <string>Burn</string>
 | 
			
		||||
    </property>
 | 
			
		||||
   </widget>
 | 
			
		||||
   <widget class="QPushButton" name="pushButton_2">
 | 
			
		||||
    <property name="geometry">
 | 
			
		||||
     <rect>
 | 
			
		||||
      <x>350</x>
 | 
			
		||||
      <y>210</y>
 | 
			
		||||
      <width>161</width>
 | 
			
		||||
      <height>91</height>
 | 
			
		||||
     </rect>
 | 
			
		||||
    </property>
 | 
			
		||||
    <property name="text">
 | 
			
		||||
     <string>Test</string>
 | 
			
		||||
    </property>
 | 
			
		||||
   </widget>
 | 
			
		||||
  </widget>
 | 
			
		||||
  <widget class="QMenuBar" name="menubar">
 | 
			
		||||
   <property name="geometry">
 | 
			
		||||
    <rect>
 | 
			
		||||
     <x>0</x>
 | 
			
		||||
     <y>0</y>
 | 
			
		||||
     <width>800</width>
 | 
			
		||||
     <height>22</height>
 | 
			
		||||
    </rect>
 | 
			
		||||
   </property>
 | 
			
		||||
  </widget>
 | 
			
		||||
  <widget class="QStatusBar" name="statusbar"/>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
1.编译jimtcl
 | 
			
		||||
unzip jimtcl-master.zip
 | 
			
		||||
cd jimtcl-master/
 | 
			
		||||
ls
 | 
			
		||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
ls tmp/
 | 
			
		||||
 | 
			
		||||
2.编译libusb
 | 
			
		||||
unzip libusb-1.0.28.zip
 | 
			
		||||
cd libusb-1.0.28/
 | 
			
		||||
./bootstrap.sh
 | 
			
		||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
3.编译openocd
 | 
			
		||||
命令如下:
 | 
			
		||||
unzip openocd-master.zip
 | 
			
		||||
cd  unzip openocd-master
 | 
			
		||||
./bootstrap
 | 
			
		||||
 | 
			
		||||
JIMTCL_CFLAGS="-I /home/book/openocd/jimtcl-master/tmp/include"  JIMTCL_LIBS="-L/home/book/openocd/jimtcl-master/tmp/lib  /home/book/openocd/jimtcl-master/tmp/lib/libjim.a"   LIBUSB1_CFLAGS="-I /home/book/openocd/libusb-1.0.28/tmp/include/libusb-1.0/"  LIBUSB1_LIBS="-L/home/book/openocd/libusb-1.0.28/tmp/lib -lusb-1.0" ./configure --host=arm-buildroot-linux-gnueabihf  --enable-stlink --prefix=$PWD/tmp
 | 
			
		||||
 | 
			
		||||
make  // 会在最后链接时出错, 手工执行下面的链接命令
 | 
			
		||||
 | 
			
		||||
arm-buildroot-linux-gnueabihf-gcc -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Wpointer-arith -Wundef -Werror -g -O2 -o src/openocd src/main.o  src/.libs/libopenocd.a -L/home/book/openocd/libusb-1.0.28/tmp/lib /home/book/openocd/libusb-1.0.28/tmp/lib/libusb-1.0.so   -lpthread -lm -L/home/book/openocd/jimtcl-master/tmp/lib /home/book/openocd/jimtcl-master/tmp/lib/libjim.a -lutil -ldl -pthread -Wl,-rpath -Wl,/home/book/openocd/libusb-1.0.28/tmp/lib  -lssl -lz -lcrypto
 | 
			
		||||
 | 
			
		||||
make install
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <modbus.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#define DO_BEEP1 0
 | 
			
		||||
#define DO_BEEP2 1
 | 
			
		||||
#define DO_LED1 2
 | 
			
		||||
#define DO_LED2 3
 | 
			
		||||
#define DO_LED3 4
 | 
			
		||||
#define AI_TEMP 0
 | 
			
		||||
#define AI_HUMI 1
 | 
			
		||||
 | 
			
		||||
void usage(const char *progname) {
 | 
			
		||||
    printf("Usage: %s <device> <command>\n", progname);
 | 
			
		||||
    printf("Commands:\n");
 | 
			
		||||
    printf("  beep1 on/off\n");
 | 
			
		||||
    printf("  beep2 on/off\n");
 | 
			
		||||
    printf("  led1 on/off\n");
 | 
			
		||||
    printf("  led2 on/off\n");
 | 
			
		||||
    printf("  led3 on/off\n");
 | 
			
		||||
    printf("  temp\n");
 | 
			
		||||
    printf("  humi\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
 | 
			
		||||
    return modbus_write_bit(ctx, addr, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
 | 
			
		||||
    uint16_t reg;
 | 
			
		||||
    int rc = modbus_read_registers(ctx, addr, 1, ®);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    *value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[]) {
 | 
			
		||||
    if (argc < 3) {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_t *ctx;
 | 
			
		||||
    int rc;
 | 
			
		||||
 | 
			
		||||
    // 创建Modbus上下文
 | 
			
		||||
    ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
 | 
			
		||||
    if (ctx == NULL) {
 | 
			
		||||
        fprintf(stderr, "Unable to create the libmodbus context\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 连接到Modbus设备
 | 
			
		||||
    if (modbus_connect(ctx) == -1) {
 | 
			
		||||
        fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (strcmp(argv[2], "beep1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "beep2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led3") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "temp") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float temp;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_TEMP, &temp);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Temperature: %.1f C\n", temp);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (strcmp(argv[2], "humi") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float humi;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_HUMI, &humi);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Humidity: %.1f %%\n", humi);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "%s\n", modbus_strerror(errno));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 关闭连接并释放资源
 | 
			
		||||
    modbus_close(ctx);
 | 
			
		||||
    modbus_free(ctx);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
arm-buildroot-linux-gnueabihf-gcc -I /home/book/sensor_test/libmodbus-3.1.10/tmp/include/modbus -L/home/book/sensor_test/libmodbus-3.1.10/tmp/lib -lmodbus  -o sensor_test sensor_test.c
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,140 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <modbus.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#define DO_BEEP1 0
 | 
			
		||||
#define DO_BEEP2 1
 | 
			
		||||
#define DO_LED1 2
 | 
			
		||||
#define DO_LED2 3
 | 
			
		||||
#define DO_LED3 4
 | 
			
		||||
#define AI_TEMP 0
 | 
			
		||||
#define AI_HUMI 1
 | 
			
		||||
 | 
			
		||||
void usage(const char *progname) {
 | 
			
		||||
    printf("Usage: %s <device> <command>\n", progname);
 | 
			
		||||
    printf("Commands:\n");
 | 
			
		||||
    printf("  beep1 on/off\n");
 | 
			
		||||
    printf("  beep2 on/off\n");
 | 
			
		||||
    printf("  led1 on/off\n");
 | 
			
		||||
    printf("  led2 on/off\n");
 | 
			
		||||
    printf("  led3 on/off\n");
 | 
			
		||||
    printf("  temp\n");
 | 
			
		||||
    printf("  humi\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
 | 
			
		||||
    return modbus_write_bit(ctx, addr, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
 | 
			
		||||
    uint16_t reg;
 | 
			
		||||
    int rc = modbus_read_registers(ctx, addr, 1, ®);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    *value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[]) {
 | 
			
		||||
    if (argc < 3) {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_t *ctx;
 | 
			
		||||
    int rc;
 | 
			
		||||
 | 
			
		||||
    // 创建Modbus上下文
 | 
			
		||||
    ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
 | 
			
		||||
    if (ctx == NULL) {
 | 
			
		||||
        fprintf(stderr, "Unable to create the libmodbus context\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_set_debug(ctx, TRUE);
 | 
			
		||||
    
 | 
			
		||||
    // 设置Modbus从站地址为3
 | 
			
		||||
    rc = modbus_set_slave(ctx, 3);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "Failed to set slave address: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // 连接到Modbus设备
 | 
			
		||||
    if (modbus_connect(ctx) == -1) {
 | 
			
		||||
        fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (strcmp(argv[2], "beep1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "beep2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led3") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "temp") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float temp;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_TEMP, &temp);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Temperature: %.1f C\n", temp);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (strcmp(argv[2], "humi") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float humi;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_HUMI, &humi);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Humidity: %.1f %%\n", humi);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "%s\n", modbus_strerror(errno));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 关闭连接并释放资源
 | 
			
		||||
    modbus_close(ctx);
 | 
			
		||||
    modbus_free(ctx);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,924 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2016 Freescale Semiconductor, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/dts-v1/;
 | 
			
		||||
 | 
			
		||||
#include <dt-bindings/input/input.h>
 | 
			
		||||
#include "imx6ull.dtsi"
 | 
			
		||||
 | 
			
		||||
/ {
 | 
			
		||||
    model = "Freescale i.MX6 ULL 14x14 EVK Board";
 | 
			
		||||
    compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
 | 
			
		||||
 | 
			
		||||
    chosen {
 | 
			
		||||
        stdout-path = &uart1;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    memory {
 | 
			
		||||
        reg = <0x80000000 0x20000000>;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    reserved-memory {
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <1>;
 | 
			
		||||
        ranges;
 | 
			
		||||
 | 
			
		||||
        linux,cma {
 | 
			
		||||
            compatible = "shared-dma-pool";
 | 
			
		||||
            reusable;
 | 
			
		||||
            size = <0x14000000>;
 | 
			
		||||
            linux,cma-default;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    backlight {
 | 
			
		||||
        compatible = "pwm-backlight";
 | 
			
		||||
        pwms = <&pwm1 0 1000>;
 | 
			
		||||
        brightness-levels = <0 1 2 3 4 5 6 8 10>;
 | 
			
		||||
        default-brightness-level = <8>;
 | 
			
		||||
        status = "okay";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    pxp_v4l2 {
 | 
			
		||||
        compatible = "fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2";
 | 
			
		||||
        status = "okay";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    regulators {
 | 
			
		||||
        compatible = "simple-bus";
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
        reg_can_3v3: regulator@0 {
 | 
			
		||||
            compatible = "regulator-fixed";
 | 
			
		||||
            reg = <0>;
 | 
			
		||||
            regulator-name = "can-3v3";
 | 
			
		||||
            regulator-min-microvolt = <3300000>;
 | 
			
		||||
            regulator-max-microvolt = <3300000>;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        reg_usb_ltemodule: regulator@1 {
 | 
			
		||||
            compatible = "regulator-fixed";
 | 
			
		||||
            regulator-name = "ltemodule-pwr";
 | 
			
		||||
            regulator-min-microvolt = <3800000>;
 | 
			
		||||
            regulator-max-microvolt = <3800000>;
 | 
			
		||||
            gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;
 | 
			
		||||
            enable-active-high;
 | 
			
		||||
            regulator-boot-on;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        reg_gpio_wifi: regulator@2 {
 | 
			
		||||
            compatible = "regulator-fixed";
 | 
			
		||||
            regulator-name = "wifi-pwr";
 | 
			
		||||
            regulator-min-microvolt = <3300000>;
 | 
			
		||||
            regulator-max-microvolt = <3300000>;
 | 
			
		||||
            gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            regulator-boot-on;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    leds {
 | 
			
		||||
        compatible = "gpio-leds";
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
        pinctrl-0 = <&pinctrl_leds>;
 | 
			
		||||
        
 | 
			
		||||
        status = "disabled";
 | 
			
		||||
 | 
			
		||||
        led0: cpu {
 | 
			
		||||
            label = "cpu";
 | 
			
		||||
            gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            default-state = "on";
 | 
			
		||||
            linux,default-trigger = "heartbeat";
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    gpio-keys {
 | 
			
		||||
        compatible = "gpio-keys";
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
 | 
			
		||||
        user1 {
 | 
			
		||||
            label = "User1 Button";
 | 
			
		||||
            gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            gpio-key,wakeup;
 | 
			
		||||
            linux,code = <KEY_1>;
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        user2 {
 | 
			
		||||
            label = "User2 Button";
 | 
			
		||||
            gpios = <&gpio4 14 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            gpio-key,wakeup;
 | 
			
		||||
            linux,code = <KEY_2>;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    sound {
 | 
			
		||||
            compatible = "fsl,imx6ul-evk-wm8960",
 | 
			
		||||
                     "fsl,imx-audio-wm8960";
 | 
			
		||||
            model = "wm8960-audio";
 | 
			
		||||
            cpu-dai = <&sai2>;
 | 
			
		||||
            audio-codec = <&codec>;
 | 
			
		||||
            asrc-controller = <&asrc>;
 | 
			
		||||
            codec-master;
 | 
			
		||||
            gpr = <&gpr 4 0x100000 0x100000>;
 | 
			
		||||
            hp-det = <3 0>;
 | 
			
		||||
            /*hp-det-gpios = <&gpio5 4 0>;
 | 
			
		||||
            mic-det-gpios = <&gpio5 4 0>;*/
 | 
			
		||||
            audio-routing =
 | 
			
		||||
                "Headphone Jack", "HP_L",
 | 
			
		||||
                "Headphone Jack", "HP_R",
 | 
			
		||||
                "Ext Spk", "SPK_LP",
 | 
			
		||||
                "Ext Spk", "SPK_LN",
 | 
			
		||||
                "Ext Spk", "SPK_RP",
 | 
			
		||||
                "Ext Spk", "SPK_RN",
 | 
			
		||||
                "LINPUT2", "Mic Jack",
 | 
			
		||||
                "LINPUT3", "Mic Jack",
 | 
			
		||||
                "RINPUT1", "Main MIC",
 | 
			
		||||
                "RINPUT2", "Main MIC",  
 | 
			
		||||
                "Mic Jack", "MICB",
 | 
			
		||||
                "Main MIC", "MICB",
 | 
			
		||||
                "CPU-Playback", "ASRC-Playback",
 | 
			
		||||
                "Playback", "CPU-Playback",
 | 
			
		||||
                "ASRC-Capture", "CPU-Capture",
 | 
			
		||||
                "CPU-Capture", "Capture";
 | 
			
		||||
                status = "okay";
 | 
			
		||||
        };
 | 
			
		||||
    
 | 
			
		||||
    spi4 {
 | 
			
		||||
        compatible = "spi-gpio";
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
        pinctrl-0 = <&pinctrl_spi4>;
 | 
			
		||||
        pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
 | 
			
		||||
        status = "okay";
 | 
			
		||||
        gpio-sck = <&gpio5 11 0>;
 | 
			
		||||
        gpio-mosi = <&gpio5 10 0>;
 | 
			
		||||
        cs-gpios = <&gpio5 7 0>;
 | 
			
		||||
        num-chipselects = <1>;
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
        gpio_spi: gpio_spi@0 {
 | 
			
		||||
            compatible = "fairchild,74hc595";
 | 
			
		||||
            gpio-controller;
 | 
			
		||||
            #gpio-cells = <2>;
 | 
			
		||||
            reg = <0>;
 | 
			
		||||
            registers-number = <1>;
 | 
			
		||||
            registers-default = /bits/ 8 <0x57>;
 | 
			
		||||
            spi-max-frequency = <10000>;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    sii902x_reset: sii902x-reset {
 | 
			
		||||
            compatible = "gpio-reset";
 | 
			
		||||
            reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            reset-delay-us = <100000>;
 | 
			
		||||
            #reset-cells = <0>;
 | 
			
		||||
            status = "okay";
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&gpmi{
 | 
			
		||||
    status = "disabled";
 | 
			
		||||
};
 | 
			
		||||
&cpu0 {
 | 
			
		||||
    arm-supply = <®_arm>;
 | 
			
		||||
    soc-supply = <®_soc>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&clks {
 | 
			
		||||
    assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
 | 
			
		||||
    assigned-clock-rates = <786432000>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&fec1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_enet1>;
 | 
			
		||||
    phy-mode = "rmii";
 | 
			
		||||
    phy-handle = <ðphy0>;
 | 
			
		||||
    phy-reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    phy-reset-duration = <26>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&fec2 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_enet2>;
 | 
			
		||||
    phy-mode = "rmii";
 | 
			
		||||
    phy-handle = <ðphy1>;
 | 
			
		||||
    phy-reset-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    phy-reset-duration = <26>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
 | 
			
		||||
    mdio {
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
        ethphy0: ethernet-phy@0 {
 | 
			
		||||
            compatible = "ethernet-phy-ieee802.3-c22";
 | 
			
		||||
            smsc,disable-energy-detect;
 | 
			
		||||
            reg = <0>;
 | 
			
		||||
        };
 | 
			
		||||
        ethphy1: ethernet-phy@1 {
 | 
			
		||||
            compatible = "ethernet-phy-ieee802.3-c22";
 | 
			
		||||
            smsc,disable-energy-detect;
 | 
			
		||||
            reg = <1>;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&flexcan1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_flexcan1>;
 | 
			
		||||
    xceiver-supply = <®_can_3v3>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
&gpc {
 | 
			
		||||
    fsl,cpu_pupscr_sw2iso = <0x1>;
 | 
			
		||||
    fsl,cpu_pupscr_sw = <0x0>;
 | 
			
		||||
    fsl,cpu_pdnscr_iso2sw = <0x1>;
 | 
			
		||||
    fsl,cpu_pdnscr_iso = <0x1>;
 | 
			
		||||
    fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&i2c1 {
 | 
			
		||||
    clock-frequency = <100000>;
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_i2c1>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&i2c2 {
 | 
			
		||||
    clock_frequency = <100000>;
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_i2c2>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
 | 
			
		||||
    codec: wm8960@1a {
 | 
			
		||||
        compatible = "wlf,wm8960";
 | 
			
		||||
        reg = <0x1a>;
 | 
			
		||||
        clocks = <&clks IMX6UL_CLK_SAI2>;
 | 
			
		||||
        clock-names = "mclk";
 | 
			
		||||
        wlf,shared-lrclk;
 | 
			
		||||
        };
 | 
			
		||||
         sii902x: sii902x@39 {
 | 
			
		||||
                 compatible = "SiI,sii902x";
 | 
			
		||||
                 pinctrl-names = "default";
 | 
			
		||||
                 reset-names="sii902x";
 | 
			
		||||
                 pinctrl-0 = <&pinctrl_sii902x>;
 | 
			
		||||
                 resets = <&sii902x_reset>;
 | 
			
		||||
                 interrupt-parent = <&gpio1>;
 | 
			
		||||
                 interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
 | 
			
		||||
                 mode_str ="1280x720M@60";
 | 
			
		||||
                 bits-per-pixel = <16>;
 | 
			
		||||
                 reg = <0x39>;
 | 
			
		||||
                 status = "okay";    
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        gt9xx@5d {
 | 
			
		||||
                compatible = "goodix,gt9xx";
 | 
			
		||||
                reg = <0x5d>;
 | 
			
		||||
                status = "okay";
 | 
			
		||||
                interrupt-parent = <&gpio1>;
 | 
			
		||||
                interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
 | 
			
		||||
                pinctrl-names = "default";
 | 
			
		||||
                pinctrl-0 = <&pinctrl_tsc_reset &pinctrl_touchscreen_int>;
 | 
			
		||||
                /*pinctrl-1 = <&pinctrl_tsc_irq>;*/
 | 
			
		||||
                /*pinctrl-names = "default", "int-output-low", "int-output-high", "int-input";
 | 
			
		||||
                pinctrl-0 = <&ts_int_default>;
 | 
			
		||||
                pinctrl-1 = <&ts_int_output_low>;
 | 
			
		||||
                pinctrl-2 = <&ts_int_output_high>;
 | 
			
		||||
                pinctrl-3 = <&ts_int_input>;
 | 
			
		||||
                */
 | 
			
		||||
                reset-gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;
 | 
			
		||||
                irq-gpios = <&gpio1 5 IRQ_TYPE_EDGE_FALLING>;
 | 
			
		||||
                irq-flags = <2>;                /*1:rising 2: falling*/
 | 
			
		||||
 | 
			
		||||
                touchscreen-max-id = <5>;
 | 
			
		||||
                touchscreen-size-x = <800>;
 | 
			
		||||
                touchscreen-size-y = <480>;
 | 
			
		||||
                touchscreen-max-w = <1024>;
 | 
			
		||||
                touchscreen-max-p = <1024>;
 | 
			
		||||
                /*touchscreen-key-map = <172>, <158>;*/ /*KEY_HOMEPAGE, KEY_BACK*/
 | 
			
		||||
 | 
			
		||||
                goodix,type-a-report = <0>;
 | 
			
		||||
                goodix,driver-send-cfg = <0>;
 | 
			
		||||
                goodix,create-wr-node = <1>;
 | 
			
		||||
                goodix,wakeup-with-reset = <0>;
 | 
			
		||||
                goodix,resume-in-workqueue = <0>;
 | 
			
		||||
                goodix,int-sync = <0>;
 | 
			
		||||
                goodix,swap-x2y = <0>;
 | 
			
		||||
                goodix,esd-protect = <0>;
 | 
			
		||||
                goodix,pen-suppress-finger = <0>;
 | 
			
		||||
                goodix,auto-update = <0>;
 | 
			
		||||
                goodix,auto-update-cfg = <0>;
 | 
			
		||||
                goodix,power-off-sleep = <0>;
 | 
			
		||||
 | 
			
		||||
                /*7*/
 | 
			
		||||
                goodix,cfg-group0 = [
 | 
			
		||||
                6b 00 04 58 02 05 0d 00 01 0f 
 | 
			
		||||
                28 0f 50 32 03 05 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 8a 2a 0c 
 | 
			
		||||
                45 47 0c 08 00 00 00 40 03 2c 
 | 
			
		||||
                00 01 00 00 00 03 64 32 00 00 
 | 
			
		||||
                00 28 64 94 d5 02 07 00 00 04 
 | 
			
		||||
                95 2c 00 8b 34 00 82 3f 00 7d 
 | 
			
		||||
                4c 00 7a 5b 00 7a 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 18 16 14 12 10 0e 0c 0a 
 | 
			
		||||
                08 06 04 02 ff ff 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 16 18 1c 1d 1e 1f 20 21 
 | 
			
		||||
                22 24 13 12 10 0f 0a 08 06 04 
 | 
			
		||||
                02 00 ff ff ff ff ff ff 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 00 00 79 01
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
                /*4.3*/
 | 
			
		||||
                goodix,cfg-group1 = [
 | 
			
		||||
                97 E0 01 10 01 05 0D 00 01 00
 | 
			
		||||
                00 05 5A 46 53 11 00 00 11 11
 | 
			
		||||
                14 14 14 22 0A 04 00 00 00 00
 | 
			
		||||
                00 00 53 00 14 00 00 84 00 00
 | 
			
		||||
                3C 00 00 64 1E 28 87 27 08 32
 | 
			
		||||
                34 05 0D 20 33 60 11 02 24 00
 | 
			
		||||
                00 64 80 80 14 02 00 00 54 89
 | 
			
		||||
                68 85 6D 82 72 80 76 7D 7B 7B
 | 
			
		||||
                00 00 00 00 00 00 00 F0 50 3C
 | 
			
		||||
                FF FF 07 00 00 00 02 14 14 03
 | 
			
		||||
                04 00 21 64 0A 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                32 20 50 3C 3C 00 00 00 00 00
 | 
			
		||||
                0D 06 0C 05 0B 04 0A 03 FF FF
 | 
			
		||||
                FF FF FF FF 00 01 02 03 04 05
 | 
			
		||||
                06 07 08 09 0A 0B 0C 0D FF FF
 | 
			
		||||
                FF FF FF FF FF FF FF FF FF FF
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 3C 00 05 1E 00 02
 | 
			
		||||
                2A 1E 19 14 02 00 03 0A 05 00
 | 
			
		||||
                00 00 00 00 00 00 01 FF FF 86
 | 
			
		||||
                22 03 00 00 33 00 0F 00 00 00
 | 
			
		||||
                50 3C 50 00 00 00 00 2A 01
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
                /*5*/
 | 
			
		||||
                goodix,cfg-group2 = [
 | 
			
		||||
                00 20 03 E0 01 05 3C 00 01 08
 | 
			
		||||
                28 0C 50 32 03 05 00 00 00 00
 | 
			
		||||
                00 00 00 17 19 1E 14 8B 2B 0D
 | 
			
		||||
                33 35 0C 08 00 00 00 9A 03 11
 | 
			
		||||
                00 01 00 00 00 00 00 32 00 00
 | 
			
		||||
                00 20 58 94 C5 02 00 00 00 04
 | 
			
		||||
                B0 23 00 93 2B 00 7B 35 00 69
 | 
			
		||||
                41 00 5B 4F 00 5B 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 02 04 06 08 0A 0C 0E 10
 | 
			
		||||
                12 14 16 18 1A FF 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 02 04 06 08 0A 0C 0F
 | 
			
		||||
                10 12 13 16 18 1C 1D 1E 1F 20
 | 
			
		||||
                21 22 24 26 FF FF FF FF 00 00
 | 
			
		||||
                00 FF FF FF FF FF FF FF FF FF
 | 
			
		||||
                FF FF FF FF 48 01
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&iomuxc {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_hog_1>;
 | 
			
		||||
    imx6ul-evk {
 | 
			
		||||
        pinctrl_hog_1: hoggrp-1 {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART1_RTS_B__GPIO1_IO19   0x17059 /* SD1 CD */
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID    0x17059 /* USB OTG1 ID */
 | 
			
		||||
                // MX6UL_PAD_CSI_DATA07__GPIO4_IO28           0x000010B0
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER5__GPIO5_IO05        0x000110A0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
                pinctrl_sii902x: hdmigrp {
 | 
			
		||||
                fsl,pins = <
 | 
			
		||||
                        MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x59
 | 
			
		||||
                            >;
 | 
			
		||||
            };
 | 
			
		||||
                pinctrl_touchscreen_int: lcdif_tsc_int {
 | 
			
		||||
                fsl,pins = <
 | 
			
		||||
                        MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x000010B0
 | 
			
		||||
                            >;
 | 
			
		||||
                        };
 | 
			
		||||
        pinctrl_enet1: enet1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_enet2: enet2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO06__ENET2_MDIO    0x1b0b0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO07__ENET2_MDC     0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2  0x4001b031
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1  0x4001b031
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_flexcan1: flexcan1grp{
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX         0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX         0x000010B0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_i2c1: i2c1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
 | 
			
		||||
                MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_i2c2: i2c2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
 | 
			
		||||
                MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_ecspi3: ecspi3 {              
 | 
			
		||||
                    fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI         0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO         0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK       0x000010B0
 | 
			
		||||
                //MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0        0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20        0x000010B0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO01__GPIO1_IO01           0x000010B0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_ecspi1: ecspi1 {
 | 
			
		||||
                     fsl,pins = <
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA04__ECSPI1_SCLK         0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA06__ECSPI1_MOSI         0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA07__ECSPI1_MISO         0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA05__GPIO4_IO26          0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA03__GPIO4_IO24          0x000010B0
 | 
			
		||||
             >;
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
        pinctrl_uart3: uart3grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX   0x1b0b1
 | 
			
		||||
                MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX   0x1b0b1
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        pinctrl_uart1: uart1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
 | 
			
		||||
                MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_uart6: uart6grp {
 | 
			
		||||
             fsl,pins = <
 | 
			
		||||
                 MX6UL_PAD_CSI_MCLK__UART6_DCE_TX      0x1b0b1
 | 
			
		||||
                 MX6UL_PAD_CSI_PIXCLK__UART6_DCE_RX    0x1b0b1
 | 
			
		||||
             >;
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        pinctrl_sai2: sai2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK    0x17088
 | 
			
		||||
                MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC    0x17088
 | 
			
		||||
                MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
 | 
			
		||||
                MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA    0x11088
 | 
			
		||||
                MX6UL_PAD_JTAG_TMS__SAI2_MCLK       0x17088
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_tsc: tscgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO01__GPIO1_IO01    0xb0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO02__GPIO1_IO02    0xb0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO03__GPIO1_IO03    0xb0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO04__GPIO1_IO04    0xb0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc1: usdhc1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x10071
 | 
			
		||||
                MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2: usdhc2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x10069
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2_8bit: usdhc2grp_8bit {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x10069
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2_8bit_100mhz: usdhc2grp_8bit_100mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x100b9
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170b9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2_8bit_200mhz: usdhc2grp_8bit_200mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x100f9
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170f9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        pinctrl_lcdif_dat: lcdifdatgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_lcdif_dat_16bits: lcdifdatgrp_16bits {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_lcdif_ctrl: lcdifctrlgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_CLK__LCDIF_CLK        0x79
 | 
			
		||||
                MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
 | 
			
		||||
                MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        pinctrl_pwm1: pwm1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        pinctrl_lcdif_reset: lcdifresetgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_RESET__GPIO3_IO04     0x1b0b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_adc1: adc1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO03__GPIO1_IO03          0x000010B1
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO04__GPIO1_IO04          0x000010B1
 | 
			
		||||
                >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&iomuxc_snvs {
 | 
			
		||||
    pinctrl-names = "default_snvs";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_hog_2>;
 | 
			
		||||
    imx6ul-evk {
 | 
			
		||||
        pinctrl_hog_2: hoggrp-2 {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09     0x1b0b0 /* enet1 reset */
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER6__GPIO5_IO06     0x1b0b0 /* enet2 reset */
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01     0x000110A0 /*key 1*/
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
         pinctrl_tsc_reset: tscresetgrp  {        /*!< Function assigned for the core: Cortex-A7[ca7] */
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02        0x000110A0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_spi4: spi4grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10        0x70a1
 | 
			
		||||
                MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11        0x70a1
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07      0x70a1
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08      0x80000000
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_leds: ledgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                  MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03        0x000110A0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_485_ctl: uart3_rs485 {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
            MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00     0x1b0b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&lcdif {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_lcdif_dat
 | 
			
		||||
             &pinctrl_lcdif_ctrl
 | 
			
		||||
             &pinctrl_lcdif_reset>; 
 | 
			
		||||
    display = <&display0>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
    reset-gpios = <&gpio3 4 GPIO_ACTIVE_LOW>; /* 100ask */
 | 
			
		||||
 | 
			
		||||
    display0: display {
 | 
			
		||||
        bits-per-pixel = <24>;
 | 
			
		||||
        bus-width = <24>;
 | 
			
		||||
 | 
			
		||||
        display-timings {
 | 
			
		||||
            native-mode = <&timing0>;
 | 
			
		||||
 | 
			
		||||
             timing0: timing0_1024x768 {
 | 
			
		||||
             clock-frequency = <50000000>;
 | 
			
		||||
             hactive = <1024>;
 | 
			
		||||
             vactive = <600>;
 | 
			
		||||
             hfront-porch = <160>;
 | 
			
		||||
             hback-porch = <140>;
 | 
			
		||||
             hsync-len = <20>;
 | 
			
		||||
             vback-porch = <20>;
 | 
			
		||||
             vfront-porch = <12>;
 | 
			
		||||
             vsync-len = <3>;
 | 
			
		||||
 | 
			
		||||
             hsync-active = <0>;
 | 
			
		||||
             vsync-active = <0>;
 | 
			
		||||
             de-active = <1>;
 | 
			
		||||
             pixelclk-active = <0>;
 | 
			
		||||
             };
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&pwm1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_pwm1>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&pxp {
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
&ecspi3 { 
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_ecspi3>;
 | 
			
		||||
    cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    spidev: icm20608@0{
 | 
			
		||||
        compatible = "invensense,icm20608";
 | 
			
		||||
        interrupt-parent = <&gpio1>;
 | 
			
		||||
        interrupts = <1 1>;
 | 
			
		||||
        spi-max-frequency = <8000000>; 
 | 
			
		||||
        reg = <0>; 
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&sai2 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_sai2>;
 | 
			
		||||
 | 
			
		||||
    assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
 | 
			
		||||
              <&clks IMX6UL_CLK_SAI2>;
 | 
			
		||||
    assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
 | 
			
		||||
    assigned-clock-rates = <0>, <12288000>;
 | 
			
		||||
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&tsc {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_tsc>;
 | 
			
		||||
    xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    measure-delay-time = <0xfffff>;
 | 
			
		||||
    pre-charge-time = <0xffff>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&uart1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_uart1>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
&uart3 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_uart3
 | 
			
		||||
             &pinctrl_485_ctl>;
 | 
			
		||||
    rts-gpio = <&gpio5 0 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    uart-has-rtscts;
 | 
			
		||||
    rs485-rx-during-tx;
 | 
			
		||||
    rs485-rts-delay = <0 0>;
 | 
			
		||||
    linux,rs485-enabled-at-boot-time;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
&uart6 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_uart6>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
&usbotg1 {
 | 
			
		||||
    dr_mode = "otg";
 | 
			
		||||
    srp-disable;
 | 
			
		||||
    hnp-disable;
 | 
			
		||||
    adp-disable;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usbotg2 {
 | 
			
		||||
    dr_mode = "host";
 | 
			
		||||
    disable-over-current;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usbphy1 {
 | 
			
		||||
    tx-d-cal = <0x5>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usbphy2 {
 | 
			
		||||
    tx-d-cal = <0x5>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usdhc1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_usdhc1>;
 | 
			
		||||
    cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    keep-power-in-suspend;
 | 
			
		||||
    enable-sdio-wakeup;
 | 
			
		||||
    bus-width = <4>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usdhc2 {
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
        pinctrl-0 = <&pinctrl_usdhc2_8bit>;
 | 
			
		||||
        bus-width = <8>;
 | 
			
		||||
        non-removable;
 | 
			
		||||
        status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&wdog1 {
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&adc1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_adc1>;
 | 
			
		||||
    num-channels = <5>;
 | 
			
		||||
    vref-supply = <®_can_3v3>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&ecspi1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_ecspi1>;
 | 
			
		||||
    
 | 
			
		||||
    fsl,spi-num-chipselects = <2>;
 | 
			
		||||
    cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>, <&gpio4 24 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
    /*   
 | 
			
		||||
    spidev0: spi@0 {
 | 
			
		||||
        compatible = "rohm,dh2228fv";
 | 
			
		||||
        reg = <0>;
 | 
			
		||||
        spi-max-frequency = <5000000>;
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    spidev1: spi@1 {
 | 
			
		||||
        compatible = "rohm,dh2228fv";
 | 
			
		||||
        reg = <1>;
 | 
			
		||||
        spi-max-frequency = <5000000>;
 | 
			
		||||
    };
 | 
			
		||||
    */
 | 
			
		||||
    
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <modbus.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#define DO_BEEP1 0
 | 
			
		||||
#define DO_BEEP2 1
 | 
			
		||||
#define DO_LED1 2
 | 
			
		||||
#define DO_LED2 3
 | 
			
		||||
#define DO_LED3 4
 | 
			
		||||
#define AI_TEMP 0
 | 
			
		||||
#define AI_HUMI 1
 | 
			
		||||
 | 
			
		||||
void usage(const char *progname) {
 | 
			
		||||
    printf("Usage: %s <device> <command>\n", progname);
 | 
			
		||||
    printf("Commands:\n");
 | 
			
		||||
    printf("  beep1 on/off\n");
 | 
			
		||||
    printf("  beep2 on/off\n");
 | 
			
		||||
    printf("  led1 on/off\n");
 | 
			
		||||
    printf("  led2 on/off\n");
 | 
			
		||||
    printf("  led3 on/off\n");
 | 
			
		||||
    printf("  temp\n");
 | 
			
		||||
    printf("  humi\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
 | 
			
		||||
    return modbus_write_bit(ctx, addr, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
 | 
			
		||||
    uint16_t reg;
 | 
			
		||||
    int rc = modbus_read_input_registers(ctx, addr, 1, ®);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    *value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[]) {
 | 
			
		||||
    if (argc < 3) {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_t *ctx;
 | 
			
		||||
    int rc;
 | 
			
		||||
 | 
			
		||||
    // 创建Modbus上下文
 | 
			
		||||
    ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
 | 
			
		||||
    if (ctx == NULL) {
 | 
			
		||||
        fprintf(stderr, "Unable to create the libmodbus context\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_set_debug(ctx, TRUE);
 | 
			
		||||
 | 
			
		||||
    // 设置Modbus从站地址为3
 | 
			
		||||
    rc = modbus_set_slave(ctx, 3);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "Failed to set slave address: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 连接到Modbus设备
 | 
			
		||||
    if (modbus_connect(ctx) == -1) {
 | 
			
		||||
        fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 设置Modbus RTU模式为RS-485
 | 
			
		||||
    rc = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "Failed to set RS-485 mode: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }    
 | 
			
		||||
    
 | 
			
		||||
    if (strcmp(argv[2], "beep1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "beep2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led3") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "temp") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float temp;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_TEMP, &temp);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Temperature: %.1f C\n", temp);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (strcmp(argv[2], "humi") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float humi;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_HUMI, &humi);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Humidity: %.1f %%\n", humi);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "%s\n", modbus_strerror(errno));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 关闭连接并释放资源
 | 
			
		||||
    modbus_close(ctx);
 | 
			
		||||
    modbus_free(ctx);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
arm-buildroot-linux-gnueabihf-gcc -I /home/book/sensor_test/libmodbus-3.1.10/tmp/include/modbus -L/home/book/sensor_test/libmodbus-3.1.10/tmp/lib -lmodbus  -o sensor_test sensor_test.c
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
cd /etc/openocd/scripts
 | 
			
		||||
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c halt -c "flash write_image erase /root/demo.bin 0x08000000" -c reset -c shutdown
 | 
			
		||||
@@ -0,0 +1,47 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# 判断参数数量
 | 
			
		||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
 | 
			
		||||
    echo "Usage: /bin/sensor_test.sh [led1|led2|led3|beep1|beep2|humi|temp] [on|off]"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
device="/dev/ttymxc2"
 | 
			
		||||
 | 
			
		||||
# 判断第一个参数
 | 
			
		||||
case $1 in
 | 
			
		||||
    led1|led2|led3|beep1|beep2)
 | 
			
		||||
        # 判断是否为 led 或 beep 命令
 | 
			
		||||
        if [ $# -eq 2 ] && [[ "$2" == "on" || "$2" == "off" ]]; then
 | 
			
		||||
            # 调用传感器测试程序
 | 
			
		||||
            /bin/sensor_test "$device" "$1" "$2"
 | 
			
		||||
 	else
 | 
			
		||||
            echo "Error: Invalid command for $1. Use 'on' or 'off'."
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    humi|temp)
 | 
			
		||||
        # 判断是否为 humi 或 temp 命令
 | 
			
		||||
        if [ $# -eq 1  ]; then
 | 
			
		||||
            # 调用传感器测试程序
 | 
			
		||||
            result=$(/bin/sensor_test "$device" "$1")
 | 
			
		||||
 | 
			
		||||
	    # 使用 grep 和 sed 提取数值
 | 
			
		||||
            if [ "$1" == "temp" ]; then
 | 
			
		||||
                value=$(echo "$result" | grep -oP "Temperature: \K[0-9]+\.[0-9]+")
 | 
			
		||||
            elif [ "$1" == "humi" ]; then
 | 
			
		||||
                value=$(echo "$result" | grep -oP "Humidity: \K[0-9]+\.[0-9]+")
 | 
			
		||||
            fi
 | 
			
		||||
            # 输出结果
 | 
			
		||||
            echo "$value"
 | 
			
		||||
 | 
			
		||||
        else
 | 
			
		||||
            echo "Error: Invalid command for $1. No additional arguments needed."
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Error: Invalid device. Use led1, led2, beep1, beep2, humi, or temp."
 | 
			
		||||
        exit 1
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
cd /etc/openocd/scripts
 | 
			
		||||
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c halt -c "flash write_image erase /root/demo.bin 0x08000000" -c reset -c shutdown
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# 判断参数数量
 | 
			
		||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
 | 
			
		||||
    echo "Usage: /bin/sensor_test.sh [led1|led2|led3|beep1|beep2|humi|temp] [on|off]"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
device="/dev/ttymxc2"
 | 
			
		||||
 | 
			
		||||
# 判断第一个参数
 | 
			
		||||
case $1 in
 | 
			
		||||
    led1|led2|led3|beep1|beep2)
 | 
			
		||||
        # 判断是否为 led 或 beep 命令
 | 
			
		||||
        if [ $# -eq 2 ] && [[ "$2" == "on" || "$2" == "off" ]]; then
 | 
			
		||||
            # 调用传感器测试程序
 | 
			
		||||
            /bin/sensor_test "$device" "$1" "$2"
 | 
			
		||||
 	else
 | 
			
		||||
            echo "Error: Invalid command for $1. Use 'on' or 'off'."
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    humi|temp)
 | 
			
		||||
        # 判断是否为 humi 或 temp 命令
 | 
			
		||||
        if [ $# -eq 1  ]; then
 | 
			
		||||
            # 调用传感器测试程序
 | 
			
		||||
            result=$(/bin/sensor_test "$device" "$1")
 | 
			
		||||
 | 
			
		||||
	    # 使用 grep 和 sed 提取数值
 | 
			
		||||
            if [ "$1" == "temp" ]; then
 | 
			
		||||
                value=$(echo "$result" | grep -oP "Temperature: \K[0-9]+\.[0-9]+")
 | 
			
		||||
            elif [ "$1" == "humi" ]; then
 | 
			
		||||
                value=$(echo "$result" | grep -oP "Humidity: \K[0-9]+\.[0-9]+")
 | 
			
		||||
            fi
 | 
			
		||||
            # 输出结果
 | 
			
		||||
            echo "$value"
 | 
			
		||||
 | 
			
		||||
        else
 | 
			
		||||
            echo "Error: Invalid command for $1. No additional arguments needed."
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Error: Invalid device. Use led1, led2, beep1, beep2, humi, or temp."
 | 
			
		||||
        exit 1
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,924 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2016 Freescale Semiconductor, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/dts-v1/;
 | 
			
		||||
 | 
			
		||||
#include <dt-bindings/input/input.h>
 | 
			
		||||
#include "imx6ull.dtsi"
 | 
			
		||||
 | 
			
		||||
/ {
 | 
			
		||||
    model = "Freescale i.MX6 ULL 14x14 EVK Board";
 | 
			
		||||
    compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
 | 
			
		||||
 | 
			
		||||
    chosen {
 | 
			
		||||
        stdout-path = &uart1;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    memory {
 | 
			
		||||
        reg = <0x80000000 0x20000000>;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    reserved-memory {
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <1>;
 | 
			
		||||
        ranges;
 | 
			
		||||
 | 
			
		||||
        linux,cma {
 | 
			
		||||
            compatible = "shared-dma-pool";
 | 
			
		||||
            reusable;
 | 
			
		||||
            size = <0x14000000>;
 | 
			
		||||
            linux,cma-default;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    backlight {
 | 
			
		||||
        compatible = "pwm-backlight";
 | 
			
		||||
        pwms = <&pwm1 0 1000>;
 | 
			
		||||
        brightness-levels = <0 1 2 3 4 5 6 8 10>;
 | 
			
		||||
        default-brightness-level = <8>;
 | 
			
		||||
        status = "okay";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    pxp_v4l2 {
 | 
			
		||||
        compatible = "fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2";
 | 
			
		||||
        status = "okay";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    regulators {
 | 
			
		||||
        compatible = "simple-bus";
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
        reg_can_3v3: regulator@0 {
 | 
			
		||||
            compatible = "regulator-fixed";
 | 
			
		||||
            reg = <0>;
 | 
			
		||||
            regulator-name = "can-3v3";
 | 
			
		||||
            regulator-min-microvolt = <3300000>;
 | 
			
		||||
            regulator-max-microvolt = <3300000>;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        reg_usb_ltemodule: regulator@1 {
 | 
			
		||||
            compatible = "regulator-fixed";
 | 
			
		||||
            regulator-name = "ltemodule-pwr";
 | 
			
		||||
            regulator-min-microvolt = <3800000>;
 | 
			
		||||
            regulator-max-microvolt = <3800000>;
 | 
			
		||||
            gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;
 | 
			
		||||
            enable-active-high;
 | 
			
		||||
            regulator-boot-on;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        reg_gpio_wifi: regulator@2 {
 | 
			
		||||
            compatible = "regulator-fixed";
 | 
			
		||||
            regulator-name = "wifi-pwr";
 | 
			
		||||
            regulator-min-microvolt = <3300000>;
 | 
			
		||||
            regulator-max-microvolt = <3300000>;
 | 
			
		||||
            gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            regulator-boot-on;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    leds {
 | 
			
		||||
        compatible = "gpio-leds";
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
        pinctrl-0 = <&pinctrl_leds>;
 | 
			
		||||
        
 | 
			
		||||
        status = "disabled";
 | 
			
		||||
 | 
			
		||||
        led0: cpu {
 | 
			
		||||
            label = "cpu";
 | 
			
		||||
            gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            default-state = "on";
 | 
			
		||||
            linux,default-trigger = "heartbeat";
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    gpio-keys {
 | 
			
		||||
        compatible = "gpio-keys";
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
 | 
			
		||||
        user1 {
 | 
			
		||||
            label = "User1 Button";
 | 
			
		||||
            gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            gpio-key,wakeup;
 | 
			
		||||
            linux,code = <KEY_1>;
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        user2 {
 | 
			
		||||
            label = "User2 Button";
 | 
			
		||||
            gpios = <&gpio4 14 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            gpio-key,wakeup;
 | 
			
		||||
            linux,code = <KEY_2>;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    sound {
 | 
			
		||||
            compatible = "fsl,imx6ul-evk-wm8960",
 | 
			
		||||
                     "fsl,imx-audio-wm8960";
 | 
			
		||||
            model = "wm8960-audio";
 | 
			
		||||
            cpu-dai = <&sai2>;
 | 
			
		||||
            audio-codec = <&codec>;
 | 
			
		||||
            asrc-controller = <&asrc>;
 | 
			
		||||
            codec-master;
 | 
			
		||||
            gpr = <&gpr 4 0x100000 0x100000>;
 | 
			
		||||
            hp-det = <3 0>;
 | 
			
		||||
            /*hp-det-gpios = <&gpio5 4 0>;
 | 
			
		||||
            mic-det-gpios = <&gpio5 4 0>;*/
 | 
			
		||||
            audio-routing =
 | 
			
		||||
                "Headphone Jack", "HP_L",
 | 
			
		||||
                "Headphone Jack", "HP_R",
 | 
			
		||||
                "Ext Spk", "SPK_LP",
 | 
			
		||||
                "Ext Spk", "SPK_LN",
 | 
			
		||||
                "Ext Spk", "SPK_RP",
 | 
			
		||||
                "Ext Spk", "SPK_RN",
 | 
			
		||||
                "LINPUT2", "Mic Jack",
 | 
			
		||||
                "LINPUT3", "Mic Jack",
 | 
			
		||||
                "RINPUT1", "Main MIC",
 | 
			
		||||
                "RINPUT2", "Main MIC",  
 | 
			
		||||
                "Mic Jack", "MICB",
 | 
			
		||||
                "Main MIC", "MICB",
 | 
			
		||||
                "CPU-Playback", "ASRC-Playback",
 | 
			
		||||
                "Playback", "CPU-Playback",
 | 
			
		||||
                "ASRC-Capture", "CPU-Capture",
 | 
			
		||||
                "CPU-Capture", "Capture";
 | 
			
		||||
                status = "okay";
 | 
			
		||||
        };
 | 
			
		||||
    
 | 
			
		||||
    spi4 {
 | 
			
		||||
        compatible = "spi-gpio";
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
        pinctrl-0 = <&pinctrl_spi4>;
 | 
			
		||||
        pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
 | 
			
		||||
        status = "okay";
 | 
			
		||||
        gpio-sck = <&gpio5 11 0>;
 | 
			
		||||
        gpio-mosi = <&gpio5 10 0>;
 | 
			
		||||
        cs-gpios = <&gpio5 7 0>;
 | 
			
		||||
        num-chipselects = <1>;
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
        gpio_spi: gpio_spi@0 {
 | 
			
		||||
            compatible = "fairchild,74hc595";
 | 
			
		||||
            gpio-controller;
 | 
			
		||||
            #gpio-cells = <2>;
 | 
			
		||||
            reg = <0>;
 | 
			
		||||
            registers-number = <1>;
 | 
			
		||||
            registers-default = /bits/ 8 <0x57>;
 | 
			
		||||
            spi-max-frequency = <10000>;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    sii902x_reset: sii902x-reset {
 | 
			
		||||
            compatible = "gpio-reset";
 | 
			
		||||
            reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
 | 
			
		||||
            reset-delay-us = <100000>;
 | 
			
		||||
            #reset-cells = <0>;
 | 
			
		||||
            status = "okay";
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&gpmi{
 | 
			
		||||
    status = "disabled";
 | 
			
		||||
};
 | 
			
		||||
&cpu0 {
 | 
			
		||||
    arm-supply = <®_arm>;
 | 
			
		||||
    soc-supply = <®_soc>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&clks {
 | 
			
		||||
    assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
 | 
			
		||||
    assigned-clock-rates = <786432000>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&fec1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_enet1>;
 | 
			
		||||
    phy-mode = "rmii";
 | 
			
		||||
    phy-handle = <ðphy0>;
 | 
			
		||||
    phy-reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    phy-reset-duration = <26>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&fec2 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_enet2>;
 | 
			
		||||
    phy-mode = "rmii";
 | 
			
		||||
    phy-handle = <ðphy1>;
 | 
			
		||||
    phy-reset-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    phy-reset-duration = <26>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
 | 
			
		||||
    mdio {
 | 
			
		||||
        #address-cells = <1>;
 | 
			
		||||
        #size-cells = <0>;
 | 
			
		||||
 | 
			
		||||
        ethphy0: ethernet-phy@0 {
 | 
			
		||||
            compatible = "ethernet-phy-ieee802.3-c22";
 | 
			
		||||
            smsc,disable-energy-detect;
 | 
			
		||||
            reg = <0>;
 | 
			
		||||
        };
 | 
			
		||||
        ethphy1: ethernet-phy@1 {
 | 
			
		||||
            compatible = "ethernet-phy-ieee802.3-c22";
 | 
			
		||||
            smsc,disable-energy-detect;
 | 
			
		||||
            reg = <1>;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&flexcan1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_flexcan1>;
 | 
			
		||||
    xceiver-supply = <®_can_3v3>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
&gpc {
 | 
			
		||||
    fsl,cpu_pupscr_sw2iso = <0x1>;
 | 
			
		||||
    fsl,cpu_pupscr_sw = <0x0>;
 | 
			
		||||
    fsl,cpu_pdnscr_iso2sw = <0x1>;
 | 
			
		||||
    fsl,cpu_pdnscr_iso = <0x1>;
 | 
			
		||||
    fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&i2c1 {
 | 
			
		||||
    clock-frequency = <100000>;
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_i2c1>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&i2c2 {
 | 
			
		||||
    clock_frequency = <100000>;
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_i2c2>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
 | 
			
		||||
    codec: wm8960@1a {
 | 
			
		||||
        compatible = "wlf,wm8960";
 | 
			
		||||
        reg = <0x1a>;
 | 
			
		||||
        clocks = <&clks IMX6UL_CLK_SAI2>;
 | 
			
		||||
        clock-names = "mclk";
 | 
			
		||||
        wlf,shared-lrclk;
 | 
			
		||||
        };
 | 
			
		||||
         sii902x: sii902x@39 {
 | 
			
		||||
                 compatible = "SiI,sii902x";
 | 
			
		||||
                 pinctrl-names = "default";
 | 
			
		||||
                 reset-names="sii902x";
 | 
			
		||||
                 pinctrl-0 = <&pinctrl_sii902x>;
 | 
			
		||||
                 resets = <&sii902x_reset>;
 | 
			
		||||
                 interrupt-parent = <&gpio1>;
 | 
			
		||||
                 interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
 | 
			
		||||
                 mode_str ="1280x720M@60";
 | 
			
		||||
                 bits-per-pixel = <16>;
 | 
			
		||||
                 reg = <0x39>;
 | 
			
		||||
                 status = "okay";    
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        gt9xx@5d {
 | 
			
		||||
                compatible = "goodix,gt9xx";
 | 
			
		||||
                reg = <0x5d>;
 | 
			
		||||
                status = "okay";
 | 
			
		||||
                interrupt-parent = <&gpio1>;
 | 
			
		||||
                interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
 | 
			
		||||
                pinctrl-names = "default";
 | 
			
		||||
                pinctrl-0 = <&pinctrl_tsc_reset &pinctrl_touchscreen_int>;
 | 
			
		||||
                /*pinctrl-1 = <&pinctrl_tsc_irq>;*/
 | 
			
		||||
                /*pinctrl-names = "default", "int-output-low", "int-output-high", "int-input";
 | 
			
		||||
                pinctrl-0 = <&ts_int_default>;
 | 
			
		||||
                pinctrl-1 = <&ts_int_output_low>;
 | 
			
		||||
                pinctrl-2 = <&ts_int_output_high>;
 | 
			
		||||
                pinctrl-3 = <&ts_int_input>;
 | 
			
		||||
                */
 | 
			
		||||
                reset-gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;
 | 
			
		||||
                irq-gpios = <&gpio1 5 IRQ_TYPE_EDGE_FALLING>;
 | 
			
		||||
                irq-flags = <2>;                /*1:rising 2: falling*/
 | 
			
		||||
 | 
			
		||||
                touchscreen-max-id = <5>;
 | 
			
		||||
                touchscreen-size-x = <800>;
 | 
			
		||||
                touchscreen-size-y = <480>;
 | 
			
		||||
                touchscreen-max-w = <1024>;
 | 
			
		||||
                touchscreen-max-p = <1024>;
 | 
			
		||||
                /*touchscreen-key-map = <172>, <158>;*/ /*KEY_HOMEPAGE, KEY_BACK*/
 | 
			
		||||
 | 
			
		||||
                goodix,type-a-report = <0>;
 | 
			
		||||
                goodix,driver-send-cfg = <0>;
 | 
			
		||||
                goodix,create-wr-node = <1>;
 | 
			
		||||
                goodix,wakeup-with-reset = <0>;
 | 
			
		||||
                goodix,resume-in-workqueue = <0>;
 | 
			
		||||
                goodix,int-sync = <0>;
 | 
			
		||||
                goodix,swap-x2y = <0>;
 | 
			
		||||
                goodix,esd-protect = <0>;
 | 
			
		||||
                goodix,pen-suppress-finger = <0>;
 | 
			
		||||
                goodix,auto-update = <0>;
 | 
			
		||||
                goodix,auto-update-cfg = <0>;
 | 
			
		||||
                goodix,power-off-sleep = <0>;
 | 
			
		||||
 | 
			
		||||
                /*7*/
 | 
			
		||||
                goodix,cfg-group0 = [
 | 
			
		||||
                6b 00 04 58 02 05 0d 00 01 0f 
 | 
			
		||||
                28 0f 50 32 03 05 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 8a 2a 0c 
 | 
			
		||||
                45 47 0c 08 00 00 00 40 03 2c 
 | 
			
		||||
                00 01 00 00 00 03 64 32 00 00 
 | 
			
		||||
                00 28 64 94 d5 02 07 00 00 04 
 | 
			
		||||
                95 2c 00 8b 34 00 82 3f 00 7d 
 | 
			
		||||
                4c 00 7a 5b 00 7a 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 18 16 14 12 10 0e 0c 0a 
 | 
			
		||||
                08 06 04 02 ff ff 00 00 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 16 18 1c 1d 1e 1f 20 21 
 | 
			
		||||
                22 24 13 12 10 0f 0a 08 06 04 
 | 
			
		||||
                02 00 ff ff ff ff ff ff 00 00 
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00 
 | 
			
		||||
                00 00 00 00 79 01
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
                /*4.3*/
 | 
			
		||||
                goodix,cfg-group1 = [
 | 
			
		||||
                97 E0 01 10 01 05 0D 00 01 00
 | 
			
		||||
                00 05 5A 46 53 11 00 00 11 11
 | 
			
		||||
                14 14 14 22 0A 04 00 00 00 00
 | 
			
		||||
                00 00 53 00 14 00 00 84 00 00
 | 
			
		||||
                3C 00 00 64 1E 28 87 27 08 32
 | 
			
		||||
                34 05 0D 20 33 60 11 02 24 00
 | 
			
		||||
                00 64 80 80 14 02 00 00 54 89
 | 
			
		||||
                68 85 6D 82 72 80 76 7D 7B 7B
 | 
			
		||||
                00 00 00 00 00 00 00 F0 50 3C
 | 
			
		||||
                FF FF 07 00 00 00 02 14 14 03
 | 
			
		||||
                04 00 21 64 0A 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                32 20 50 3C 3C 00 00 00 00 00
 | 
			
		||||
                0D 06 0C 05 0B 04 0A 03 FF FF
 | 
			
		||||
                FF FF FF FF 00 01 02 03 04 05
 | 
			
		||||
                06 07 08 09 0A 0B 0C 0D FF FF
 | 
			
		||||
                FF FF FF FF FF FF FF FF FF FF
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 3C 00 05 1E 00 02
 | 
			
		||||
                2A 1E 19 14 02 00 03 0A 05 00
 | 
			
		||||
                00 00 00 00 00 00 01 FF FF 86
 | 
			
		||||
                22 03 00 00 33 00 0F 00 00 00
 | 
			
		||||
                50 3C 50 00 00 00 00 2A 01
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
                /*5*/
 | 
			
		||||
                goodix,cfg-group2 = [
 | 
			
		||||
                00 20 03 E0 01 05 3C 00 01 08
 | 
			
		||||
                28 0C 50 32 03 05 00 00 00 00
 | 
			
		||||
                00 00 00 17 19 1E 14 8B 2B 0D
 | 
			
		||||
                33 35 0C 08 00 00 00 9A 03 11
 | 
			
		||||
                00 01 00 00 00 00 00 32 00 00
 | 
			
		||||
                00 20 58 94 C5 02 00 00 00 04
 | 
			
		||||
                B0 23 00 93 2B 00 7B 35 00 69
 | 
			
		||||
                41 00 5B 4F 00 5B 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 02 04 06 08 0A 0C 0E 10
 | 
			
		||||
                12 14 16 18 1A FF 00 00 00 00
 | 
			
		||||
                00 00 00 00 00 00 00 00 00 00
 | 
			
		||||
                00 00 00 02 04 06 08 0A 0C 0F
 | 
			
		||||
                10 12 13 16 18 1C 1D 1E 1F 20
 | 
			
		||||
                21 22 24 26 FF FF FF FF 00 00
 | 
			
		||||
                00 FF FF FF FF FF FF FF FF FF
 | 
			
		||||
                FF FF FF FF 48 01
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&iomuxc {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_hog_1>;
 | 
			
		||||
    imx6ul-evk {
 | 
			
		||||
        pinctrl_hog_1: hoggrp-1 {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART1_RTS_B__GPIO1_IO19   0x17059 /* SD1 CD */
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID    0x17059 /* USB OTG1 ID */
 | 
			
		||||
                // MX6UL_PAD_CSI_DATA07__GPIO4_IO28           0x000010B0
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER5__GPIO5_IO05        0x000110A0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
                pinctrl_sii902x: hdmigrp {
 | 
			
		||||
                fsl,pins = <
 | 
			
		||||
                        MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x59
 | 
			
		||||
                            >;
 | 
			
		||||
            };
 | 
			
		||||
                pinctrl_touchscreen_int: lcdif_tsc_int {
 | 
			
		||||
                fsl,pins = <
 | 
			
		||||
                        MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x000010B0
 | 
			
		||||
                            >;
 | 
			
		||||
                        };
 | 
			
		||||
        pinctrl_enet1: enet1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_enet2: enet2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO06__ENET2_MDIO    0x1b0b0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO07__ENET2_MDC     0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2  0x4001b031
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN  0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
 | 
			
		||||
                MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1  0x4001b031
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_flexcan1: flexcan1grp{
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX         0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX         0x000010B0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_i2c1: i2c1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
 | 
			
		||||
                MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_i2c2: i2c2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
 | 
			
		||||
                MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_ecspi3: ecspi3 {              
 | 
			
		||||
                    fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI         0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO         0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK       0x000010B0
 | 
			
		||||
                //MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0        0x000010B0
 | 
			
		||||
                MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20        0x000010B0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO01__GPIO1_IO01           0x000010B0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_ecspi1: ecspi1 {
 | 
			
		||||
                     fsl,pins = <
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA04__ECSPI1_SCLK         0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA06__ECSPI1_MOSI         0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA07__ECSPI1_MISO         0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA05__GPIO4_IO26          0x000010B0
 | 
			
		||||
                 MX6UL_PAD_CSI_DATA03__GPIO4_IO24          0x000010B0
 | 
			
		||||
             >;
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
        pinctrl_uart3: uart3grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX   0x1b0b1
 | 
			
		||||
                MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX   0x1b0b1
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        pinctrl_uart1: uart1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
 | 
			
		||||
                MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_uart6: uart6grp {
 | 
			
		||||
             fsl,pins = <
 | 
			
		||||
                 MX6UL_PAD_CSI_MCLK__UART6_DCE_TX      0x1b0b1
 | 
			
		||||
                 MX6UL_PAD_CSI_PIXCLK__UART6_DCE_RX    0x1b0b1
 | 
			
		||||
             >;
 | 
			
		||||
         };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        pinctrl_sai2: sai2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK    0x17088
 | 
			
		||||
                MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC    0x17088
 | 
			
		||||
                MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
 | 
			
		||||
                MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA    0x11088
 | 
			
		||||
                MX6UL_PAD_JTAG_TMS__SAI2_MCLK       0x17088
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_tsc: tscgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO01__GPIO1_IO01    0xb0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO02__GPIO1_IO02    0xb0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO03__GPIO1_IO03    0xb0
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO04__GPIO1_IO04    0xb0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc1: usdhc1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x10071
 | 
			
		||||
                MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
 | 
			
		||||
                MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
 | 
			
		||||
                MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2: usdhc2grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x10069
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2_8bit: usdhc2grp_8bit {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x10069
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
 | 
			
		||||
                MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2_8bit_100mhz: usdhc2grp_8bit_100mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x100b9
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170b9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170b9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_usdhc2_8bit_200mhz: usdhc2grp_8bit_200mhz {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x100f9
 | 
			
		||||
                MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170f9
 | 
			
		||||
                MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170f9
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        pinctrl_lcdif_dat: lcdifdatgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_lcdif_dat_16bits: lcdifdatgrp_16bits {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_lcdif_ctrl: lcdifctrlgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_CLK__LCDIF_CLK        0x79
 | 
			
		||||
                MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
 | 
			
		||||
                MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
 | 
			
		||||
                MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        pinctrl_pwm1: pwm1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        pinctrl_lcdif_reset: lcdifresetgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_LCD_RESET__GPIO3_IO04     0x1b0b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_adc1: adc1grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO03__GPIO1_IO03          0x000010B1
 | 
			
		||||
                MX6UL_PAD_GPIO1_IO04__GPIO1_IO04          0x000010B1
 | 
			
		||||
                >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&iomuxc_snvs {
 | 
			
		||||
    pinctrl-names = "default_snvs";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_hog_2>;
 | 
			
		||||
    imx6ul-evk {
 | 
			
		||||
        pinctrl_hog_2: hoggrp-2 {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09     0x1b0b0 /* enet1 reset */
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER6__GPIO5_IO06     0x1b0b0 /* enet2 reset */
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01     0x000110A0 /*key 1*/
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
         pinctrl_tsc_reset: tscresetgrp  {        /*!< Function assigned for the core: Cortex-A7[ca7] */
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02        0x000110A0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_spi4: spi4grp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10        0x70a1
 | 
			
		||||
                MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11        0x70a1
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07      0x70a1
 | 
			
		||||
                MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08      0x80000000
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_leds: ledgrp {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
                  MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03        0x000110A0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        pinctrl_485_ctl: uart3_rs485 {
 | 
			
		||||
            fsl,pins = <
 | 
			
		||||
            MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00     0x1b0b0
 | 
			
		||||
            >;
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&lcdif {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_lcdif_dat
 | 
			
		||||
             &pinctrl_lcdif_ctrl
 | 
			
		||||
             &pinctrl_lcdif_reset>; 
 | 
			
		||||
    display = <&display0>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
    reset-gpios = <&gpio3 4 GPIO_ACTIVE_LOW>; /* 100ask */
 | 
			
		||||
 | 
			
		||||
    display0: display {
 | 
			
		||||
        bits-per-pixel = <24>;
 | 
			
		||||
        bus-width = <24>;
 | 
			
		||||
 | 
			
		||||
        display-timings {
 | 
			
		||||
            native-mode = <&timing0>;
 | 
			
		||||
 | 
			
		||||
             timing0: timing0_1024x768 {
 | 
			
		||||
             clock-frequency = <50000000>;
 | 
			
		||||
             hactive = <1024>;
 | 
			
		||||
             vactive = <600>;
 | 
			
		||||
             hfront-porch = <160>;
 | 
			
		||||
             hback-porch = <140>;
 | 
			
		||||
             hsync-len = <20>;
 | 
			
		||||
             vback-porch = <20>;
 | 
			
		||||
             vfront-porch = <12>;
 | 
			
		||||
             vsync-len = <3>;
 | 
			
		||||
 | 
			
		||||
             hsync-active = <0>;
 | 
			
		||||
             vsync-active = <0>;
 | 
			
		||||
             de-active = <1>;
 | 
			
		||||
             pixelclk-active = <0>;
 | 
			
		||||
             };
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&pwm1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_pwm1>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&pxp {
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
&ecspi3 { 
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_ecspi3>;
 | 
			
		||||
    cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    spidev: icm20608@0{
 | 
			
		||||
        compatible = "invensense,icm20608";
 | 
			
		||||
        interrupt-parent = <&gpio1>;
 | 
			
		||||
        interrupts = <1 1>;
 | 
			
		||||
        spi-max-frequency = <8000000>; 
 | 
			
		||||
        reg = <0>; 
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&sai2 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_sai2>;
 | 
			
		||||
 | 
			
		||||
    assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
 | 
			
		||||
              <&clks IMX6UL_CLK_SAI2>;
 | 
			
		||||
    assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
 | 
			
		||||
    assigned-clock-rates = <0>, <12288000>;
 | 
			
		||||
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&tsc {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_tsc>;
 | 
			
		||||
    xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    measure-delay-time = <0xfffff>;
 | 
			
		||||
    pre-charge-time = <0xffff>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&uart1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_uart1>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
&uart3 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_uart3
 | 
			
		||||
             &pinctrl_485_ctl>;
 | 
			
		||||
    rts-gpio = <&gpio5 0 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    uart-has-rtscts;
 | 
			
		||||
    rs485-rx-during-tx;
 | 
			
		||||
    rs485-rts-delay = <0 0>;
 | 
			
		||||
    linux,rs485-enabled-at-boot-time;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
&uart6 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_uart6>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
&usbotg1 {
 | 
			
		||||
    dr_mode = "otg";
 | 
			
		||||
    srp-disable;
 | 
			
		||||
    hnp-disable;
 | 
			
		||||
    adp-disable;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usbotg2 {
 | 
			
		||||
    dr_mode = "host";
 | 
			
		||||
    disable-over-current;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usbphy1 {
 | 
			
		||||
    tx-d-cal = <0x5>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usbphy2 {
 | 
			
		||||
    tx-d-cal = <0x5>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usdhc1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_usdhc1>;
 | 
			
		||||
    cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    keep-power-in-suspend;
 | 
			
		||||
    enable-sdio-wakeup;
 | 
			
		||||
    bus-width = <4>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&usdhc2 {
 | 
			
		||||
        pinctrl-names = "default";
 | 
			
		||||
        pinctrl-0 = <&pinctrl_usdhc2_8bit>;
 | 
			
		||||
        bus-width = <8>;
 | 
			
		||||
        non-removable;
 | 
			
		||||
        status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&wdog1 {
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&adc1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_adc1>;
 | 
			
		||||
    num-channels = <5>;
 | 
			
		||||
    vref-supply = <®_can_3v3>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
&ecspi1 {
 | 
			
		||||
    pinctrl-names = "default";
 | 
			
		||||
    pinctrl-0 = <&pinctrl_ecspi1>;
 | 
			
		||||
    
 | 
			
		||||
    fsl,spi-num-chipselects = <2>;
 | 
			
		||||
    cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>, <&gpio4 24 GPIO_ACTIVE_LOW>;
 | 
			
		||||
    status = "okay";
 | 
			
		||||
    /*   
 | 
			
		||||
    spidev0: spi@0 {
 | 
			
		||||
        compatible = "rohm,dh2228fv";
 | 
			
		||||
        reg = <0>;
 | 
			
		||||
        spi-max-frequency = <5000000>;
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    spidev1: spi@1 {
 | 
			
		||||
        compatible = "rohm,dh2228fv";
 | 
			
		||||
        reg = <1>;
 | 
			
		||||
        spi-max-frequency = <5000000>;
 | 
			
		||||
    };
 | 
			
		||||
    */
 | 
			
		||||
    
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <modbus.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#define DO_BEEP1 0
 | 
			
		||||
#define DO_BEEP2 1
 | 
			
		||||
#define DO_LED1 2
 | 
			
		||||
#define DO_LED2 3
 | 
			
		||||
#define DO_LED3 4
 | 
			
		||||
#define AI_TEMP 0
 | 
			
		||||
#define AI_HUMI 1
 | 
			
		||||
 | 
			
		||||
void usage(const char *progname) {
 | 
			
		||||
    printf("Usage: %s <device> <command>\n", progname);
 | 
			
		||||
    printf("Commands:\n");
 | 
			
		||||
    printf("  beep1 on/off\n");
 | 
			
		||||
    printf("  beep2 on/off\n");
 | 
			
		||||
    printf("  led1 on/off\n");
 | 
			
		||||
    printf("  led2 on/off\n");
 | 
			
		||||
    printf("  led3 on/off\n");
 | 
			
		||||
    printf("  temp\n");
 | 
			
		||||
    printf("  humi\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int set_digital_output(modbus_t *ctx, int addr, int value) {
 | 
			
		||||
    return modbus_write_bit(ctx, addr, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int get_analog_input(modbus_t *ctx, int addr, float *value) {
 | 
			
		||||
    uint16_t reg;
 | 
			
		||||
    int rc = modbus_read_input_registers(ctx, addr, 1, ®);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    *value = (float)reg / 10.0; // Assuming 10x scaling for temperature and humidity
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[]) {
 | 
			
		||||
    if (argc < 3) {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_t *ctx;
 | 
			
		||||
    int rc;
 | 
			
		||||
 | 
			
		||||
    // 创建Modbus上下文
 | 
			
		||||
    ctx = modbus_new_rtu(argv[1], 115200, 'N', 8, 1);
 | 
			
		||||
    if (ctx == NULL) {
 | 
			
		||||
        fprintf(stderr, "Unable to create the libmodbus context\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    modbus_set_debug(ctx, TRUE);
 | 
			
		||||
 | 
			
		||||
    // 设置Modbus从站地址为3
 | 
			
		||||
    rc = modbus_set_slave(ctx, 3);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "Failed to set slave address: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 连接到Modbus设备
 | 
			
		||||
    if (modbus_connect(ctx) == -1) {
 | 
			
		||||
        fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 设置Modbus RTU模式为RS-485
 | 
			
		||||
    rc = modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "Failed to set RS-485 mode: %s\n", modbus_strerror(errno));
 | 
			
		||||
        modbus_free(ctx);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }    
 | 
			
		||||
    
 | 
			
		||||
    if (strcmp(argv[2], "beep1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "beep2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_BEEP2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led1") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED1, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led2") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED2, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "led3") == 0) {
 | 
			
		||||
        if (argc != 4 || (strcmp(argv[3], "on") != 0 && strcmp(argv[3], "off") != 0)) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        rc = set_digital_output(ctx, DO_LED3, strcmp(argv[3], "on") == 0);
 | 
			
		||||
    } else if (strcmp(argv[2], "temp") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float temp;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_TEMP, &temp);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Temperature: %.1f C\n", temp);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (strcmp(argv[2], "humi") == 0) {
 | 
			
		||||
        if (argc != 3) {
 | 
			
		||||
            usage(argv[0]);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        float humi;
 | 
			
		||||
        rc = get_analog_input(ctx, AI_HUMI, &humi);
 | 
			
		||||
        if (rc == 0) {
 | 
			
		||||
            printf("Humidity: %.1f %%\n", humi);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        usage(argv[0]);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (rc == -1) {
 | 
			
		||||
        fprintf(stderr, "%s\n", modbus_strerror(errno));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 关闭连接并释放资源
 | 
			
		||||
    modbus_close(ctx);
 | 
			
		||||
    modbus_free(ctx);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
tar xzf libmodbus-3.1.10.tar.gz 
 | 
			
		||||
cd libmodbus-3.1.10/
 | 
			
		||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
cd tmp/
 | 
			
		||||
ls
 | 
			
		||||
 | 
			
		||||
arm-buildroot-linux-gnueabihf-gcc -I libmodbus-3.1.10/tmp/include/modbus -Llibmodbus-3.1.10/tmp/lib -lmodbus  -o sensor_test sensor_test.c
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
1.编译jimtcl
 | 
			
		||||
unzip jimtcl-master.zip
 | 
			
		||||
cd jimtcl-master/
 | 
			
		||||
ls
 | 
			
		||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
ls tmp/
 | 
			
		||||
 | 
			
		||||
2.编译libusb
 | 
			
		||||
unzip libusb-1.0.28.zip
 | 
			
		||||
cd libusb-1.0.28/
 | 
			
		||||
./bootstrap.sh
 | 
			
		||||
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp
 | 
			
		||||
make
 | 
			
		||||
make install
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
3.编译openocd
 | 
			
		||||
命令如下:
 | 
			
		||||
unzip openocd-master.zip
 | 
			
		||||
cd  unzip openocd-master
 | 
			
		||||
./bootstrap
 | 
			
		||||
 | 
			
		||||
JIMTCL_CFLAGS="-I /home/book/create_fs/src/openocd_app/jimtcl-master/tmp/include"  JIMTCL_LIBS="-L/home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib  /home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib/libjim.a"   LIBUSB1_CFLAGS="-I /home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/include/libusb-1.0/"  LIBUSB1_LIBS="-L/home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib -lusb-1.0" ./configure --host=arm-buildroot-linux-gnueabihf  --enable-stlink --prefix=$PWD/tmp
 | 
			
		||||
 | 
			
		||||
make  // 会在最后链接时出错, 手工执行下面的链接命令
 | 
			
		||||
 | 
			
		||||
arm-buildroot-linux-gnueabihf-gcc -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Wpointer-arith -Wundef -Werror -g -O2 -o src/openocd src/main.o  src/.libs/libopenocd.a -L/home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib /home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib/libusb-1.0.so   -lpthread -lm -L/home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib /home/book/create_fs/src/openocd_app/jimtcl-master/tmp/lib/libjim.a -lutil -ldl -pthread -Wl,-rpath -Wl,/home/book/create_fs/src/openocd_app/libusb-1.0.28/tmp/lib  -lssl -lz -lcrypto
 | 
			
		||||
 | 
			
		||||
make install
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
cd /etc/openocd/scripts
 | 
			
		||||
openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c halt -c "flash write_image erase /root/demo.bin 0x08000000" -c reset -c shutdown
 | 
			
		||||
@@ -0,0 +1,47 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# 判断参数数量
 | 
			
		||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
 | 
			
		||||
    echo "Usage: /bin/sensor_test.sh [led1|led2|led3|beep1|beep2|humi|temp] [on|off]"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
device="/dev/ttymxc2"
 | 
			
		||||
 | 
			
		||||
# 判断第一个参数
 | 
			
		||||
case $1 in
 | 
			
		||||
    led1|led2|led3|beep1|beep2)
 | 
			
		||||
        # 判断是否为 led 或 beep 命令
 | 
			
		||||
        if [ $# -eq 2 ] && [[ "$2" == "on" || "$2" == "off" ]]; then
 | 
			
		||||
            # 调用传感器测试程序
 | 
			
		||||
            /bin/sensor_test "$device" "$1" "$2"
 | 
			
		||||
 	else
 | 
			
		||||
            echo "Error: Invalid command for $1. Use 'on' or 'off'."
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    humi|temp)
 | 
			
		||||
        # 判断是否为 humi 或 temp 命令
 | 
			
		||||
        if [ $# -eq 1  ]; then
 | 
			
		||||
            # 调用传感器测试程序
 | 
			
		||||
            result=$(/bin/sensor_test "$device" "$1")
 | 
			
		||||
 | 
			
		||||
	    # 使用 grep 和 sed 提取数值
 | 
			
		||||
            if [ "$1" == "temp" ]; then
 | 
			
		||||
                value=$(echo "$result" | grep -oP "Temperature: \K[0-9]+\.[0-9]+")
 | 
			
		||||
            elif [ "$1" == "humi" ]; then
 | 
			
		||||
                value=$(echo "$result" | grep -oP "Humidity: \K[0-9]+\.[0-9]+")
 | 
			
		||||
            fi
 | 
			
		||||
            # 输出结果
 | 
			
		||||
            echo "$value"
 | 
			
		||||
 | 
			
		||||
        else
 | 
			
		||||
            echo "Error: Invalid command for $1. No additional arguments needed."
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Error: Invalid device. Use led1, led2, beep1, beep2, humi, or temp."
 | 
			
		||||
        exit 1
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								QT工业物联网开发实战:OpenOCD烧录与Modbus通信.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								QT工业物联网开发实战:OpenOCD烧录与Modbus通信.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -33,6 +33,7 @@ reboot
 | 
			
		||||
# 6. 运行程序, 在开发板执行如下命令:
 | 
			
		||||
#    在单板上执行测试程序:
 | 
			
		||||
export TSLIB_PLUGINDIR=/lib/ts
 | 
			
		||||
export TSLIB_CONSOLEDEVICE=none
 | 
			
		||||
ts_test_mt
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ reboot
 | 
			
		||||
# 6. 运行程序, 在开发板执行如下命令:
 | 
			
		||||
#    在单板上执行测试程序:
 | 
			
		||||
export TSLIB_PLUGINDIR=/lib/ts
 | 
			
		||||
export TSLIB_CONSOLEDEVICE=none
 | 
			
		||||
ts_test_mt
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,3 +30,4 @@ udhcpc -i wlan0
 | 
			
		||||
ping news.qq.com
 | 
			
		||||
 | 
			
		||||
# 成功后,以后再次启动系统后,只需要执行第5、第7条命令即可连接WIFI
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user