mirror of
https://github.com/sipeed/LicheeRV-Nano-Build.git
synced 2026-09-12 05:39:55 -05:00
Compare commits
161 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4003f15b3 | ||
|
|
61013d819e | ||
|
|
6073d5d3e6 | ||
|
|
0e5887fed6 | ||
|
|
198086d16e | ||
|
|
f3639b07dd | ||
|
|
27b96adb52 | ||
|
|
5602fd9d59 | ||
|
|
505c0a56c3 | ||
|
|
891bfba94f | ||
|
|
6aedfa43db | ||
|
|
21ffdadc78 | ||
|
|
64510bd44d | ||
|
|
4c9e842ee1 | ||
|
|
017c2724d2 | ||
|
|
639ae39291 | ||
|
|
a3ccb527b2 | ||
|
|
e4e133f3df | ||
|
|
74169741e0 | ||
|
|
48724b1a0d | ||
|
|
c4bd8d00cc | ||
|
|
d3b91ff1fd | ||
|
|
80cd8fe0cf | ||
|
|
b8e61612e5 | ||
|
|
370d332f61 | ||
|
|
1fcc2fd409 | ||
|
|
b2af9afb7b | ||
|
|
6773bbd49c | ||
|
|
3ce208ed4a | ||
|
|
32fedadb95 | ||
|
|
71366bba6d | ||
|
|
5394d82d36 | ||
|
|
3e15254fda | ||
|
|
d687d7c89f | ||
|
|
e0857d878c | ||
|
|
2506969b13 | ||
|
|
71bcc30754 | ||
|
|
c3b98df9aa | ||
|
|
05cc1b41a9 | ||
|
|
c9179876b7 | ||
|
|
5613f01f4c | ||
|
|
ae8d34b5c9 | ||
|
|
b9189b85b1 | ||
|
|
fae0437895 | ||
|
|
540e9435a1 | ||
|
|
fe0d6c8413 | ||
|
|
441888b5bf | ||
|
|
3042208f78 | ||
|
|
c99d1839c6 | ||
|
|
26beec94d8 | ||
|
|
1d5c76c297 | ||
|
|
a652cdf214 | ||
|
|
8ad8100af7 | ||
|
|
2588dd8dec | ||
|
|
0fd87890d8 | ||
|
|
1dd70fb86b | ||
|
|
fab2c7e9ec | ||
|
|
45fffd0c2d | ||
|
|
e0118303d0 | ||
|
|
835cae07f3 | ||
|
|
75fc0b5f72 | ||
|
|
d6ba0b0a9e | ||
|
|
b639458b1c | ||
|
|
c5e7bd8e8a | ||
|
|
6aa6f6005a | ||
|
|
a0dd574a11 | ||
|
|
632a76b919 | ||
|
|
245a5827da | ||
|
|
aa8b82b114 | ||
|
|
60994cf636 | ||
|
|
9c961a8be6 | ||
|
|
6f4aafa54e | ||
|
|
2e8ca21757 | ||
|
|
0a7a27260d | ||
|
|
40170c1672 | ||
|
|
752683e13b | ||
|
|
67c7a6c36f | ||
|
|
d116757f47 | ||
|
|
cde77bdacb | ||
|
|
93c2fb99d4 | ||
|
|
db210284e6 | ||
|
|
cb7a562241 | ||
|
|
cbdd1ceee5 | ||
|
|
e26614ad36 | ||
|
|
82012f20c2 | ||
|
|
d80ada2d6f | ||
|
|
38156d546e | ||
|
|
4836f6e127 | ||
|
|
713161599e | ||
|
|
ebfa11ffba | ||
|
|
a2d9fd0f6a | ||
|
|
0de38f39d1 | ||
|
|
ab3c5d9329 | ||
|
|
bb26cf2bc6 | ||
|
|
fc359c8a6d | ||
|
|
dfe981e5e1 | ||
|
|
9f330c8b83 | ||
|
|
d6a1a42ae4 | ||
|
|
b0a69a2853 | ||
|
|
33e46c1109 | ||
|
|
bd92529ed8 | ||
|
|
378a06730f | ||
|
|
bef2ca41ab | ||
|
|
c048db4984 | ||
|
|
6be3e66437 | ||
|
|
4bb531573b | ||
|
|
abccc497e3 | ||
|
|
e5bd5a8b7f | ||
|
|
fc2bb198df | ||
|
|
587710af28 | ||
|
|
65b0a63ff1 | ||
|
|
3541f19a68 | ||
|
|
2459349f47 | ||
|
|
165c13fc1e | ||
|
|
6f65fa1025 | ||
|
|
e4064b1b99 | ||
|
|
cbe64d6240 | ||
|
|
2d2bfb11f9 | ||
|
|
a4c7ee1b6c | ||
|
|
f85d122178 | ||
|
|
077f1019a6 | ||
|
|
56ffe4346a | ||
|
|
538654eec2 | ||
|
|
608df819e8 | ||
|
|
82a0b70d86 | ||
|
|
53e80a481f | ||
|
|
58f1952f91 | ||
|
|
e4c87a6db0 | ||
|
|
f88933c279 | ||
|
|
17ac2f04de | ||
|
|
35bcba4669 | ||
|
|
892cddc08e | ||
|
|
05f0c9ec27 | ||
|
|
3c0a81cf90 | ||
|
|
758bfac682 | ||
|
|
9af3db7d4d | ||
|
|
20a606bbdb | ||
|
|
646bd60447 | ||
|
|
f3ea496a1a | ||
|
|
83ed7eae08 | ||
|
|
e73f5de35d | ||
|
|
b9dd20e9e2 | ||
|
|
3ee0bd6338 | ||
|
|
90f973b98b | ||
|
|
66fedc1a27 | ||
|
|
6cbfa16a22 | ||
|
|
f9348c4b1c | ||
|
|
eb7c808497 | ||
|
|
81dc709f99 | ||
|
|
5c35c86ea5 | ||
|
|
2f25198422 | ||
|
|
c65a118dfd | ||
|
|
1eee814e78 | ||
|
|
03abdfe495 | ||
|
|
f9fe939c24 | ||
|
|
d18e19c362 | ||
|
|
89c2b52bbd | ||
|
|
cb03057336 | ||
|
|
1daa602f32 | ||
|
|
8d286613a2 | ||
|
|
16d76badff |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,6 +1,11 @@
|
||||
*~
|
||||
*.swp
|
||||
*.o
|
||||
*.ko
|
||||
*.d
|
||||
!init.d
|
||||
host-tools/
|
||||
host-tools
|
||||
*.sqfs
|
||||
build/tools/common/sd_tools/genimage.cfg.tmp
|
||||
fsbl/build/*
|
||||
@@ -413,3 +418,7 @@ middleware/v2/sample/vio/sample_vio.o
|
||||
middleware/v2/sample/vio/sample_vio_main.d
|
||||
middleware/v2/sample/vio/sample_vio_main.o
|
||||
osdrv/extdrv/wireless/.tmp_4261/
|
||||
middleware/v2/lib
|
||||
host-tools/
|
||||
kvm/
|
||||
.vscode*
|
||||
|
||||
30
README.md
30
README.md
@@ -15,8 +15,8 @@ you can use container:
|
||||
```
|
||||
cd host/ubuntu
|
||||
docker build -t licheervnano-build-ubuntu .
|
||||
docker run --name licheervnano-build-ubuntu
|
||||
docker export | sqfstar licheervnano-build-ubuntu.sqfs
|
||||
docker run --name licheervnano-build-ubuntu licheervnano-build-ubuntu
|
||||
docker export licheervnano-build-ubuntu | sqfstar licheervnano-build-ubuntu.sqfs
|
||||
singularity shell -e licheervnano-build-ubuntu.sqfs
|
||||
```
|
||||
|
||||
@@ -33,4 +33,28 @@ build_all
|
||||
|
||||
# build fail
|
||||
|
||||
on some system, qt5svg or qt5base will build failed on first build, please retryby command build_all
|
||||
on some system, qt5svg or qt5base will build failed on first build, please retry command:
|
||||
|
||||
```
|
||||
build_all
|
||||
```
|
||||
|
||||
# how to modify image after build:
|
||||
|
||||
```
|
||||
# first partition
|
||||
touch wifi.sta
|
||||
mcopy -i install/xxx/xxx.img@@1s wifi.sta ::/
|
||||
|
||||
# second partition
|
||||
./host/mount_ext4.sh install/xxx/xxx.img mountpoint
|
||||
cd mountpoint
|
||||
touch xxx
|
||||
```
|
||||
|
||||
# logo
|
||||
|
||||
```
|
||||
./host/make_logo.sh input.jpeg logo.jpeg
|
||||
mcopy -i install/xxx/xxx.img@@1s logo.jpeg ::/
|
||||
```
|
||||
|
||||
@@ -233,6 +233,7 @@
|
||||
clocks = <&clk CV181X_CLK_SPI>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
spi3:spi3@041B0000 {
|
||||
|
||||
@@ -57,14 +57,29 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
clocks = <&clk CV181X_CLK_UART0>;
|
||||
/delete-property/ clock-frequency;
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
clocks = <&clk CV181X_CLK_UART1>;
|
||||
/delete-property/ clock-frequency;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
clocks = <&clk CV181X_CLK_UART2>;
|
||||
/delete-property/ clock-frequency;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart3 {
|
||||
clocks = <&clk CV181X_CLK_UART3>;
|
||||
/delete-property/ clock-frequency;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm0 {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -86,7 +101,7 @@
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
status = "disabled";
|
||||
status = "okay";
|
||||
/delete-property/ scl-pinmux;
|
||||
/delete-property/ sda-pinmux;
|
||||
/delete-property/ scl-gpios;
|
||||
@@ -94,7 +109,7 @@
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
statuc = "okay";
|
||||
status = "okay";
|
||||
gt9xx: gt9xx@14 {
|
||||
compatible = "goodix,gt9xx";
|
||||
reg = <0x14>;
|
||||
@@ -102,17 +117,57 @@
|
||||
goodix,rst-gpio = <&porte 4 0>;
|
||||
status = "okay";
|
||||
};
|
||||
hytr: hynitron@5a {
|
||||
compatible = "hynitron,hyn_ts";
|
||||
reg = <0x5a>;
|
||||
hynitron,irq-gpio = <&porte 3 0>;
|
||||
hynitron,reset-gpio = <&porte 4 0>;
|
||||
hynitron,max-touch-number = <5>;
|
||||
hynitron,display-coords = <368 552>;
|
||||
hynitron: hynitron@5a {
|
||||
compatible = "hynitron,hyn_ts", "hyn,7xx";
|
||||
reg = <0x5a>;
|
||||
irq-gpio = <&porte 3 0>;
|
||||
hynitron,irq-gpio = <&porte 3 0>;
|
||||
reset-gpio = <&porte 4 0>;
|
||||
hynitron,reset-gpio = <&porte 4 0>;
|
||||
max-touch-number = <5>;
|
||||
hynitron,max-touch-number = <5>;
|
||||
display-coords = <0 0 480 640>;
|
||||
hynitron,display-coords = <368 552>;
|
||||
pos-swap = <0>;
|
||||
posx-reverse = <1>;
|
||||
posy-reverse = <1>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi2 {
|
||||
status = "okay";
|
||||
|
||||
// /delete-node/ spidev@0;
|
||||
st7789: st7789@0{
|
||||
compatible = "sitronix,st7789";
|
||||
reg = <0>;
|
||||
status = "disabled";
|
||||
spi-max-frequency = <80000000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
rotate = <0>;
|
||||
fps = <60>;
|
||||
rgb;
|
||||
buswidth = <8>;
|
||||
dc = <&porte 20 GPIO_ACTIVE_HIGH>;
|
||||
reset = <&porta 14 GPIO_ACTIVE_LOW>;
|
||||
debug = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&spi3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dac {
|
||||
status = "okay";
|
||||
/delete-property/ mute-gpio-r;
|
||||
@@ -133,6 +188,29 @@
|
||||
/ {
|
||||
model = "LicheeRv Nano";
|
||||
|
||||
spi4: spi4@gpio {
|
||||
compatible = "spi-gpio";
|
||||
sck-gpio = <&porta 22 0>;
|
||||
miso-gpio = <&porta 23 0>;
|
||||
mosi-gpio = <&porta 25 0>;
|
||||
cs-gpio = <&porta 24 GPIO_ACTIVE_LOW>;
|
||||
num-chipselects = <1>;
|
||||
status = "okay";
|
||||
|
||||
spidev@0 {
|
||||
compatible = "spidev";
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c5: i2c5@gpio {
|
||||
compatible = "i2c-gpio";
|
||||
scl-gpios = <&porta 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
sda-gpios = <&porta 27 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <5>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
key-user {
|
||||
|
||||
@@ -117,9 +117,13 @@ CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_SLAVE=y
|
||||
CONFIG_I2C_SLAVE_EEPROM=y
|
||||
CONFIG_I2C_DESIGNWARE_SLAVE=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_I2C_GPIO=m
|
||||
# CONFIG_PTP_1588_CLOCK is not set
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_CVITEK_PINCTRL_CV1835=y
|
||||
@@ -353,6 +357,8 @@ CONFIG_VIDEO_CVITEK_MIPI_TX=m
|
||||
# end of Digital TV options
|
||||
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FB_TFT is not set
|
||||
# CONFIG_FB_TFT_ST7789 is not set
|
||||
CONFIG_FB_CVITEK=m
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
@@ -361,7 +367,9 @@ CONFIG_SND=y
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
CONFIG_SND_HDA_PREALLOC_SIZE=1
|
||||
# CONFIG_SND_SPI is not set
|
||||
# CONFIG_SND_USB is not set
|
||||
CONFIG_SND_USB=y
|
||||
CONFIG_SND_USB_AUDIO=y
|
||||
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
|
||||
CONFIG_SND_SOC_CV182XA_CV182XADAC=y
|
||||
@@ -474,7 +482,7 @@ CONFIG_USB_CONFIGFS=y
|
||||
CONFIG_USB_CONFIGFS_SERIAL=y
|
||||
CONFIG_USB_CONFIGFS_ACM=y
|
||||
# CONFIG_USB_CONFIGFS_OBEX is not set
|
||||
# CONFIG_USB_CONFIGFS_NCM is not set
|
||||
CONFIG_USB_CONFIGFS_NCM=y
|
||||
CONFIG_USB_CONFIGFS_ECM=y
|
||||
# CONFIG_USB_CONFIGFS_ECM_SUBSET is not set
|
||||
CONFIG_USB_CONFIGFS_RNDIS=y
|
||||
@@ -487,11 +495,11 @@ CONFIG_USB_CONFIGFS_F_UAC1=y
|
||||
# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set
|
||||
# CONFIG_USB_CONFIGFS_F_UAC2 is not set
|
||||
# CONFIG_USB_CONFIGFS_F_MIDI is not set
|
||||
# CONFIG_USB_CONFIGFS_F_HID is not set
|
||||
CONFIG_USB_CONFIGFS_F_HID=y
|
||||
CONFIG_USB_CONFIGFS_F_UVC=y
|
||||
CONFIG_BUG=n
|
||||
CONFIG_ADVISE_SYSCALLS=n
|
||||
CONFIG_TIMERFD=n
|
||||
CONFIG_TIMERFD=y
|
||||
|
||||
# for licheervnano
|
||||
CONFIG_FB_SIMPLE=y
|
||||
@@ -507,6 +515,9 @@ CONFIG_BT_HS=y
|
||||
CONFIG_BT_LE=y
|
||||
CONFIG_BT_HCIUART=y
|
||||
CONFIG_BT_HCIUART_BCSP=y
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_3WIRE=y
|
||||
CONFIG_BT_HCIUART_RTL=y
|
||||
CONFIG_SERIAL_DEV_BUS=y
|
||||
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
|
||||
CONFIG_SWAP=y
|
||||
@@ -527,6 +538,8 @@ CONFIG_KEYBOARD_GPIO=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_HYNITRON_TS=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
# CONFIG_MAGIC_SYSRQ_SERIAL is not set
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
@@ -548,17 +561,23 @@ CONFIG_VT=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=m
|
||||
CONFIG_BACKLIGHT_PWM=m
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_DESIGNWARE=y
|
||||
CONFIG_SPI_DW_MMIO=y
|
||||
CONFIG_SPI_GPIO=m
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
|
||||
# these driver may broken codec driver
|
||||
# CONFIG_FUSE_FS is not set
|
||||
# CONFIG_CUSE is not set
|
||||
# CONFIG_OVERLAY_FS is not set
|
||||
# CONFIG_NAMESPACES is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
CONFIG_USER_NS=y
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_NET_NS=y
|
||||
# CONFIG_CGROUPS is not set
|
||||
# CONFIG_MEMCG is not set
|
||||
# CONFIG_BLK_CGROUP is not set
|
||||
@@ -572,3 +591,422 @@ CONFIG_BACKLIGHT_PWM=m
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_IO_URING=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_EXFAT_FS=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_DIAG=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_SCM=y
|
||||
CONFIG_UNIX_DIAG=y
|
||||
# CONFIG_TLS is not set
|
||||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_ROUTE_CLASSID=y
|
||||
# CONFIG_IP_PNP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
CONFIG_NET_IPGRE=y
|
||||
# CONFIG_NET_IPGRE_DEMUX is not set
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
CONFIG_SYN_COOKIES=y
|
||||
# CONFIG_NET_IPVTI is not set
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
CONFIG_TCP_CONG_ADVANCED=y
|
||||
CONFIG_TCP_CONG_CUBIC=y
|
||||
CONFIG_TCP_CONG_BBR=y
|
||||
CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_TCP_MD5SIG is not set
|
||||
CONFIG_IPV6=y
|
||||
# CONFIG_IPV6_ROUTER_PREF is not set
|
||||
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
|
||||
# CONFIG_INET6_AH is not set
|
||||
# CONFIG_INET6_ESP is not set
|
||||
# CONFIG_INET6_IPCOMP is not set
|
||||
# CONFIG_IPV6_MIP6 is not set
|
||||
# CONFIG_IPV6_ILA is not set
|
||||
# CONFIG_IPV6_VTI is not set
|
||||
# CONFIG_IPV6_SIT is not set
|
||||
CONFIG_IPV6_TUNNEL=y
|
||||
CONFIG_IPV6_GRE=y
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_MROUTE is not set
|
||||
# CONFIG_IPV6_SEG6_LWTUNNEL is not set
|
||||
# CONFIG_IPV6_SEG6_HMAC is not set
|
||||
# CONFIG_IPV6_RPL_LWTUNNEL is not set
|
||||
# CONFIG_MPTCP is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NETFILTER_ADVANCED=y
|
||||
|
||||
#
|
||||
# Core Netfilter Configuration
|
||||
#
|
||||
CONFIG_NETFILTER_INGRESS=y
|
||||
CONFIG_NETFILTER_NETLINK=y
|
||||
CONFIG_NETFILTER_FAMILY_ARP=y
|
||||
CONFIG_NETFILTER_NETLINK_ACCT=y
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=y
|
||||
CONFIG_NETFILTER_NETLINK_LOG=y
|
||||
CONFIG_NETFILTER_NETLINK_OSF=y
|
||||
CONFIG_NF_CONNTRACK=y
|
||||
CONFIG_NF_LOG_COMMON=y
|
||||
CONFIG_NF_LOG_NETDEV=y
|
||||
CONFIG_NETFILTER_CONNCOUNT=y
|
||||
CONFIG_NF_CONNTRACK_MARK=y
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
CONFIG_NF_CONNTRACK_PROCFS=y
|
||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||
CONFIG_NF_CONNTRACK_LABELS=y
|
||||
CONFIG_NF_CT_PROTO_DCCP=y
|
||||
CONFIG_NF_CT_PROTO_GRE=y
|
||||
CONFIG_NF_CT_PROTO_SCTP=y
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=y
|
||||
CONFIG_NF_CONNTRACK_AMANDA=y
|
||||
CONFIG_NF_CONNTRACK_FTP=y
|
||||
CONFIG_NF_CONNTRACK_H323=y
|
||||
CONFIG_NF_CONNTRACK_IRC=y
|
||||
CONFIG_NF_CONNTRACK_BROADCAST=y
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
|
||||
CONFIG_NF_CONNTRACK_SNMP=y
|
||||
CONFIG_NF_CONNTRACK_PPTP=y
|
||||
CONFIG_NF_CONNTRACK_SANE=y
|
||||
CONFIG_NF_CONNTRACK_SIP=y
|
||||
CONFIG_NF_CONNTRACK_TFTP=y
|
||||
CONFIG_NF_CT_NETLINK=y
|
||||
CONFIG_NF_CT_NETLINK_TIMEOUT=y
|
||||
CONFIG_NF_CT_NETLINK_HELPER=y
|
||||
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
|
||||
CONFIG_NF_NAT=y
|
||||
CONFIG_NF_NAT_AMANDA=y
|
||||
CONFIG_NF_NAT_FTP=y
|
||||
CONFIG_NF_NAT_IRC=y
|
||||
CONFIG_NF_NAT_SIP=y
|
||||
CONFIG_NF_NAT_TFTP=y
|
||||
CONFIG_NF_NAT_REDIRECT=y
|
||||
CONFIG_NF_NAT_MASQUERADE=y
|
||||
CONFIG_NETFILTER_SYNPROXY=y
|
||||
CONFIG_NF_TABLES=y
|
||||
CONFIG_NF_TABLES_INET=y
|
||||
CONFIG_NF_TABLES_NETDEV=y
|
||||
CONFIG_NFT_NUMGEN=y
|
||||
CONFIG_NFT_CT=y
|
||||
# CONFIG_NFT_FLOW_OFFLOAD is not set
|
||||
CONFIG_NFT_COUNTER=y
|
||||
CONFIG_NFT_CONNLIMIT=y
|
||||
CONFIG_NFT_LOG=y
|
||||
CONFIG_NFT_LIMIT=y
|
||||
CONFIG_NFT_MASQ=y
|
||||
CONFIG_NFT_REDIR=y
|
||||
CONFIG_NFT_NAT=y
|
||||
CONFIG_NFT_TUNNEL=y
|
||||
CONFIG_NFT_OBJREF=y
|
||||
CONFIG_NFT_QUEUE=y
|
||||
CONFIG_NFT_QUOTA=y
|
||||
CONFIG_NFT_REJECT=y
|
||||
CONFIG_NFT_REJECT_INET=y
|
||||
CONFIG_NFT_COMPAT=y
|
||||
CONFIG_NFT_HASH=y
|
||||
CONFIG_NFT_FIB=y
|
||||
# CONFIG_NFT_FIB_INET is not set
|
||||
CONFIG_NFT_SOCKET=y
|
||||
CONFIG_NFT_OSF=y
|
||||
CONFIG_NFT_TPROXY=y
|
||||
CONFIG_NFT_SYNPROXY=y
|
||||
CONFIG_NF_DUP_NETDEV=y
|
||||
CONFIG_NFT_DUP_NETDEV=y
|
||||
CONFIG_NFT_FWD_NETDEV=y
|
||||
# CONFIG_NFT_FIB_NETDEV is not set
|
||||
CONFIG_NF_FLOW_TABLE_INET=y
|
||||
CONFIG_NF_FLOW_TABLE=y
|
||||
CONFIG_NETFILTER_XTABLES=y
|
||||
|
||||
#
|
||||
# Xtables combined modules
|
||||
#
|
||||
CONFIG_NETFILTER_XT_MARK=y
|
||||
CONFIG_NETFILTER_XT_CONNMARK=y
|
||||
CONFIG_NETFILTER_XT_SET=y
|
||||
|
||||
#
|
||||
# Xtables targets
|
||||
#
|
||||
# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
|
||||
# CONFIG_NETFILTER_XT_TARGET_CT is not set
|
||||
# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
|
||||
CONFIG_NETFILTER_XT_TARGET_HL=y
|
||||
CONFIG_NETFILTER_XT_TARGET_HMARK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
|
||||
CONFIG_NETFILTER_XT_TARGET_LED=y
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=y
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=y
|
||||
CONFIG_NETFILTER_XT_NAT=y
|
||||
CONFIG_NETFILTER_XT_TARGET_NETMAP=y
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
|
||||
# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
|
||||
CONFIG_NETFILTER_XT_TARGET_RATEEST=y
|
||||
CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
|
||||
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
|
||||
CONFIG_NETFILTER_XT_TARGET_TEE=y
|
||||
# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set
|
||||
# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
|
||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
|
||||
# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
|
||||
|
||||
#
|
||||
# Xtables matches
|
||||
#
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=y
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CPU=y
|
||||
CONFIG_NETFILTER_XT_MATCH_DCCP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_DSCP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_ECN=y
|
||||
CONFIG_NETFILTER_XT_MATCH_ESP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=y
|
||||
CONFIG_NETFILTER_XT_MATCH_HL=y
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_IPVS=y
|
||||
CONFIG_NETFILTER_XT_MATCH_L2TP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_NFACCT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_OSF=y
|
||||
CONFIG_NETFILTER_XT_MATCH_OWNER=y
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
|
||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=y
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=y
|
||||
CONFIG_NETFILTER_XT_MATCH_RECENT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_SCTP=y
|
||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=y
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
|
||||
CONFIG_NETFILTER_XT_MATCH_TIME=y
|
||||
CONFIG_NETFILTER_XT_MATCH_U32=y
|
||||
# end of Core Netfilter Configuration
|
||||
|
||||
CONFIG_IP_SET=y
|
||||
CONFIG_IP_SET_MAX=256
|
||||
# CONFIG_IP_SET_BITMAP_IP is not set
|
||||
# CONFIG_IP_SET_BITMAP_IPMAC is not set
|
||||
# CONFIG_IP_SET_BITMAP_PORT is not set
|
||||
# CONFIG_IP_SET_HASH_IP is not set
|
||||
# CONFIG_IP_SET_HASH_IPMARK is not set
|
||||
# CONFIG_IP_SET_HASH_IPPORT is not set
|
||||
# CONFIG_IP_SET_HASH_IPPORTIP is not set
|
||||
# CONFIG_IP_SET_HASH_IPPORTNET is not set
|
||||
# CONFIG_IP_SET_HASH_IPMAC is not set
|
||||
# CONFIG_IP_SET_HASH_MAC is not set
|
||||
# CONFIG_IP_SET_HASH_NETPORTNET is not set
|
||||
# CONFIG_IP_SET_HASH_NET is not set
|
||||
# CONFIG_IP_SET_HASH_NETNET is not set
|
||||
# CONFIG_IP_SET_HASH_NETPORT is not set
|
||||
# CONFIG_IP_SET_HASH_NETIFACE is not set
|
||||
# CONFIG_IP_SET_LIST_SET is not set
|
||||
CONFIG_IP_VS=y
|
||||
# CONFIG_IP_VS_IPV6 is not set
|
||||
# CONFIG_IP_VS_DEBUG is not set
|
||||
CONFIG_IP_VS_TAB_BITS=12
|
||||
|
||||
#
|
||||
# IPVS transport protocol load balancing support
|
||||
#
|
||||
# CONFIG_IP_VS_PROTO_TCP is not set
|
||||
# CONFIG_IP_VS_PROTO_UDP is not set
|
||||
# CONFIG_IP_VS_PROTO_ESP is not set
|
||||
# CONFIG_IP_VS_PROTO_AH is not set
|
||||
# CONFIG_IP_VS_PROTO_SCTP is not set
|
||||
|
||||
#
|
||||
# IPVS scheduler
|
||||
#
|
||||
# CONFIG_IP_VS_RR is not set
|
||||
# CONFIG_IP_VS_WRR is not set
|
||||
# CONFIG_IP_VS_LC is not set
|
||||
# CONFIG_IP_VS_WLC is not set
|
||||
# CONFIG_IP_VS_FO is not set
|
||||
# CONFIG_IP_VS_OVF is not set
|
||||
# CONFIG_IP_VS_LBLC is not set
|
||||
# CONFIG_IP_VS_LBLCR is not set
|
||||
# CONFIG_IP_VS_DH is not set
|
||||
# CONFIG_IP_VS_SH is not set
|
||||
# CONFIG_IP_VS_MH is not set
|
||||
# CONFIG_IP_VS_SED is not set
|
||||
# CONFIG_IP_VS_NQ is not set
|
||||
|
||||
#
|
||||
# IPVS SH scheduler
|
||||
#
|
||||
CONFIG_IP_VS_SH_TAB_BITS=8
|
||||
|
||||
#
|
||||
# IPVS MH scheduler
|
||||
#
|
||||
CONFIG_IP_VS_MH_TAB_INDEX=12
|
||||
|
||||
#
|
||||
# IPVS application helper
|
||||
#
|
||||
# CONFIG_IP_VS_NFCT is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
#
|
||||
CONFIG_NF_DEFRAG_IPV4=y
|
||||
CONFIG_NF_SOCKET_IPV4=y
|
||||
CONFIG_NF_TPROXY_IPV4=y
|
||||
CONFIG_NF_TABLES_IPV4=y
|
||||
CONFIG_NFT_REJECT_IPV4=y
|
||||
CONFIG_NFT_DUP_IPV4=y
|
||||
CONFIG_NFT_FIB_IPV4=y
|
||||
CONFIG_NF_TABLES_ARP=y
|
||||
CONFIG_NF_FLOW_TABLE_IPV4=y
|
||||
CONFIG_NF_DUP_IPV4=y
|
||||
CONFIG_NF_LOG_ARP=y
|
||||
CONFIG_NF_LOG_IPV4=y
|
||||
CONFIG_NF_REJECT_IPV4=y
|
||||
CONFIG_NF_NAT_SNMP_BASIC=y
|
||||
CONFIG_NF_NAT_PPTP=y
|
||||
CONFIG_NF_NAT_H323=y
|
||||
CONFIG_IP_NF_IPTABLES=y
|
||||
CONFIG_IP_NF_MATCH_AH=y
|
||||
CONFIG_IP_NF_MATCH_ECN=y
|
||||
# CONFIG_IP_NF_MATCH_RPFILTER is not set
|
||||
CONFIG_IP_NF_MATCH_TTL=y
|
||||
CONFIG_IP_NF_FILTER=y
|
||||
CONFIG_IP_NF_TARGET_REJECT=y
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=y
|
||||
CONFIG_IP_NF_NAT=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=y
|
||||
CONFIG_IP_NF_TARGET_NETMAP=y
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=y
|
||||
CONFIG_IP_NF_MANGLE=y
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=y
|
||||
CONFIG_IP_NF_TARGET_ECN=y
|
||||
CONFIG_IP_NF_TARGET_TTL=y
|
||||
CONFIG_IP_NF_RAW=y
|
||||
CONFIG_IP_NF_ARPTABLES=y
|
||||
CONFIG_IP_NF_ARPFILTER=y
|
||||
CONFIG_IP_NF_ARP_MANGLE=y
|
||||
# end of IP: Netfilter Configuration
|
||||
|
||||
#
|
||||
# IPv6: Netfilter Configuration
|
||||
#
|
||||
CONFIG_NF_SOCKET_IPV6=y
|
||||
CONFIG_NF_TPROXY_IPV6=y
|
||||
CONFIG_NF_TABLES_IPV6=y
|
||||
CONFIG_NFT_REJECT_IPV6=y
|
||||
CONFIG_NFT_DUP_IPV6=y
|
||||
CONFIG_NFT_FIB_IPV6=y
|
||||
CONFIG_NF_FLOW_TABLE_IPV6=y
|
||||
CONFIG_NF_DUP_IPV6=y
|
||||
CONFIG_NF_REJECT_IPV6=y
|
||||
CONFIG_NF_LOG_IPV6=y
|
||||
CONFIG_IP6_NF_IPTABLES=y
|
||||
CONFIG_IP6_NF_MATCH_AH=y
|
||||
CONFIG_IP6_NF_MATCH_EUI64=y
|
||||
CONFIG_IP6_NF_MATCH_FRAG=y
|
||||
CONFIG_IP6_NF_MATCH_OPTS=y
|
||||
CONFIG_IP6_NF_MATCH_HL=y
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
|
||||
CONFIG_IP6_NF_MATCH_MH=y
|
||||
# CONFIG_IP6_NF_MATCH_RPFILTER is not set
|
||||
CONFIG_IP6_NF_MATCH_RT=y
|
||||
CONFIG_IP6_NF_MATCH_SRH=y
|
||||
# CONFIG_IP6_NF_TARGET_HL is not set
|
||||
CONFIG_IP6_NF_FILTER=y
|
||||
CONFIG_IP6_NF_TARGET_REJECT=y
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=y
|
||||
CONFIG_IP6_NF_MANGLE=y
|
||||
CONFIG_IP6_NF_RAW=y
|
||||
CONFIG_IP6_NF_NAT=y
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=y
|
||||
CONFIG_IP6_NF_TARGET_NPT=y
|
||||
# end of IPv6: Netfilter Configuration
|
||||
|
||||
CONFIG_NF_DEFRAG_IPV6=y
|
||||
CONFIG_NF_CONNTRACK_BRIDGE=y
|
||||
# CONFIG_BPFILTER is not set
|
||||
# CONFIG_IP_DCCP is not set
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_RDS is not set
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_L2TP is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
CONFIG_HAVE_NET_DSA=y
|
||||
# CONFIG_NET_DSA is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_6LOWPAN is not set
|
||||
# CONFIG_IEEE802154 is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
# CONFIG_DNS_RESOLVER is not set
|
||||
# CONFIG_BATMAN_ADV is not set
|
||||
# CONFIG_OPENVSWITCH is not set
|
||||
# CONFIG_VSOCKETS is not set
|
||||
CONFIG_NETLINK_DIAG=y
|
||||
# CONFIG_MPLS is not set
|
||||
# CONFIG_NET_NSH is not set
|
||||
# CONFIG_HSR is not set
|
||||
# CONFIG_NET_SWITCHDEV is not set
|
||||
# CONFIG_NET_L3_MASTER_DEV is not set
|
||||
# CONFIG_QRTR is not set
|
||||
# CONFIG_NET_NCSI is not set
|
||||
CONFIG_NET_RX_BUSY_POLL=y
|
||||
CONFIG_BQL=y
|
||||
# CONFIG_BPF_JIT is not set
|
||||
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_NET_CORE=y
|
||||
CONFIG_WIREGUARD=y
|
||||
CONFIG_TUN=y
|
||||
|
||||
CONFIG_NET_IP_TUNNEL=y
|
||||
CONFIG_NET_UDP_TUNNEL=y
|
||||
CONFIG_VXLAN=y
|
||||
CONFIG_USB_NET_RNDIS_WLAN=m
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_OPTION=y
|
||||
CONFIG_USB_ACM=y
|
||||
|
||||
CONFIG_VETH=y
|
||||
|
||||
@@ -40,7 +40,7 @@ class MemoryMap:
|
||||
# =================
|
||||
# Multimedia buffer. Used by u-boot/kernel/FreeRTOS
|
||||
# =================
|
||||
ION_SIZE = 75 * SIZE_1M
|
||||
ION_SIZE = 105 * SIZE_1M
|
||||
H26X_BITSTREAM_SIZE = 2 * SIZE_1M
|
||||
H26X_ENC_BUFF_SIZE = 0
|
||||
ISP_MEM_BASE_SIZE = 20 * SIZE_1M
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<physical_partition type="sd">
|
||||
<partition label="BOOT" size_in_kb="80960" readonly="false" file="boot.sd"/>
|
||||
<partition label="ROOTFS" size_in_kb="1048576" readonly="false" file="rootfs.sd" />
|
||||
<partition label="ROOTFS" size_in_kb="1638400" readonly="false" file="rootfs.sd" />
|
||||
</physical_partition>
|
||||
|
||||
@@ -14,7 +14,10 @@ CONFIG_CP_EXT_WIRELESS=y
|
||||
CONFIG_STORAGE_TYPE_sd=y
|
||||
CONFIG_MIPI_PANEL_ZCT2133V1=y
|
||||
CONFIG_SENSOR_GCORE_GC4653=y
|
||||
CONFIG_SENSOR_OV_OV2685=y
|
||||
CONFIG_SENSOR_OV_OS04A10=y
|
||||
CONFIG_SENSOR_LONTIUM_LT6911=y
|
||||
CONFIG_SENSOR_SMS_SC035GS=y
|
||||
CONFIG_UBOOT_2021_10=y
|
||||
CONFIG_KERNEL_SRC_5.10=y
|
||||
CONFIG_KERNEL_UNCOMPRESSED=y
|
||||
@@ -22,5 +25,5 @@ CONFIG_KERNEL_UNCOMPRESSED=y
|
||||
CONFIG_SENSOR_TUNING_PARAM_cv181x_src_gcore_gc4653=y
|
||||
# CONFIG_SENSOR_TUNING_PARAM_sg200x_src_ov_os04a10=y
|
||||
# CONFIG_ROOTFS_OVERLAYFS is not set
|
||||
CONFIG_ENABLE_FREERTOS=y
|
||||
# CONFIG_ENABLE_FREERTOS=y
|
||||
# CONFIG_TARGET_PACKAGE_GATORD is not set
|
||||
|
||||
@@ -88,6 +88,14 @@ int cvi_board_init(void)
|
||||
mmio_write_32(0x030010E0, 0x0); // CMD
|
||||
mmio_write_32(0x030010E4, 0x0); // CLK
|
||||
|
||||
// spi2 pinmux
|
||||
// mmio_write_32(0x030010D0, 0x1); // CS
|
||||
// mmio_write_32(0x030010DC, 0x1); // MISO
|
||||
// mmio_write_32(0x030010E0, 0x1); // MOSI
|
||||
// mmio_write_32(0x030010E4, 0x1); // SCK
|
||||
// mmio_write_32(0x030010D8, 0x3); // DC
|
||||
// mmio_write_32(0x03001038, 0x3); // RESET
|
||||
|
||||
// uart bluetooth
|
||||
mmio_write_32(0x03001070, 0x1); // GPIOA 28 UART1 TX
|
||||
mmio_write_32(0x03001074, 0x1); // GPIOA 29 UART1 RX
|
||||
@@ -113,13 +121,22 @@ int cvi_board_init(void)
|
||||
mmio_write_32(0x030010EC, 0x3); // GPIOB 0 GPIO_MODE
|
||||
|
||||
// for licheervnano beta
|
||||
mmio_write_32(0x030010ac, 0x4); // PWRGPIO 2 PWM 10
|
||||
//mmio_write_32(0x030010ac, 0x0); // PWRGPIO 2 GPIO_MODE
|
||||
//mmio_write_32(0x030010ac, 0x4); // PWRGPIO 2 PWM 10
|
||||
mmio_write_32(0x030010ac, 0x0); // PWRGPIO 2 GPIO_MODE
|
||||
|
||||
// camera function
|
||||
//mmio_write_32(0x0300116C, 0x5); // RX4N CAM_MCLK0 for alpha
|
||||
mmio_write_32(0x0300118C, 0x5); // RX0N CAM_MCLK1 for beta
|
||||
|
||||
// spi1 on mipi csi
|
||||
/*
|
||||
mmio_write_32(0x0300116C, 0x7); // spi1 clk GPIOC2 MIPI_RX4N
|
||||
mmio_write_32(0x03001170, 0x7); // spi1 cs GPIOC3 MIPI_RX4P
|
||||
mmio_write_32(0x03001174, 0x7); // spi1 miso GPIOC4 MIPI_RX3N
|
||||
mmio_write_32(0x03001178, 0x7); // spi1 mosi GPIOC5 MIPI_RX3P
|
||||
*/
|
||||
|
||||
|
||||
// camera/tp i2c
|
||||
mmio_write_32(0x03001090, 0x5); // PWR_GPIO6 IIC4_SCL
|
||||
mmio_write_32(0x03001098, 0x5); // PWR_GPIO8 IIC4_SDA
|
||||
@@ -130,6 +147,16 @@ int cvi_board_init(void)
|
||||
mmio_write_32(0x05027078, 0x11);// Unlock PWR_GPIO[3]
|
||||
mmio_write_32(0x0502707c, 0x11);// Unlock PWR_GPIO[4]
|
||||
|
||||
// bitbang i2c
|
||||
mmio_write_32(0x0300103C, 0x03); // GPIOA 15 GPIO_MODE
|
||||
mmio_write_32(0x03001058, 0x03); // GPIOA 27 GPIO_MODE
|
||||
|
||||
// bitbang spi
|
||||
mmio_write_32(0x03001060, 0x03); // GPIOA 24 GPIO_MODE
|
||||
mmio_write_32(0x0300105C, 0x03); // GPIOA 23 GPIO_MODE
|
||||
mmio_write_32(0x03001054, 0x03); // GPIOA 25 GPIO_MODE
|
||||
mmio_write_32(0x03001050, 0x03); // GPIOA 22 GPIO_MODE
|
||||
|
||||
// wait hardware bootup
|
||||
suck_loop(50);
|
||||
user_led_off();
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"OV_OS04C10_SLAVE",
|
||||
"OV_OS08A20",
|
||||
"OV_OS08A20_SLAVE",
|
||||
"OV_OV2685",
|
||||
"OV_OV4689",
|
||||
"OV_OV5647",
|
||||
"OV_OV6211",
|
||||
|
||||
@@ -5,8 +5,11 @@ image boot.vfat {
|
||||
"fip.bin",
|
||||
"rawimages/boot.sd",
|
||||
"usb.dev",
|
||||
"usb.rndis0",
|
||||
"usb.ncm",
|
||||
"usb.rndis",
|
||||
"wifi.sta",
|
||||
"gt9xx",
|
||||
"logo.jpeg",
|
||||
"ver",
|
||||
}
|
||||
}
|
||||
|
||||
BIN
build/tools/common/sd_tools/logo.jpeg
Normal file
BIN
build/tools/common/sd_tools/logo.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
@@ -27,11 +27,14 @@ cp -fv ${output_dir}/fip.bin ${output_dir}/input/
|
||||
cp -fv ${output_dir}/rawimages/boot.sd ${output_dir}/input/rawimages/
|
||||
cp -fv ${output_dir}/rawimages/rootfs.sd ${output_dir}/input/
|
||||
touch ${output_dir}/input/usb.dev
|
||||
touch ${output_dir}/input/usb.rndis0
|
||||
touch ${output_dir}/input/usb.ncm
|
||||
touch ${output_dir}/input/usb.rndis
|
||||
touch ${output_dir}/input/wifi.sta
|
||||
touch ${output_dir}/input/gt9xx
|
||||
touch ${output_dir}/input/fb
|
||||
echo ${image} > ${output_dir}/input/ver
|
||||
cp -fv ${THISDIR}/genimage_rootless.cfg ${output_dir}/genimage.cfg
|
||||
cp -fv ${THISDIR}/logo.jpeg ${output_dir}/input/logo.jpeg
|
||||
sed -i -e "s/duo.img/${image}/g" ${output_dir}/genimage.cfg
|
||||
cd ${output_dir}/
|
||||
${THISDIR}/genimage
|
||||
|
||||
16
buildroot/board/cvitek/SG200X/overlay/etc/adbd_monitor.sh
Executable file
16
buildroot/board/cvitek/SG200X/overlay/etc/adbd_monitor.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
UDC_PATH=/sys/kernel/config/usb_gadget/g0/UDC
|
||||
if [ -f /boot/usb.adbd ] && [ -f /boot/usb.dev ];
|
||||
then
|
||||
while true; do
|
||||
if [ -z "$(cat $UDC_PATH | tr -d '[:space:]')" ];
|
||||
then
|
||||
echo "try restart usb device"
|
||||
/etc/init.d/S08usbdev stop
|
||||
/etc/init.d/S08usbdev start
|
||||
/etc/init.d/S30gadget_nic restart
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
fi
|
||||
@@ -7,28 +7,24 @@ then
|
||||
cd /mnt/system/ko/
|
||||
insmod soph_sys.ko
|
||||
insmod soph_base.ko
|
||||
insmod soph_rtos_cmdqu.ko
|
||||
insmod soph_fast_image.ko
|
||||
insmod soph_rtos_cmdqu.ko # optional for RTOS core
|
||||
insmod soph_fast_image.ko # optional for RTOS core
|
||||
insmod soph_mipi_rx.ko
|
||||
insmod soph_snsr_i2c.ko
|
||||
insmod soph_vi.ko
|
||||
insmod soph_vpss.ko
|
||||
insmod soph_dwa.ko
|
||||
insmod soph_vo.ko
|
||||
insmod soph_mipi_tx.ko
|
||||
# insmod soph_mipi_tx.ko
|
||||
insmod soph_rgn.ko
|
||||
insmod soph_wdt.ko
|
||||
insmod soph_clock_cooling.ko
|
||||
insmod soph_tpu.ko
|
||||
insmod soph_vcodec.ko
|
||||
insmod soph_jpeg.ko
|
||||
insmod soph_vc_driver.ko MaxVencChnNum=9 MaxVdecChnNum=9
|
||||
insmod soph_rtc.ko
|
||||
insmod soph_ive.ko
|
||||
insmod soph_mon.ko
|
||||
insmod soph_pwm.ko
|
||||
insmod soph_saradc.ko
|
||||
insmod soph_wiegand.ko
|
||||
# insmod soph_wiegand.ko # uncomment it if want use wiegand
|
||||
echo "OK"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
62
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S00pmu
Executable file
62
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S00pmu
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/sh
|
||||
|
||||
PMU_BUS=4
|
||||
PMU_ADDR=0x34
|
||||
PMU_REG_VER=0x03
|
||||
|
||||
pmu_detected() {
|
||||
pmu_version=$(i2cget -y "$PMU_BUS" "$PMU_ADDR" "$PMU_REG_VER" 2>/dev/null)
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
pmu_version=$((pmu_version & 0xCF))
|
||||
chip_id_1=$((0x47))
|
||||
chip_id_2=$((0x4a))
|
||||
|
||||
if [ "$pmu_version" -eq "$chip_id_1" ] || [ "$pmu_version" -eq "$chip_id_2" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
start() {
|
||||
# if ! command -v i2cget &> /dev/null; then
|
||||
# echo "i2cget not found, please install i2c-tools"
|
||||
# exit 1
|
||||
# fi
|
||||
|
||||
if pmu_detected; then
|
||||
exec /usr/bin/axp2101
|
||||
else
|
||||
echo "No PMU, skip"
|
||||
fi
|
||||
}
|
||||
|
||||
stop() {
|
||||
if pmu_detected; then
|
||||
runlevel=$(cat /run/runlevel | awk '{ print $1 }')
|
||||
if [ "$runlevel" = "0" ]; then
|
||||
echo "Stopping PMU"
|
||||
value=$(i2cget -y "$PMU_BUS" "$PMU_ADDR" 0x10)
|
||||
value=$((value | 0x01))
|
||||
i2cset -y "$PMU_BUS" "$PMU_ADDR" 0x10 $value
|
||||
fi
|
||||
else
|
||||
echo "No PMU, skip"
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -6,7 +6,5 @@ then
|
||||
printf "mounting filesystem : "
|
||||
mkdir -p /boot
|
||||
mount -t vfat /dev/mmcblk0p1 /boot
|
||||
mount -t configfs configfs /sys/kernel/config
|
||||
mount -t debugfs debugfs /sys/kernel/debug
|
||||
echo "OK"
|
||||
fi
|
||||
|
||||
@@ -8,11 +8,23 @@ then
|
||||
then
|
||||
cp -vf /boot/sshd_config /etc/ssh/sshd_config
|
||||
fi
|
||||
if [ -e /boot/resolv.conf ]
|
||||
then
|
||||
rm -rf /etc/resolv.conf
|
||||
cp -vf /boot/resolv.conf /etc/resolv.conf
|
||||
fi
|
||||
if [ -e /boot/input-event-daemon ]
|
||||
then
|
||||
chmod 0644 /etc/input-event-daemon.conf
|
||||
if [ ! -e /etc/input-event-daemon.conf ]
|
||||
then
|
||||
cp /etc/input-event-daemon.conf.bak /etc/input-event-daemon.conf
|
||||
fi
|
||||
else
|
||||
chmod 0000 /etc/input-event-daemon.conf
|
||||
if [ -e /etc/input-event-daemon.conf ]
|
||||
then
|
||||
cp /etc/input-event-daemon.conf /etc/input-event-daemon.conf.bak
|
||||
rm /etc/input-event-daemon.conf
|
||||
fi
|
||||
fi
|
||||
if [ -e /boot/rc.local ]
|
||||
then
|
||||
@@ -24,7 +36,7 @@ then
|
||||
fi
|
||||
if [ -e /boot/console_handler.sh ]
|
||||
then
|
||||
cp /boot/ttyGS0_handler.sh /etc/ttyGS0_handler.sh
|
||||
cp /boot/console_handler.sh /etc/console_handler.sh
|
||||
fi
|
||||
if [ -e /boot/alpha ]
|
||||
then
|
||||
@@ -32,6 +44,10 @@ then
|
||||
then
|
||||
cp /mnt/data/sensor_cfg.ini.alpha /mnt/data/sensor_cfg.ini
|
||||
fi
|
||||
if [ $(cat /mnt/data/sensor_cfg.ini | wc -l) -eq 0 ]
|
||||
then
|
||||
cp /mnt/data/sensor_cfg.ini.beta /mnt/data/sensor_cfg.ini
|
||||
fi
|
||||
# MIPI RX 4N PINMUX MCLK0
|
||||
devmem 0x0300116C 32 0x5
|
||||
# MIPI RX 0N PINMUX MIPIP RX 0N
|
||||
@@ -42,11 +58,19 @@ then
|
||||
then
|
||||
cp /mnt/data/sensor_cfg.ini.beta /mnt/data/sensor_cfg.ini
|
||||
fi
|
||||
if [ $(cat /mnt/data/sensor_cfg.ini | wc -l) -eq 0 ]
|
||||
then
|
||||
cp /mnt/data/sensor_cfg.ini.beta /mnt/data/sensor_cfg.ini
|
||||
fi
|
||||
# MIPI RX 4N PINMUX MIPI RX 4N
|
||||
devmem 0x0300116C 32 0x3
|
||||
# MIPI RX 0N PINMUX MCLK1
|
||||
devmem 0x0300118C 32 0x5
|
||||
echo -n " beta "
|
||||
fi
|
||||
if [ -e /boot/kvmtest ]
|
||||
then
|
||||
cp /mnt/data/sensor_cfg.ini.LT /mnt/data/sensor_cfg.ini
|
||||
fi
|
||||
echo "OK"
|
||||
fi
|
||||
|
||||
13
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S02devicekey
Executable file
13
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S02devicekey
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
str_value=$(cat /sys/class/cvi-base/base_uid | awk '{print $2}')
|
||||
first_uint=$(echo $str_value | cut -d'_' -f1)
|
||||
second_uint=$(echo $str_value | cut -d'_' -f2)
|
||||
result="$first_uint$second_uint"
|
||||
echo $result > /device_key
|
||||
# for compatibility with previous network mac addr
|
||||
cat /sys/class/cvi-base/base_uid > /device_key_legacy
|
||||
fi
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
. /etc/profile
|
||||
if [ -e /boot/usb.host ]
|
||||
then
|
||||
echo "usb mode: host"
|
||||
echo host > /proc/cviusb/otg_role
|
||||
elif [ -e /boot/usb.dev ]
|
||||
then
|
||||
echo "usb mode: device"
|
||||
cd /sys/kernel/config/usb_gadget
|
||||
mkdir g0
|
||||
cd g0
|
||||
if [ -e /boot/usb.idVendor ]
|
||||
then
|
||||
cat /boot/usb.idVendor > idVendor
|
||||
else
|
||||
echo 0x3346 > idVendor
|
||||
fi
|
||||
if [ -e /boot/usb.idProduct ]
|
||||
then
|
||||
cat /boot/usb.idProduct > idProduct
|
||||
else
|
||||
echo 0x1009 > idProduct
|
||||
fi
|
||||
mkdir strings/0x409
|
||||
if [ -e /boot/usb.serialnumber ]
|
||||
then
|
||||
cat /boot/usb.serialnumber > strings/0x409/serialnumber
|
||||
else
|
||||
echo '0123456789ABCDEF' > strings/0x409/serialnumber
|
||||
fi
|
||||
if [ -e /boot/usb.manufacturer ]
|
||||
then
|
||||
cat /boot/usb.manufacturer > strings/0x409/manufacturer
|
||||
else
|
||||
echo 'sipeed' > strings/0x409/manufacturer
|
||||
fi
|
||||
if [ -e /boot/usb.product ]
|
||||
then
|
||||
cat /boot/usb.product > strings/0x409/product
|
||||
else
|
||||
echo 'licheervnano' > strings/0x409/product
|
||||
fi
|
||||
mkdir configs/c.1
|
||||
if [ -e /boot/usb.GS0 ]
|
||||
then
|
||||
mkdir functions/acm.GS0
|
||||
ln -s functions/acm.GS0 configs/c.1/
|
||||
fi
|
||||
if [ -e /boot/usb.rndis0 ]
|
||||
then
|
||||
mkdir functions/rndis.usb0
|
||||
ln -s functions/rndis.usb0 configs/c.1/
|
||||
fi
|
||||
if [ -e /boot/usb.disk0 ]
|
||||
then
|
||||
mkdir functions/mass_storage.disk0
|
||||
ln -s functions/mass_storage.disk0 configs/c.1/
|
||||
echo 1 > functions/mass_storage.disk0/lun.0/removable
|
||||
if [ -e /boot/usb.disk0.ro ]
|
||||
then
|
||||
echo 1 > functions/mass_storage.disk0/lun.0/ro
|
||||
echo 1 > functions/mass_storage.disk0/lun.0/cdrom
|
||||
fi
|
||||
disk=$(cat /boot/usb.disk0)
|
||||
if [ -z "${disk}" ]
|
||||
then
|
||||
if [ ! -e /mnt/usbdisk.img ]
|
||||
then
|
||||
dd if=/dev/zero of=/mnt/usbdisk.img bs=1M count=16
|
||||
mkfs.vfat /mnt/usbdisk.img
|
||||
fi
|
||||
echo /mnt/usbdisk.img > functions/mass_storage.disk0/lun.0/file
|
||||
else
|
||||
cat /boot/usb.disk0 > functions/mass_storage.disk0/lun.0/file
|
||||
fi
|
||||
fi
|
||||
ls /sys/class/udc/ | cat > UDC
|
||||
echo device > /proc/cviusb/otg_role
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$1" = "stop" ]
|
||||
then
|
||||
echo '' > /sys/kernel/config/usb_gadget/g0/UDC
|
||||
echo host > /proc/cviusb/otg_role
|
||||
fi
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
. /etc/profile
|
||||
# . /etc/profile
|
||||
if [ ! -e /boot/alpha ]
|
||||
then
|
||||
devmem 0x030010AC 32 0x04 # PINMUX PWM10
|
||||
blpwm="/sys/class/pwm/pwmchip8/pwm2/"
|
||||
if [ ! -e "${blpwm}" ]
|
||||
then
|
||||
@@ -12,17 +13,19 @@ then
|
||||
fi
|
||||
echo 0 > $blpwm/enable
|
||||
echo "10000" > ${blpwm}/period # 100KHZ
|
||||
if [ -e /boot/uEnv.txt ]
|
||||
panel_value=""
|
||||
if [ -e /boot/board ]
|
||||
then
|
||||
hd22800=$(cat /boot/uEnv.txt | grep hd228001c31 | wc -l)
|
||||
if [ "${hd22800}" -ne 0 ]
|
||||
then
|
||||
echo "5000" > ${blpwm}/duty_cycle # 50%
|
||||
else
|
||||
echo "9500" > ${blpwm}/duty_cycle
|
||||
fi
|
||||
panel_value=$(grep '^panel=' /boot/board | cut -d '=' -f 2)
|
||||
elif [ -e /boot/uEnv.txt ]
|
||||
then
|
||||
panel_value=$(grep '^panel=' /boot/uEnv.txt | cut -d '=' -f 2)
|
||||
fi
|
||||
if [ "$panel_value" = "st7701_hd228001c31" ] || [ "$panel_value" = "st7701_lct024bsi20" ]
|
||||
then
|
||||
echo "2000" > ${blpwm}/duty_cycle # 20%
|
||||
else
|
||||
echo "9500" > ${blpwm}/duty_cycle
|
||||
echo "5000" > ${blpwm}/duty_cycle
|
||||
fi
|
||||
echo 1 > $blpwm/enable
|
||||
fi
|
||||
|
||||
@@ -3,7 +3,24 @@
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
. /etc/profile
|
||||
if [ -e /boot/gt9xx ]
|
||||
panel_value=""
|
||||
if [ -e /boot/board ]
|
||||
then
|
||||
panel_value=$(grep '^panel=' /boot/board | cut -d '=' -f 2)
|
||||
elif [ -e /boot/uEnv.txt ]
|
||||
then
|
||||
panel_value=$(grep '^panel=' /boot/uEnv.txt | cut -d '=' -f 2)
|
||||
fi
|
||||
if [ "$panel_value" = "st7701_lct024bsi20" ] # MaixCAM-Pro
|
||||
then
|
||||
echo "load cst7xx touchscreen driver"
|
||||
insmod /mnt/system/ko/hynitron_touch_new.ko
|
||||
elif [ "$panel_value" = "st7701_hd228001c31" ] # MaixCAM
|
||||
then
|
||||
echo "load cst3xx touchscreen driver"
|
||||
insmod /mnt/system/ko/hynitron_touch.ko
|
||||
fi
|
||||
elif [ "$panel_value" = "mtd700920b" ] # 7-inch touchscreen
|
||||
then
|
||||
echo "load gt9xx touchscreen driver"
|
||||
insmod /mnt/system/ko/3rd/gt9xx.ko
|
||||
|
||||
10
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S07fs2
Executable file
10
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S07fs2
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
. /etc/profile
|
||||
printf "mounting filesystem : "
|
||||
mount -t configfs configfs /sys/kernel/config
|
||||
mount -t debugfs debugfs /sys/kernel/debug
|
||||
echo "OK"
|
||||
fi
|
||||
14
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S07kmod2
Executable file
14
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S07kmod2
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
. /etc/profile
|
||||
printf "load kernel module: "
|
||||
cd /mnt/system/ko/
|
||||
insmod soph_wdt.ko
|
||||
insmod soph_clock_cooling.ko
|
||||
insmod soph_rtc.ko
|
||||
insmod soph_mon.ko
|
||||
echo "OK"
|
||||
exit 0
|
||||
fi
|
||||
244
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S08usbdev
Executable file
244
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S08usbdev
Executable file
@@ -0,0 +1,244 @@
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
. /etc/profile
|
||||
if [ -e /boot/usb.host ]
|
||||
then
|
||||
echo "usb mode: host"
|
||||
echo host > /proc/cviusb/otg_role
|
||||
elif [ -e /boot/usb.dev ]
|
||||
then
|
||||
echo "usb mode: device"
|
||||
cd /sys/kernel/config/usb_gadget
|
||||
mkdir -p g0
|
||||
cd g0
|
||||
if [ -e /boot/usb.idVendor ]
|
||||
then
|
||||
cat /boot/usb.idVendor > idVendor
|
||||
else
|
||||
echo 0x359F > idVendor
|
||||
fi
|
||||
if [ -e /boot/usb.idProduct ]
|
||||
then
|
||||
cat /boot/usb.idProduct > idProduct
|
||||
else
|
||||
echo 0x2120 > idProduct
|
||||
fi
|
||||
if [ -e /boot/usb.bcdDevice ]
|
||||
then
|
||||
cat /boot/usb.bcdDevice > bcdDevice
|
||||
else
|
||||
echo 0x0300 > bcdDevice
|
||||
fi
|
||||
if [ -e /boot/usb.bcdUSB ]
|
||||
then
|
||||
cat /boot/usb.bcdUSB > bcdUSB
|
||||
else
|
||||
echo 0x0200 > bcdUSB
|
||||
fi
|
||||
if [ -e /boot/usb.bDeviceClass ]
|
||||
then
|
||||
cat /boot/usb.bDeviceClass > bDeviceClass
|
||||
else
|
||||
echo 0xef > bDeviceClass
|
||||
fi
|
||||
if [ -e /boot/usb.bDeviceSubClass ]
|
||||
then
|
||||
cat /boot/usb.bDeviceSubClass > bDeviceSubClass
|
||||
else
|
||||
echo 0x02 > bDeviceSubClass
|
||||
fi
|
||||
if [ -e /boot/usb.bDeviceProtocol ]
|
||||
then
|
||||
cat /boot/usb.bDeviceProtocol > bDeviceProtocol
|
||||
else
|
||||
echo 0x01 > bDeviceProtocol
|
||||
fi
|
||||
mkdir -p strings/0x409
|
||||
if [ -e /boot/usb.serialnumber ]
|
||||
then
|
||||
cat /boot/usb.serialnumber > strings/0x409/serialnumber
|
||||
else
|
||||
cat /device_key > strings/0x409/serialnumber
|
||||
fi
|
||||
if [ -e /boot/usb.manufacturer ]
|
||||
then
|
||||
cat /boot/usb.manufacturer > strings/0x409/manufacturer
|
||||
else
|
||||
echo 'sipeed' > strings/0x409/manufacturer
|
||||
fi
|
||||
if [ -e /boot/usb.product ]
|
||||
then
|
||||
cat /boot/usb.product > strings/0x409/product
|
||||
else
|
||||
echo 'licheervnano' > strings/0x409/product
|
||||
fi
|
||||
mkdir -p configs/c.1
|
||||
# uvc
|
||||
if [ -e /boot/usb.uvc ]
|
||||
then
|
||||
/etc/init.d/uvc_tool.sh mount /boot/usb.uvc
|
||||
/etc/init.d/uvc_tool.sh server
|
||||
fi
|
||||
|
||||
if [ -e /boot/usb.GS0 ]
|
||||
then
|
||||
mkdir -p functions/acm.GS0
|
||||
rm -rf configs/c.1/acm.GS0
|
||||
ln -s functions/acm.GS0 configs/c.1/
|
||||
fi
|
||||
|
||||
if [ -e /boot/usb.disk0 ]
|
||||
then
|
||||
mkdir -p functions/mass_storage.disk0
|
||||
rm -rf configs/c.1/mass_storage.disk0
|
||||
ln -s functions/mass_storage.disk0 configs/c.1/
|
||||
echo 1 > functions/mass_storage.disk0/lun.0/removable
|
||||
if [ -e /boot/usb.disk0.ro ]
|
||||
then
|
||||
echo 1 > functions/mass_storage.disk0/lun.0/ro
|
||||
echo 1 > functions/mass_storage.disk0/lun.0/cdrom
|
||||
fi
|
||||
disk=$(cat /boot/usb.disk0)
|
||||
if [ -z "${disk}" ]
|
||||
then
|
||||
if [ ! -e /mnt/usbdisk.img ]
|
||||
then
|
||||
dd if=/dev/zero of=/mnt/usbdisk.img bs=1M count=16
|
||||
mkfs.vfat /mnt/usbdisk.img
|
||||
fi
|
||||
echo /mnt/usbdisk.img > functions/mass_storage.disk0/lun.0/file
|
||||
else
|
||||
cat /boot/usb.disk0 > functions/mass_storage.disk0/lun.0/file
|
||||
fi
|
||||
fi
|
||||
|
||||
# rndis
|
||||
if [ -e /boot/usb.rndis ]
|
||||
then
|
||||
mkdir -p functions/rndis.usb0
|
||||
ln -s functions/rndis.usb0 configs/c.1/
|
||||
echo e0 > functions/rndis.usb0/class
|
||||
echo 01 > functions/rndis.usb0/subclass
|
||||
echo 03 > functions/rndis.usb0/protocol
|
||||
fi
|
||||
|
||||
# ncm
|
||||
if [ -e /boot/usb.ncm ]
|
||||
then
|
||||
mkdir -p functions/ncm.usb0
|
||||
ln -s functions/ncm.usb0 configs/c.1/
|
||||
fi
|
||||
|
||||
# keyboard
|
||||
if [ -e /boot/usb.keyboard ]
|
||||
then
|
||||
mkdir functions/hid.GS0
|
||||
# echo 1 > functions/hid.GS0/subclass
|
||||
echo 1 > functions/hid.GS0/wakeup_on_write
|
||||
echo 1 > functions/hid.GS0/protocol
|
||||
echo 6 > functions/hid.GS0/report_length
|
||||
echo -ne \\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x25\\x65\\x05\\x07\\x19\\x00\\x29\\x65\\x81\\x00\\xc0 > functions/hid.GS0/report_desc
|
||||
ln -s functions/hid.GS0 configs/c.1
|
||||
fi
|
||||
|
||||
# mouse
|
||||
if [ -e /boot/usb.mouse ]
|
||||
then
|
||||
mkdir functions/hid.GS1
|
||||
# echo 1 > functions/hid.GS1/subclass
|
||||
echo 1 > functions/hid.GS1/wakeup_on_write
|
||||
echo 2 > functions/hid.GS1/protocol
|
||||
echo -ne \\x34 > functions/hid.GS1/report_length
|
||||
echo -ne \\x5\\x1\\x9\\x2\\xa1\\x1\\x9\\x1\\xa1\\x0\\x5\\x9\\x19\\x1\\x29\\x3\\x15\\x0\\x25\\x1\\x95\\x3\\x75\\x1\\x81\\x2\\x95\\x1\\x75\\x5\\x81\\x3\\x5\\x1\\x9\\x30\\x9\\x31\\x9\\x38\\x15\\x81\\x25\\x7f\\x75\\x8\\x95\\x3\\x81\\x6\\xc0\\xc0 > functions/hid.GS1/report_desc
|
||||
ln -s functions/hid.GS1 configs/c.1
|
||||
fi
|
||||
|
||||
# touchpad
|
||||
if [ -e /boot/usb.touchpad ]
|
||||
then
|
||||
mkdir functions/hid.GS2
|
||||
# echo 1 > functions/hid.GS2/subclass
|
||||
echo 1 > functions/hid.GS2/wakeup_on_write
|
||||
echo 2 > functions/hid.GS2/protocol
|
||||
echo 6 > functions/hid.GS2/report_length
|
||||
echo -ne \\x05\\x01\\x09\\x02\\xa1\\x01\\x09\\x01\\xa1\\x00\\x05\\x09\\x19\\x01\\x29\\x03\\x15\\x00\\x25\\x01\\x95\\x03\\x75\\x01\\x81\\x02\\x95\\x01\\x75\\x05\\x81\\x01\\x05\\x01\\x09\\x30\\x09\\x31\\x15\\x00\\x26\\xff\\x7f\\x35\\x00\\x46\\xff\\x7f\\x75\\x10\\x95\\x02\\x81\\x02\\x05\\x01\\x09\\x38\\x15\\x81\\x25\\x7f\\x35\\x00\\x45\\x00\\x75\\x08\\x95\\x01\\x81\\x06\\xc0\\xc0 > functions/hid.GS2/report_desc
|
||||
ln -s functions/hid.GS2 configs/c.1
|
||||
fi
|
||||
|
||||
# adbd
|
||||
if [ -e /boot/usb.adbd ]
|
||||
then
|
||||
echo 0x18d1 > idVendor # google
|
||||
mkdir -p configs/c.1/strings/0x409
|
||||
echo "" > configs/c.1/strings/0x409/configuration
|
||||
echo 0x80 > configs/c.1/bmAttributes
|
||||
mkdir functions/ffs.adb
|
||||
ln -s functions/ffs.adb configs/c.1/
|
||||
mkdir -p /dev/usb-ffs/adb
|
||||
mount -t functionfs adb /dev/usb-ffs/adb/
|
||||
/usr/bin/adbd &
|
||||
for i in $(seq 1 40); do
|
||||
if [ -e /dev/usb-ffs/adb/ep2 ]; then
|
||||
break
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
fi
|
||||
while true; do
|
||||
ls /sys/class/udc/ | cat > UDC || true
|
||||
res=$(cat UDC)
|
||||
if [[ "x$res" != "x" ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 0.4
|
||||
done
|
||||
echo device > /proc/cviusb/otg_role
|
||||
|
||||
if [ -e /boot/usb.adbd ]
|
||||
then
|
||||
if [ -z "$(ps aux | grep adbd_monitor | grep -v grep)" ]; then
|
||||
/etc/adbd_monitor.sh &
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$1" = "stop" ]
|
||||
then
|
||||
echo '' > /sys/kernel/config/usb_gadget/g0/UDC
|
||||
echo host > /proc/cviusb/otg_role
|
||||
# uvc
|
||||
if [ -e /sys/kernel/config/usb_gadget/g0/configs/c.1/uvc.usb0 ]
|
||||
then
|
||||
/etc/init.d/uvc_tool.sh unmount
|
||||
fi
|
||||
|
||||
# rndis
|
||||
if [ -e /sys/kernel/config/usb_gadget/g0/configs/c.1/rndis.usb0 ]
|
||||
then
|
||||
unlink /sys/kernel/config/usb_gadget/g0/configs/c.1/rndis.usb0
|
||||
rmdir /sys/kernel/config/usb_gadget/g0/functions/rndis.usb0
|
||||
fi
|
||||
|
||||
# ncm
|
||||
if [ -e /sys/kernel/config/usb_gadget/g0/configs/c.1/ncm.usb0 ]
|
||||
then
|
||||
unlink /sys/kernel/config/usb_gadget/g0/configs/c.1/ncm.usb0
|
||||
rmdir /sys/kernel/config/usb_gadget/g0/functions/ncm.usb0
|
||||
fi
|
||||
|
||||
# adbd
|
||||
if [ -e /sys/kernel/config/usb_gadget/g0/configs/c.1/ffs.adb ]
|
||||
then
|
||||
adbd_pid=$(ps aux | grep '/usr/bin/adbd' | grep -v grep | awk '{print $1}')
|
||||
kill -15 $adbd_pid
|
||||
umount /dev/usb-ffs/adb
|
||||
rm /dev/usb-ffs/adb -rf
|
||||
unlink /sys/kernel/config/usb_gadget/g0/configs/c.1/ffs.adb
|
||||
rmdir /sys/kernel/config/usb_gadget/g0/functions/ffs.adb
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -19,7 +19,7 @@ then
|
||||
prefix=$(cat /boot/hostname.prefix)
|
||||
fi
|
||||
old_hostname=$(cat /etc/hostname)
|
||||
new_hostname=${prefix}-$(sha512sum /sys/class/cvi-base/base_uid | head -c 4)
|
||||
new_hostname=${prefix}-$(sha512sum /device_key_legacy | head -c 4)
|
||||
|
||||
if [ -e /boot/hostname ]
|
||||
then
|
||||
@@ -38,25 +38,11 @@ then
|
||||
then
|
||||
new_ethmac=$(cat /boot/ethmac)
|
||||
else
|
||||
new_ethmac=$(hex2mac 48da356f$(sha512sum /sys/class/cvi-base/base_uid | head -c 4))
|
||||
new_ethmac=$(hex2mac 48da356f$(sha512sum /device_key_legacy | head -c 4))
|
||||
fi
|
||||
|
||||
ifconfig eth0 down
|
||||
ip link set eth0 address ${new_ethmac}
|
||||
ifconfig eth0 up
|
||||
echo "ethernet mac address: ${new_ethmac}"
|
||||
|
||||
if [ -e /boot/usb.rndis0 ]
|
||||
then
|
||||
if [ -e /boot/usb.rndis0.mac ]
|
||||
then
|
||||
new_rndismac=$(cat /boot/usb.rndis0.mac)
|
||||
else
|
||||
new_rndismac=$(hex2mac 48da356e$(sha512sum /sys/class/cvi-base/base_uid | head -c 4))
|
||||
fi
|
||||
ifconfig usb0 down
|
||||
ip link set usb0 address ${new_rndismac}
|
||||
ifconfig usb0 up
|
||||
echo "rndis mac address: ${new_rndismac}"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -8,6 +8,7 @@ then
|
||||
insmod cfg80211.ko
|
||||
insmod 3rd/aic8800_bsp.ko
|
||||
insmod 3rd/aic8800_fdrv.ko
|
||||
insmod 3rd/8733bs.ko
|
||||
echo "OK"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
176
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S30gadget_nic
Executable file
176
buildroot/board/cvitek/SG200X/overlay/etc/init.d/S30gadget_nic
Executable file
@@ -0,0 +1,176 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /etc/profile
|
||||
|
||||
gen_udhcpd_conf() {
|
||||
interface=${1}
|
||||
ipv4_prefix=${2}
|
||||
echo "start ${ipv4_prefix}.100"
|
||||
echo "end ${ipv4_prefix}.200"
|
||||
echo "interface ${interface}"
|
||||
echo "pidfile /var/run/udhcpd.${interface}.pid"
|
||||
echo "lease_file /var/lib/misc/udhcpd.${interface}.leases"
|
||||
echo "option subnet 255.255.255.0"
|
||||
echo "option lease 864000"
|
||||
}
|
||||
|
||||
hex2mac() {
|
||||
MAC=""
|
||||
seq 2 2 12 | while read i
|
||||
do
|
||||
echo -n ${1} | head -c $i | tail -c 2
|
||||
if [ $i != 12 ]
|
||||
then
|
||||
echo -n ':'
|
||||
fi
|
||||
done | tr '[:upper:]' '[:lower:]'
|
||||
}
|
||||
|
||||
start() {
|
||||
# S03usbdev start first
|
||||
if [ -e /boot/usb.dev ]
|
||||
then
|
||||
rndis_ifname=usb0
|
||||
# RNDIS
|
||||
if [ -e /boot/usb.rndis ]
|
||||
then
|
||||
# mac
|
||||
if [ -e /boot/usb.rndis.mac ]
|
||||
then
|
||||
new_rndismac=$(cat /boot/usb.rndis.mac)
|
||||
else
|
||||
new_rndismac=$(hex2mac 48da356f$(sha512sum /device_key_legacy | head -c 4))
|
||||
fi
|
||||
ip link set $rndis_ifname address ${new_rndismac}
|
||||
ifconfig $rndis_ifname up
|
||||
echo "rndis mac address: ${new_rndismac}"
|
||||
|
||||
# dhcp
|
||||
if [ ! -e /boot/rndis.nodhcpd ]
|
||||
then
|
||||
if [ -e /boot/rndis.ipv4_prefix ]
|
||||
then
|
||||
ipv4_prefix=`cat /boot/rndis.ipv4_prefix`
|
||||
else
|
||||
id2=$(printf "%d" 0x$(sha512sum /device_key_legacy | head -c 2))
|
||||
id3=$(printf "%d" 0x$(sha512sum /device_key_legacy | head -c 4 | tail -c 2))
|
||||
id3=$((id3 + 1))
|
||||
if [ "$id2" = "$id3" ]
|
||||
then
|
||||
id2=$((id2 + 2))
|
||||
fi
|
||||
if [ "$id2" -ge 255 ]
|
||||
then
|
||||
id2=252
|
||||
fi
|
||||
if [ "$id3" -ge 255 ]
|
||||
then
|
||||
id3=251
|
||||
fi
|
||||
ipv4_prefix=10.$id2.$id3
|
||||
fi
|
||||
gen_udhcpd_conf $rndis_ifname "${ipv4_prefix}" > /etc/udhcpd.${rndis_ifname}.conf
|
||||
ip addr add $ipv4_prefix.1/24 dev $rndis_ifname
|
||||
udhcpd -S /etc/udhcpd.${rndis_ifname}.conf
|
||||
fi
|
||||
echo "RNDIS DHCP OK"
|
||||
rndis_ifname=usb1
|
||||
fi
|
||||
|
||||
# CDC NCM
|
||||
if [ -e /boot/usb.ncm ]
|
||||
then
|
||||
# mac
|
||||
if [ -e /boot/usb.ncm.mac ]
|
||||
then
|
||||
new_mac=$(cat /boot/usb.ncm.mac)
|
||||
else
|
||||
new_mac=$(hex2mac 48da356e$(sha512sum /device_key_legacy | head -c 4))
|
||||
fi
|
||||
ip link set $rndis_ifname address ${new_mac}
|
||||
ifconfig $rndis_ifname up
|
||||
echo "ncm mac address: ${new_mac}"
|
||||
|
||||
# dhcp
|
||||
if [ ! -e /boot/ncm.nodhcpd ]
|
||||
then
|
||||
if [ -e /boot/ncm.ipv4_prefix ]
|
||||
then
|
||||
ipv4_prefix=`cat /boot/ncm.ipv4_prefix`
|
||||
else
|
||||
id2=$(printf "%d" 0x$(sha512sum /device_key_legacy | head -c 2))
|
||||
id3=$(printf "%d" 0x$(sha512sum /device_key_legacy | head -c 4 | tail -c 2))
|
||||
if [ "$id2" = "$id3" ]
|
||||
then
|
||||
id2=$((id2 + 1))
|
||||
fi
|
||||
if [ "$id2" -ge 255 ]
|
||||
then
|
||||
id2=253
|
||||
fi
|
||||
if [ "$id3" -ge 255 ]
|
||||
then
|
||||
id3=254
|
||||
fi
|
||||
ipv4_prefix=10.$id2.$id3
|
||||
fi
|
||||
gen_udhcpd_conf $rndis_ifname "${ipv4_prefix}" > /etc/udhcpd.${rndis_ifname}.conf
|
||||
ip addr add $ipv4_prefix.1/24 dev $rndis_ifname
|
||||
udhcpd -S /etc/udhcpd.${rndis_ifname}.conf
|
||||
fi
|
||||
echo "CDC NCM DHCP OK"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
stop() {
|
||||
# first card
|
||||
if [ -e /var/run/udhcpd.usb0.pid ]
|
||||
then
|
||||
kill $(cat "/var/run/udhcpd.usb0.pid")
|
||||
rm /var/run/udhcpd.usb0.pid || true
|
||||
fi
|
||||
pnum=$(ps -ef|grep udhcpd|grep -v grep| grep udhcpd.usb0.conf | awk '{print $1}' | wc -l)
|
||||
if [ x$pnum != x0 ]
|
||||
then
|
||||
ps -ef|grep udhcpd|grep -v grep| grep udhcpd.usb0.conf | awk '{print $1}'|xargs kill -2 || true
|
||||
fi
|
||||
usb0_info=$(ip link |grep usb0)
|
||||
if [ -n "$usb0_info" ]
|
||||
then
|
||||
ifconfig usb0 down
|
||||
fi
|
||||
|
||||
# second card
|
||||
if [ -e /var/run/udhcpd.usb1.pid ]
|
||||
then
|
||||
kill $(cat /var/run/udhcpd.usb1.pid)
|
||||
rm /var/run/udhcpd.usb1.pid || true
|
||||
fi
|
||||
pnum=$(ps -ef|grep udhcpd|grep -v grep| grep udhcpd.usb1.conf | awk '{print $1}' | wc -l)
|
||||
if [ x$pnum != x0 ]
|
||||
then
|
||||
ps -ef|grep udhcpd|grep -v grep| grep udhcpd.usb1.conf | awk '{print $1}'|xargs kill -2 || true
|
||||
fi
|
||||
usb0_info=$(ip link |grep usb1)
|
||||
if [ -n "$usb0_info" ]
|
||||
then
|
||||
ifconfig usb1 down
|
||||
fi
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
if [ "${1}" = "start" ]
|
||||
then
|
||||
start
|
||||
elif [ "${1}" = "stop" ]
|
||||
then
|
||||
stop
|
||||
elif [ "${1}" = "restart" ]
|
||||
then
|
||||
restart
|
||||
fi
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /etc/profile
|
||||
|
||||
gen_udhcpd_conf() {
|
||||
interface=${1}
|
||||
ipv4_prefix=${2}
|
||||
echo "start ${ipv4_prefix}.100"
|
||||
echo "end ${ipv4_prefix}.200"
|
||||
echo "interface ${interface}"
|
||||
echo "pidfile /var/run/udhcpd.${interface}.pid"
|
||||
echo "lease_file /var/lib/misc/udhcpd.${interface}.leases"
|
||||
echo "option subnet 255.255.255.0"
|
||||
echo "option lease 864000"
|
||||
}
|
||||
|
||||
start() {
|
||||
if [ -e /boot/usb.rndis0 ]
|
||||
then
|
||||
printf "start usb rndis: "
|
||||
if [ ! -e /boot/rndis.nodhcpd ]
|
||||
then
|
||||
if [ -e /boot/rndis.ipv4_prefix ]
|
||||
then
|
||||
ipv4_prefix=`cat /boot/rndis.ipv4_prefix`
|
||||
else
|
||||
id2=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 2))
|
||||
id3=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 4 | tail -c 2))
|
||||
if [ "$id2" = "$id3" ]
|
||||
then
|
||||
id2=$((id2 + 1))
|
||||
fi
|
||||
if [ "$id2" -ge 255 ]
|
||||
then
|
||||
id2=253
|
||||
fi
|
||||
if [ "$id3" -ge 255 ]
|
||||
then
|
||||
id3=254
|
||||
fi
|
||||
ipv4_prefix=10.$id2.$id3
|
||||
fi
|
||||
gen_udhcpd_conf usb0 "${ipv4_prefix}" > /etc/udhcpd.usb0.conf
|
||||
ip addr add $ipv4_prefix.1/24 dev usb0
|
||||
udhcpd -S /etc/udhcpd.usb0.conf
|
||||
fi
|
||||
echo "ok"
|
||||
fi
|
||||
}
|
||||
|
||||
stop() {
|
||||
kill `cat /var/run/udhcpd.usb0.pid`
|
||||
rm /var/run/udhcpd.usb0.pid
|
||||
}
|
||||
|
||||
restart() {
|
||||
start
|
||||
stop
|
||||
}
|
||||
|
||||
if [ "${1}" = "start" ]
|
||||
then
|
||||
start
|
||||
elif [ "${1}" = "stop" ]
|
||||
then
|
||||
stop
|
||||
elif [ "${1}" = "restart" ]
|
||||
then
|
||||
restart
|
||||
fi
|
||||
@@ -39,13 +39,13 @@ gen_udhcpd_conf() {
|
||||
start() {
|
||||
if [ -e /boot/wifi.sta ]
|
||||
then
|
||||
echo "wifi mode: sta"
|
||||
if [ -e /boot/wpa_supplicant.conf ]
|
||||
then
|
||||
cp /boot/wpa_supplicant.conf /etc/wpa_supplicant.conf
|
||||
else
|
||||
echo "wifi mode: sta"
|
||||
ssid="licheervnano"
|
||||
pass="licheervnano"
|
||||
ssid=""
|
||||
pass=""
|
||||
if [ -e /boot/wifi.ssid ]
|
||||
then
|
||||
echo -n "ssid: "
|
||||
@@ -58,8 +58,11 @@ start() {
|
||||
cat /boot/wifi.pass
|
||||
pass=`cat /boot/wifi.pass`
|
||||
fi
|
||||
echo "ctrl_interface=/var/run/wpa_supplicant" > /etc/wpa_supplicant.conf
|
||||
wpa_passphrase "$ssid" "$pass" >> /etc/wpa_supplicant.conf
|
||||
if [ ! -z "${ssid}${pass}" ]
|
||||
then
|
||||
echo "ctrl_interface=/var/run/wpa_supplicant" > /etc/wpa_supplicant.conf
|
||||
wpa_passphrase "$ssid" "$pass" >> /etc/wpa_supplicant.conf
|
||||
fi
|
||||
fi
|
||||
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
|
||||
if [ ! -e /boot/wifi.nodhcp ]
|
||||
@@ -68,13 +71,13 @@ start() {
|
||||
fi
|
||||
elif [ -e /boot/wifi.ap ]
|
||||
then
|
||||
echo "wifi mode: ap"
|
||||
if [ -e /boot/hostapd.conf ]
|
||||
then
|
||||
cp /boot/hostapd.conf /etc/hostapd.conf
|
||||
else
|
||||
echo "wifi mode: ap"
|
||||
id2=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 2))
|
||||
id3=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 4 | tail -c 2))
|
||||
id2=$(printf "%d" 0x$(sha512sum /device_key_legacy | head -c 2))
|
||||
id3=$(printf "%d" 0x$(sha512sum /device_key_legacy | head -c 4 | tail -c 2))
|
||||
if [ "$id2" = "$id3" ]
|
||||
then
|
||||
id2=$((id2 + 1))
|
||||
@@ -88,30 +91,40 @@ start() {
|
||||
id3=254
|
||||
fi
|
||||
ssid="licheervnano-${id2}${id3}"
|
||||
pass="licheervnano"
|
||||
if [ -e /boot/wifi.ssid ]
|
||||
then
|
||||
echo -n "ssid: "
|
||||
cat /boot/wifi.ssid
|
||||
ssid=`cat /boot/wifi.ssid`
|
||||
fi
|
||||
if [ -e /boot/wifi.pass ]
|
||||
then
|
||||
echo -n "wifi.pass: "
|
||||
cat /boot/wifi.pass
|
||||
pass=`cat /boot/wifi.pass`
|
||||
fi
|
||||
gen_hostapd_conf "$ssid" "$pass" > /etc/hostapd.conf
|
||||
if [ -e /boot/wifi.ipv4_prefix ]
|
||||
pass="licheervnano"
|
||||
if [ -e /boot/wifi.ssid ]
|
||||
then
|
||||
ipv4_prefix=`cat /boot/rndis.ipv4_prefix`
|
||||
else
|
||||
ipv4_prefix=10.$id3.$id2
|
||||
echo -n "ssid: "
|
||||
cat /boot/wifi.ssid
|
||||
ssid=`cat /boot/wifi.ssid`
|
||||
fi
|
||||
gen_udhcpd_conf wlan0 "${ipv4_prefix}" > /etc/udhcpd.wlan0.conf
|
||||
ifconfig wlan0 up
|
||||
ip addr add $ipv4_prefix.1/24 dev wlan0
|
||||
if [ -e /boot/wifi.pass ]
|
||||
then
|
||||
echo -n "wifi.pass: "
|
||||
cat /boot/wifi.pass
|
||||
pass=`cat /boot/wifi.pass`
|
||||
fi
|
||||
gen_hostapd_conf "$ssid" "$pass" > /etc/hostapd.conf
|
||||
fi
|
||||
if [ -e /boot/wifi.ipv4_prefix ]
|
||||
then
|
||||
ipv4_prefix=`cat /boot/wifi.ipv4_prefix`
|
||||
else
|
||||
ipv4_prefix=10.$id3.$id2
|
||||
fi
|
||||
if [ ! -e /etc/udhcpd.wlan0.conf ]
|
||||
then
|
||||
gen_udhcpd_conf wlan0 "${ipv4_prefix}" > /etc/udhcpd.wlan0.conf
|
||||
fi
|
||||
ifconfig wlan0 up
|
||||
ip route del default || true
|
||||
# routes=$(ip route show | grep 'dev wlan0' | awk '{print $1}')
|
||||
# for route in $routes; do
|
||||
# ip route del $route dev wlan0
|
||||
# echo "Deleted route $route dev wlan0"
|
||||
# done
|
||||
ip add flush dev wlan0
|
||||
ip addr add $ipv4_prefix.1/24 dev wlan0
|
||||
hostapd -B -i wlan0 /etc/hostapd.conf
|
||||
udhcpd -S /etc/udhcpd.wlan0.conf
|
||||
elif [ -e /boot/wifi.mon ]
|
||||
@@ -122,17 +135,25 @@ start() {
|
||||
}
|
||||
|
||||
stop() {
|
||||
killall wpa_supplicant
|
||||
kill `cat /run/udhcpc.wlan0.pid`
|
||||
rm /run/udhcpc.wlan0.pid
|
||||
kill `cat /var/run/udhcpd.wlan0.pid`
|
||||
rm /var/run/udhcpd.wlan0.pid
|
||||
airmon-ng stop wlan0mon
|
||||
ps -ef|grep hostapd|grep -v grep|awk '{print $1}'|xargs kill -2 || true
|
||||
ps -ef|grep "udhcpd -S /etc/udhcpd.wlan0.conf" |grep -v grep|awk '{print $1}'|xargs kill -2 || true
|
||||
killall wpa_supplicant || true
|
||||
if [ -e /run/udhcpc.wlan0.pid ]
|
||||
then
|
||||
kill `cat /run/udhcpc.wlan0.pid` || true
|
||||
rm -f /run/udhcpc.wlan0.pid
|
||||
fi
|
||||
if [ -e /var/run/udhcpd.wlan0.pid ]
|
||||
then
|
||||
kill `cat /var/run/udhcpd.wlan0.pid` || true
|
||||
rm -f /var/run/udhcpd.wlan0.pid
|
||||
fi
|
||||
airmon-ng stop wlan0mon || true
|
||||
}
|
||||
|
||||
restart() {
|
||||
start
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
if [ "${1}" = "start" ]
|
||||
|
||||
@@ -10,5 +10,5 @@ then
|
||||
100%
|
||||
" | parted ---pretend-input-tty /dev/mmcblk0 "resizepart 2 100%"
|
||||
# resize data filesystem
|
||||
(resize2fs /dev/mmcblk0p2 &> /dev/console) &
|
||||
(resize2fs /dev/mmcblk0p2) &
|
||||
fi
|
||||
|
||||
@@ -27,8 +27,8 @@ case "$1" in
|
||||
fi
|
||||
echo "soc temp: $soc_temp" | fbbar 32 $colorfg $colorbg
|
||||
colorfg=0xFFFFFFFF
|
||||
echo "soc id: $(cat /sys/class/cvi-base/base_uid)" | fbbar 48 $colorfg $colorbg
|
||||
sleep 1
|
||||
echo "soc id: $(cat /device_key_legacy)" | fbbar 48 $colorfg $colorbg
|
||||
sleep 1
|
||||
done
|
||||
) &
|
||||
[ $? = 0 ] && echo "OK" || echo "FAIL"
|
||||
|
||||
BIN
buildroot/board/cvitek/SG200X/overlay/etc/init.d/uvc-gadget-server.elf
Executable file
BIN
buildroot/board/cvitek/SG200X/overlay/etc/init.d/uvc-gadget-server.elf
Executable file
Binary file not shown.
Binary file not shown.
274
buildroot/board/cvitek/SG200X/overlay/etc/init.d/uvc_tool.sh
Executable file
274
buildroot/board/cvitek/SG200X/overlay/etc/init.d/uvc_tool.sh
Executable file
@@ -0,0 +1,274 @@
|
||||
#! /bin/sh
|
||||
|
||||
# 支持的格式,可以通过修改这个变量自定义支持的格式
|
||||
# Supported formats, you can customize the list by modifying this variable
|
||||
supported_formats="yuyv mjpg"
|
||||
|
||||
# 支持的分辨率,可以通过修改这个变量自定义支持的分辨率
|
||||
# Supported resolutions, you can customize the list by modifying this variable
|
||||
supported_resolutions="480x320 640x360 640x480 1280x720 1920x1080 2560x1440"
|
||||
|
||||
|
||||
parse_uvc_config() {
|
||||
input_file="$1" # 传入的文件路径 / Path to the input file
|
||||
parsed_data="" # 初始化 parsed_data 为空 / Initialize parsed_data as empty
|
||||
|
||||
# 检查文件是否存在并可读取 / Check if the file exists and is readable
|
||||
if [ -z "$input_file" ]; then
|
||||
# 没有提供文件路径 / No input file provided
|
||||
echo "Warn: No input file provided for config." 1>&2 # 输出到标准错误 / Output to stderr
|
||||
elif [ ! -f "$input_file" ]; then
|
||||
# 文件不存在 / File does not exist
|
||||
echo "Warn: File '$input_file' does not exist." 1>&2 # 输出到标准错误 / Output to stderr
|
||||
elif [ ! -r "$input_file" ]; then
|
||||
# 文件不可读取 / File is not readable
|
||||
echo "Warn: File '$input_file' is not readable." 1>&2 # 输出到标准错误 / Output to stderr
|
||||
else
|
||||
# 使用 awk 处理文件内容 / Using awk to process the file content
|
||||
parsed_data=$(awk -v resolutions="$supported_resolutions" -v formats="$supported_formats" '
|
||||
BEGIN {
|
||||
OFS = " ";
|
||||
split(resolutions, supported_res, " "); # 将支持的分辨率放入数组 / Split the supported resolutions into an array
|
||||
split(formats, supported_fmt, " "); # 将支持的格式放入数组 / Split the supported formats into an array
|
||||
}
|
||||
/^[^#]/ { # 只处理非 # 开头的行 / Process lines that do not start with #
|
||||
fmt = $1;
|
||||
res = $2;
|
||||
|
||||
# 检查格式是否在支持的格式列表中 / Check if the format is in the supported formats list
|
||||
is_supported_fmt = 0;
|
||||
for (i in supported_fmt) {
|
||||
if (fmt == supported_fmt[i]) {
|
||||
is_supported_fmt = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!is_supported_fmt) {
|
||||
print "Unsupported format:", fmt > "/dev/stderr"; # 输出不支持的格式到标准错误 / Output unsupported format to stderr
|
||||
next;
|
||||
}
|
||||
|
||||
if (res ~ /^[0-9]+x[0-9]+$/) { # 匹配 640x360/1280x720 这种格式 / Match the format like 640x360 or 1280x720
|
||||
is_supported_res = 0;
|
||||
for (i in supported_res) {
|
||||
if (res == supported_res[i]) {
|
||||
is_supported_res = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!is_supported_res) {
|
||||
print "Unsupported resolution:", res > "/dev/stderr"; # 输出不支持的分辨率到标准错误 / Output unsupported resolution to stderr
|
||||
next;
|
||||
}
|
||||
split(res, dims, "x"); # 将 1280x720 按 "x" 分割成宽高 / Split 1280x720 into width and height
|
||||
w = dims[1];
|
||||
h = dims[2];
|
||||
} else {
|
||||
print "Invalid resolution format:", res > "/dev/stderr"; # 输出无效的分辨率格式到标准错误 / Output invalid resolution format to stderr
|
||||
next;
|
||||
}
|
||||
print fmt, w, h; # 输出格式 fmt, w, h / Output fmt, w, h
|
||||
}
|
||||
' "$input_file")
|
||||
fi
|
||||
|
||||
# 确保至少包含 'mjpg' 和 'yuyv' 格式 / Ensure at least one 'mjpg' and 'yuyv' format exists
|
||||
has_mjpg=$(echo "$parsed_data" | grep -w "mjpg")
|
||||
has_yuyv=$(echo "$parsed_data" | grep -w "yuyv")
|
||||
|
||||
if [ -z "$has_mjpg" ]; then
|
||||
default_mjpg=$'\nmjpg 480x320\nmjpg 640x360\nmjpg 640x480\nmjpg 1280x720\nmjpg 1920x1080\nmjpg 2560x1440\n'
|
||||
echo "Warn: No 'mjpg' config found, adding default: $default_mjpg" 1>&2
|
||||
parsed_data="$parsed_data""$(echo "$default_mjpg" | sed 's/x/ /g')"
|
||||
fi
|
||||
|
||||
if [ -z "$has_yuyv" ]; then
|
||||
default_yuyv=$'\nyuyv 480x320\nyuyv 640x360\nyuyv 640x480\nyuyv 1280x720\nyuyv 1920x1080\nyuyv 2560x1440\n'
|
||||
echo "Warn: No 'yuyv' config found, adding default: $default_yuyv" 1>&2
|
||||
parsed_data="$parsed_data""$(echo "$default_yuyv" | sed 's/x/ /g')"
|
||||
fi
|
||||
|
||||
parsed_data=$(echo "$parsed_data" | sed '/^$/d') # 删除空行
|
||||
|
||||
echo "$parsed_data" # 返回解析的数据 / Return the parsed data
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
##########################################################################
|
||||
# UVC
|
||||
|
||||
CONFIGFS_PATH="/sys/kernel/config/usb_gadget/g0"
|
||||
ORIGINAL_DIR=$(pwd) # 记录脚本启动时的目录 / Record the original working directory
|
||||
|
||||
create_frame() {
|
||||
# Example usage:
|
||||
# create_frame <width> <height> <format name>
|
||||
|
||||
WIDTH=$1
|
||||
HEIGHT=$2
|
||||
FORMAT=$3
|
||||
|
||||
if [ "$FORMAT" == "yuyv" ]; then
|
||||
wdir=streaming/uncompressed/u/${HEIGHT}p
|
||||
elif [ "$FORMAT" == "mjpg" ]; then
|
||||
wdir=streaming/mjpeg/m/${HEIGHT}p
|
||||
else
|
||||
echo "only support format yuyv/mjpeg!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p $wdir
|
||||
echo $WIDTH > $wdir/wWidth
|
||||
echo $HEIGHT > $wdir/wHeight
|
||||
echo $(( $WIDTH * $HEIGHT * 2 )) > $wdir/dwMaxVideoFrameBufferSize
|
||||
echo $(( $WIDTH * $HEIGHT * 2 * 8 * 5 )) > $wdir/dwMinBitRate
|
||||
echo $(( $WIDTH * $HEIGHT * 2 * 8 * 60 )) > $wdir/dwMaxBitRate
|
||||
|
||||
cat > $wdir/dwFrameInterval <<EOF
|
||||
166666
|
||||
333333
|
||||
400000
|
||||
500000
|
||||
666666
|
||||
1000000
|
||||
2000000
|
||||
EOF
|
||||
echo "333333" > $wdir/dwDefaultFrameInterval
|
||||
|
||||
<< EOF
|
||||
configure FrameRate
|
||||
dwFrameInterfal is in 100-ns units (fps = 1/(dwFrameInterval * 10000000))
|
||||
166666 -> 60 fps
|
||||
333333 -> 30 fps
|
||||
400000 -> 25 fps
|
||||
500000 -> 20 fps
|
||||
666666 -> 15 fps
|
||||
1000000 -> 10 fps
|
||||
2000000 -> 5 fps
|
||||
5000000 -> 2 fps
|
||||
10000000 -> 1 fps
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
# 挂载 UVC ConfigFS / Mount the UVC ConfigFS
|
||||
mount_uvc_configfs() {
|
||||
echo "Mounting UVC ConfigFS in $(pwd)"
|
||||
|
||||
# 创建 functions/uvc.usb0 目录 / Create the directory for uvc.usb0
|
||||
mkdir -p functions/uvc.usb0
|
||||
cd functions/uvc.usb0
|
||||
|
||||
# 在 functions/uvc.usb0 目录中创建控制头和符号链接 / Create control header and symlink it in uvc.usb0
|
||||
mkdir -p control/header/h
|
||||
ln -s control/header/h/ control/class/fs/
|
||||
ln -s control/header/h/ control/class/ss/
|
||||
|
||||
# streaming_maxpacket sets wMaxPacketSize. Valid values are 1024/2048/3072
|
||||
echo 1024 > streaming_maxpacket
|
||||
# streaming_interval sets bInterval. Values range from 1..255
|
||||
echo 1 > streaming_interval
|
||||
# streaming_maxburst sets bMaxBurst. Valid values are 1..15
|
||||
echo 1 > streaming_maxburst
|
||||
|
||||
# 在 functions/uvc.usb0 目录中创建流媒体路径 / Create streaming paths in uvc.usb0
|
||||
mkdir -p streaming/uncompressed/u # YUV 目录 / YUV directory
|
||||
mkdir -p streaming/mjpeg/m # MJPEG 目录 / MJPEG directory
|
||||
# 执行解析并直接传递给 while 循环进行处理 / Execute parsing and directly pass to while loop for processing
|
||||
parse_uvc_config "$1" | while read fmt w h; do
|
||||
echo "Adding: Format: $fmt, Width: $w, Height: $h" # 输出格式、宽和高 / Output fmt, width, and height
|
||||
create_frame $w $h $fmt
|
||||
done
|
||||
mkdir -p streaming/header/h
|
||||
# 将 YUV 和 MJPEG 目录链接到流媒体头中 / Link YUV and MJPEG to streaming header
|
||||
ln -s streaming/uncompressed/u/ streaming/header/h/
|
||||
ln -s streaming/mjpeg/m/ streaming/header/h/
|
||||
# 将 header 链接到 class 中 / Link header to classes
|
||||
ln -s streaming/header/h/ streaming/class/fs
|
||||
ln -s streaming/header/h/ streaming/class/hs
|
||||
ln -s streaming/header/h/ streaming/class/ss
|
||||
|
||||
cd ../..
|
||||
ln -s functions/uvc.usb0 configs/c.1
|
||||
|
||||
echo "UVC ConfigFS mounted successfully in $(pwd)"
|
||||
}
|
||||
|
||||
# 卸载 UVC ConfigFS / Unmount the UVC ConfigFS
|
||||
unmount_uvc_configfs() {
|
||||
echo "Unmounting UVC ConfigFS in $(pwd)"
|
||||
|
||||
unlink configs/c.1/uvc.usb0
|
||||
|
||||
cd functions/uvc.usb0
|
||||
|
||||
# 删除流媒体目录 / Remove streaming directories
|
||||
unlink streaming/class/fs/h
|
||||
unlink streaming/class/hs/h
|
||||
unlink streaming/class/ss/h
|
||||
|
||||
unlink streaming/header/h/u
|
||||
unlink streaming/header/h/m
|
||||
rmdir streaming/header/h
|
||||
|
||||
rmdir streaming/uncompressed/u/*p
|
||||
rmdir streaming/mjpeg/m/*p
|
||||
rmdir streaming/uncompressed/u
|
||||
rmdir streaming/mjpeg/m
|
||||
|
||||
unlink control/class/fs/h
|
||||
unlink control/class/ss/h
|
||||
rmdir control/header/h
|
||||
|
||||
cd ../..
|
||||
# 删除 functions/uvc.usb0 目录 / Remove the uvc.usb0 directory
|
||||
rmdir functions/uvc.usb0
|
||||
|
||||
echo UVC ConfigFS unmounted successfully in $(pwd)
|
||||
}
|
||||
|
||||
# 进入工作目录 / Enter the working directory
|
||||
cd "$CONFIGFS_PATH" || return 1
|
||||
|
||||
# 处理传入的参数
|
||||
# Process the input arguments
|
||||
case "$1" in
|
||||
"mount")
|
||||
mount_uvc_configfs "$2"
|
||||
;;
|
||||
"unmount")
|
||||
unmount_uvc_configfs
|
||||
;;
|
||||
"server")
|
||||
if [ -z "$(fuser /etc/init.d/uvc-gadget-server.elf)" ]; then
|
||||
(
|
||||
echo "Waiting for UDC start..."
|
||||
while [ -z "$(cat /sys/kernel/config/usb_gadget/g0/UDC)" ]; do
|
||||
echo -n "."
|
||||
sleep 1
|
||||
done
|
||||
sleep 3 # necessary delay time
|
||||
if [ -z "$(fuser /etc/init.d/uvc-gadget-server.elf)" ]; then
|
||||
echo -e "\nServer is starting..." # 输出选择了 server 模式 / Output that the server mode is selected
|
||||
echo -e "===============================\n\n\n"
|
||||
# 在这里添加你希望在 server 模式下执行的其他操作 / Add other operations you want to perform in server mode here
|
||||
/etc/init.d/uvc-gadget-server.elf -u /dev/$(basename /sys/class/udc/*/device/gadget/video4linux/video*) -d -i /bin/cat_224.jpg
|
||||
else
|
||||
echo -e "\nServer has started..."
|
||||
echo -e "===============================\n\n\n"
|
||||
fi
|
||||
) >/tmp/uvc-gadget.log 2>&1 &
|
||||
fi
|
||||
;;
|
||||
"stop_server")
|
||||
fuser -k /etc/init.d/uvc-gadget-server.elf
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {mount <file>|unmount|server|stop_server}" # 提示正确的使用方式 / Prompt the correct usage
|
||||
;;
|
||||
esac
|
||||
|
||||
# 返回原始目录 / Return to the original directory
|
||||
cd "$ORIGINAL_DIR" || return 1
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
echo "HELLO WORLD"
|
||||
|
||||
if [ -e /boot/maxicam ]
|
||||
if [ -e /boot/maixcam ]
|
||||
then
|
||||
/maixapp/apps/launcher/launcher &
|
||||
fi
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
127
buildroot/board/cvitek/SG200X/overlay/usr/share/udhcpc/default.script
Executable file
127
buildroot/board/cvitek/SG200X/overlay/usr/share/udhcpc/default.script
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/bin/sh
|
||||
|
||||
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
|
||||
|
||||
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
|
||||
|
||||
ACTION="$1"
|
||||
|
||||
RESOLV_CONF="/etc/resolv.conf"
|
||||
if [ -e /boot/resolv.conf ]
|
||||
then
|
||||
RESOLV_CONF="/etc/resolv.conf.dhcp"
|
||||
fi
|
||||
[ -e $RESOLV_CONF ] || touch $RESOLV_CONF
|
||||
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
|
||||
[ -n "$subnet" ] && NETMASK="netmask $subnet"
|
||||
# Handle stateful DHCPv6 like DHCPv4
|
||||
[ -n "$ipv6" ] && ip="$ipv6/128"
|
||||
|
||||
if [ -z "${IF_WAIT_DELAY}" ]; then
|
||||
IF_WAIT_DELAY=10
|
||||
fi
|
||||
|
||||
wait_for_ipv6_default_route() {
|
||||
printf "Waiting for IPv6 default route to appear"
|
||||
while [ $IF_WAIT_DELAY -gt 0 ]; do
|
||||
if ip -6 route list | grep -q default; then
|
||||
printf "\n"
|
||||
return
|
||||
fi
|
||||
sleep 1
|
||||
printf "."
|
||||
: $((IF_WAIT_DELAY -= 1))
|
||||
done
|
||||
printf " timeout!\n"
|
||||
}
|
||||
|
||||
case "$ACTION" in
|
||||
deconfig)
|
||||
/sbin/ifconfig $interface up
|
||||
/sbin/ifconfig $interface 0.0.0.0
|
||||
|
||||
# drop info from this interface
|
||||
# resolv.conf may be a symlink to /tmp/, so take care
|
||||
TMPFILE=$(mktemp)
|
||||
grep -vE "# $interface\$" $RESOLV_CONF > $TMPFILE
|
||||
cat $TMPFILE > $RESOLV_CONF
|
||||
rm -f $TMPFILE
|
||||
|
||||
if [ -x /usr/sbin/avahi-autoipd ]; then
|
||||
/usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface
|
||||
fi
|
||||
;;
|
||||
|
||||
leasefail|nak)
|
||||
if [ -x /usr/sbin/avahi-autoipd ]; then
|
||||
/usr/sbin/avahi-autoipd -c $interface || /usr/sbin/avahi-autoipd -wD $interface --no-chroot
|
||||
fi
|
||||
;;
|
||||
|
||||
renew|bound)
|
||||
if [ -x /usr/sbin/avahi-autoipd ]; then
|
||||
/usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface
|
||||
fi
|
||||
/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
|
||||
if [ -n "$ipv6" ] ; then
|
||||
wait_for_ipv6_default_route
|
||||
fi
|
||||
|
||||
# RFC3442: If the DHCP server returns both a Classless
|
||||
# Static Routes option and a Router option, the DHCP
|
||||
# client MUST ignore the Router option.
|
||||
if [ -n "$staticroutes" ]; then
|
||||
echo "deleting routers"
|
||||
route -n | while read dest gw mask flags metric ref use iface; do
|
||||
[ "$iface" != "$interface" -o "$gw" = "0.0.0.0" ] || \
|
||||
route del -net "$dest" netmask "$mask" gw "$gw" dev "$interface"
|
||||
done
|
||||
|
||||
# format: dest1/mask gw1 ... destn/mask gwn
|
||||
set -- $staticroutes
|
||||
while [ -n "$1" -a -n "$2" ]; do
|
||||
route add -net "$1" gw "$2" dev "$interface"
|
||||
shift 2
|
||||
done
|
||||
elif [ -n "$router" ] ; then
|
||||
echo "deleting routers"
|
||||
while route del default gw 0.0.0.0 dev $interface 2> /dev/null; do
|
||||
:
|
||||
done
|
||||
|
||||
for i in $router ; do
|
||||
route add default gw $i dev $interface
|
||||
done
|
||||
fi
|
||||
|
||||
# drop info from this interface
|
||||
# resolv.conf may be a symlink to /tmp/, so take care
|
||||
TMPFILE=$(mktemp)
|
||||
grep -vE "# $interface\$" $RESOLV_CONF > $TMPFILE
|
||||
cat $TMPFILE > $RESOLV_CONF
|
||||
rm -f $TMPFILE
|
||||
|
||||
# prefer rfc3397 domain search list (option 119) if available
|
||||
if [ -n "$search" ]; then
|
||||
search_list=$search
|
||||
elif [ -n "$domain" ]; then
|
||||
search_list=$domain
|
||||
fi
|
||||
|
||||
[ -n "$search_list" ] &&
|
||||
echo "search $search_list # $interface" >> $RESOLV_CONF
|
||||
|
||||
for i in $dns ; do
|
||||
echo adding dns $i
|
||||
echo "nameserver $i # $interface" >> $RESOLV_CONF
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
HOOK_DIR="$0.d"
|
||||
for hook in "${HOOK_DIR}/"*; do
|
||||
[ -f "${hook}" -a -x "${hook}" ] || continue
|
||||
"${hook}" "$ACTION"
|
||||
done
|
||||
|
||||
exit 0
|
||||
@@ -60,6 +60,12 @@ BR2_PACKAGE_WIRELESS_TOOLS_LIB=y
|
||||
BR2_PACKAGE_AIRCRACK_NG=y
|
||||
BR2_PACKAGE_UTIL_LINUX_RFKILL=y
|
||||
BR2_PACKAGE_IPERF3=y
|
||||
BR2_PACKAGE_IPMITOOL=y
|
||||
BR2_PACKAGE_IPMITOOL_PEN_REG_URI=y
|
||||
BR2_PACKAGE_IPMITOOL_LANPLUS=y
|
||||
BR2_PACKAGE_IPMITOOL_USB=y
|
||||
BR2_PACKAGE_IPMITOOL_IPMIEVD=y
|
||||
BR2_PACKAGE_IPMITOOL_IPMISHELL=y
|
||||
BR2_PACKAGE_ETHTOOL=y
|
||||
BR2_PACKAGE_DNSMASQ=y
|
||||
BR2_PACKAGE_DNSMASQ_DHCP=y
|
||||
@@ -70,7 +76,9 @@ BR2_PACKAGE_WIRELESS_REGDB=y
|
||||
BR2_PACKAGE_MOSH=y
|
||||
BR2_PACKAGE_LRZSZ=y
|
||||
BR2_PACKAGE_IW=y
|
||||
# BR2_PACKAGE_WIREGUARD=y
|
||||
BR2_PACKAGE_WIREGUARD_TOOLS=y
|
||||
# BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y
|
||||
@@ -138,6 +146,7 @@ BR2_PACKAGE_CA_CERTIFICATES=y
|
||||
BR2_PACKAGE_EVTEST=y
|
||||
BR2_PACKAGE_FILE=y
|
||||
BR2_PACKAGE_EMPTY=y
|
||||
BR2_PACKAGE_EXFATPROGS=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
|
||||
BR2_PACKAGE_TMUX=y
|
||||
@@ -172,21 +181,26 @@ BR2_PACKAGE_TCPDUMP=y
|
||||
BR2_PACKAGE_SSDP_RESPONDER=y
|
||||
BR2_PACKAGE_PPPD=y
|
||||
BR2_PACKAGE_NFTABLES=y
|
||||
BR2_PACKAGE_BIND=y
|
||||
BR2_PACKAGE_SYSSTAT=y
|
||||
BR2_PACKAGE_TRACEROUTE=y
|
||||
BR2_PACKAGE_IPUTILS=y
|
||||
BR2_PACKAGE_IPROUTE2=y
|
||||
BR2_PACKAGE_IPTABLES=y
|
||||
BR2_PACKAGE_IPTABLES_NFTABLES=y
|
||||
BR2_PACKAGE_NCURSES_WCHAR=y
|
||||
BR2_PACKAGE_LIBEDIT=y
|
||||
BR2_PACKAGE_NGINX=y
|
||||
BR2_PACKAGE_NGINX_HTTP=y
|
||||
BR2_PACKAGE_NGINX_HTTP_DAV_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_MP4_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_FLV_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_GUNZIP_MODULE=y
|
||||
BR2_PACKAGE_NGINX_STREAM=y
|
||||
BR2_PACKAGE_NGINX_SELECT_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_FASTCGI_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_UWSGI_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_SCGI_MODULE=y
|
||||
# BR2_PACKAGE_NGINX=y
|
||||
# BR2_PACKAGE_NGINX_HTTP=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_DAV_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_MP4_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_FLV_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_GUNZIP_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_STREAM=y
|
||||
# BR2_PACKAGE_NGINX_SELECT_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_FASTCGI_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_UWSGI_MODULE=y
|
||||
# BR2_PACKAGE_NGINX_HTTP_SCGI_MODULE=y
|
||||
BR2_PACKAGE_RTC_TOOLS=y
|
||||
BR2_PACKAGE_PICOCOM=y
|
||||
BR2_PACKAGE_FBGRAB=y
|
||||
@@ -375,9 +389,15 @@ BR2_PACKAGE_PYTHON_INTELHEX=y
|
||||
BR2_PACKAGE_VIM=y
|
||||
BR2_PACKAGE_VIM_RUNTIME=y
|
||||
|
||||
BR2_PACKAGE_AXP2101=y
|
||||
|
||||
BR2_TARGET_ROOTFS_EXT2=y
|
||||
BR2_TARGET_ROOTFS_EXT2_4=y
|
||||
BR2_TARGET_ROOTFS_EXT2_SIZE="900M"
|
||||
BR2_TARGET_ROOTFS_EXT2_SIZE="1100M"
|
||||
|
||||
BR2_ROOTFS_OVERLAY="$(TOPDIR)/board/cvitek/SG200X/overlay"
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(TOPDIR)/board/cvitek/SG200X/busybox-extra.config"
|
||||
|
||||
BR2_TARGET_TZ_INFO=y
|
||||
BR2_TARGET_TZ_ZONELIST="default"
|
||||
BR2_TARGET_LOCALTIME="Etc/UTC"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1252,6 +1252,7 @@ menu "External python modules"
|
||||
source "package/python-pyphen/Config.in"
|
||||
source "package/python-pyqrcode/Config.in"
|
||||
source "package/python-pyqt5/Config.in"
|
||||
source "package/python-pyqt5-sip/Config.in"
|
||||
source "package/python-pyratemp/Config.in"
|
||||
source "package/python-pyroute2/Config.in"
|
||||
source "package/python-pyrsistent/Config.in"
|
||||
@@ -2680,6 +2681,7 @@ menu "System tools"
|
||||
source "package/atop/Config.in"
|
||||
source "package/attr/Config.in"
|
||||
source "package/audit/Config.in"
|
||||
source "package/axp2101/Config.in"
|
||||
source "package/balena-engine/Config.in"
|
||||
source "package/bubblewrap/Config.in"
|
||||
source "package/cgroupfs-mount/Config.in"
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
#
|
||||
################################################################################
|
||||
|
||||
AIC8800_SDIO_FIRMWARE_VERSION = e44a51d3c129bbd7413848a430b8206556e923a5
|
||||
AIC8800_SDIO_FIRMWARE_SITE = $(call github,0x754C,aic8800-sdio-firmware,$(AIC8800_SDIO_FIRMWARE_VERSION))
|
||||
AIC8800_SDIO_FIRMWARE_VERSION = c56f910044cc854d6c553bcb9a644f3bca5a4c38
|
||||
AIC8800_SDIO_FIRMWARE_SITE = $(call github,lxowalle,aic8800-sdio-firmware,$(AIC8800_SDIO_FIRMWARE_VERSION))
|
||||
|
||||
define AIC8800_SDIO_FIRMWARE_INSTALL_TARGET_CMDS
|
||||
mkdir -pv $(TARGET_DIR)/usr/lib/firmware/aic8800_sdio/
|
||||
|
||||
5
buildroot/package/axp2101/Config.in
Normal file
5
buildroot/package/axp2101/Config.in
Normal file
@@ -0,0 +1,5 @@
|
||||
config BR2_PACKAGE_AXP2101
|
||||
bool "axp2101"
|
||||
help
|
||||
If you say Y here you get support for the X-Powers AXP2101 power
|
||||
management ICs (PMICs) controlled with I2C.
|
||||
20
buildroot/package/axp2101/axp2101.mk
Normal file
20
buildroot/package/axp2101/axp2101.mk
Normal file
@@ -0,0 +1,20 @@
|
||||
################################################################################
|
||||
#
|
||||
# axp2101
|
||||
#
|
||||
################################################################################
|
||||
|
||||
AXP2101_VERSION = 1.1.0
|
||||
AXP2101_SITE = $(TOPDIR)/package/axp2101/src
|
||||
AXP2101_SITE_METHOD = local
|
||||
AXP2101_CFLAGS = -Iinclude -IXPowersLib -IXPowersLib/REG -Wall -Wextra
|
||||
|
||||
define AXP2101_BUILD_CMDS
|
||||
$(MAKE) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(AXP2101_CFLAGS)" -C $(@D)
|
||||
endef
|
||||
|
||||
define AXP2101_INSTALL_TARGET_CMDS
|
||||
$(INSTALL) -D -m 0755 $(@D)/axp2101 $(TARGET_DIR)/usr/bin/axp2101
|
||||
endef
|
||||
|
||||
$(eval $(generic-package))
|
||||
26
buildroot/package/axp2101/src/Makefile
Normal file
26
buildroot/package/axp2101/src/Makefile
Normal file
@@ -0,0 +1,26 @@
|
||||
APP_DIR = ./src
|
||||
SRC_DIR = ./XPowersLib
|
||||
DIR_BIN = ./bin
|
||||
|
||||
OBJ_C = $(wildcard ${SRC_DIR}/*.cpp ${APP_DIR}/*.cpp)
|
||||
OBJ_O = $(patsubst %.cpp,${DIR_BIN}/%.o,$(notdir ${OBJ_C}))
|
||||
|
||||
TARGET = axp2101
|
||||
|
||||
$(shell mkdir -p $(DIR_BIN))
|
||||
|
||||
MSG = -g -O0 -Wall
|
||||
CFLAGS += $(MSG)
|
||||
|
||||
${TARGET}:${OBJ_O}
|
||||
$(CXX) $(CFLAGS) $(OBJ_O) -o $@ $(LIB)
|
||||
|
||||
${DIR_BIN}/%.o:$(APP_DIR)/%.cpp
|
||||
$(CXX) $(CFLAGS) -c $< -o $@ -I $(SRC_DIR)
|
||||
|
||||
${DIR_BIN}/%.o:$(SRC_DIR)/%.cpp
|
||||
$(CXX) $(CFLAGS) -c $< -o $@ $(LIB)
|
||||
|
||||
clean :
|
||||
rm $(DIR_BIN)/*.*
|
||||
rm $(TARGET)
|
||||
@@ -0,0 +1,171 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2024 lewis he
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file PowerDeliveryHUSB238.tpp
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2024-07-24
|
||||
*
|
||||
*/
|
||||
#if defined(ARDUINO)
|
||||
#include <Arduino.h>
|
||||
#else
|
||||
#include <math.h>
|
||||
#endif /*ARDUINO*/
|
||||
#include "XPowersCommon.tpp"
|
||||
#include "REG/HUSB238Constants.h"
|
||||
|
||||
class PowerDeliveryHUSB238 :
|
||||
public XPowersCommon<PowerDeliveryHUSB238>
|
||||
{
|
||||
friend class XPowersCommon<PowerDeliveryHUSB238>;
|
||||
|
||||
public:
|
||||
|
||||
enum PD_Status {
|
||||
NO_RESPONSE,
|
||||
SUCCESS,
|
||||
INVALID_CMD,
|
||||
NOT_SUPPORT,
|
||||
TRANSACTION_FAIL
|
||||
};
|
||||
|
||||
enum PD_Voltage {
|
||||
PD_5V = 1,
|
||||
PD_9V,
|
||||
PD_12V,
|
||||
PD_15V,
|
||||
PD_18V,
|
||||
PD_20V
|
||||
};
|
||||
|
||||
|
||||
#if defined(ARDUINO)
|
||||
PowerDeliveryHUSB238(TwoWire &w, int sda = SDA, int scl = SCL, uint8_t addr = HUSB238_SLAVE_ADDRESS)
|
||||
{
|
||||
__wire = &w;
|
||||
__sda = sda;
|
||||
__scl = scl;
|
||||
__addr = addr;
|
||||
}
|
||||
#endif
|
||||
|
||||
PowerDeliveryHUSB238(uint8_t addr, iic_fptr_t readRegCallback, iic_fptr_t writeRegCallback)
|
||||
{
|
||||
thisReadRegCallback = readRegCallback;
|
||||
thisWriteRegCallback = writeRegCallback;
|
||||
__addr = addr;
|
||||
}
|
||||
|
||||
PowerDeliveryHUSB238()
|
||||
{
|
||||
#if defined(ARDUINO)
|
||||
__wire = &Wire;
|
||||
__sda = SDA;
|
||||
__scl = SCL;
|
||||
#endif
|
||||
__addr = HUSB238_SLAVE_ADDRESS;
|
||||
}
|
||||
|
||||
|
||||
~PowerDeliveryHUSB238()
|
||||
{
|
||||
log_i("~PowerDeliveryHUSB238");
|
||||
deinit();
|
||||
}
|
||||
|
||||
#if defined(ARDUINO)
|
||||
bool init(TwoWire &w, int sda = SDA, int scl = SCL, uint8_t addr = HUSB238_SLAVE_ADDRESS)
|
||||
{
|
||||
__wire = &w;
|
||||
__sda = sda;
|
||||
__scl = scl;
|
||||
__addr = addr;
|
||||
return begin();
|
||||
}
|
||||
#endif
|
||||
|
||||
void deinit()
|
||||
{
|
||||
end();
|
||||
}
|
||||
|
||||
uint8_t getPdVoltage()
|
||||
{
|
||||
int val = readRegister(HUSB238_PD_STATUS0);
|
||||
if (val == -1)return 0;
|
||||
val &= 0xF0;
|
||||
val >>= 4;
|
||||
return pd_voltage_list[val];
|
||||
}
|
||||
|
||||
float getPdCurrent()
|
||||
{
|
||||
int val = readRegister(HUSB238_PD_STATUS0);
|
||||
if (val == -1)return 0;
|
||||
val &= 0x0F;
|
||||
return pd_current_list[val];
|
||||
}
|
||||
|
||||
void setPdVoltage(PD_Voltage vol)
|
||||
{
|
||||
writeRegister(HUSB238_SRC_PDO, vol);
|
||||
writeRegister(HUSB238_GO_COMMAND, 0x01);
|
||||
}
|
||||
|
||||
void resetPdVoltage()
|
||||
{
|
||||
writeRegister(HUSB238_GO_COMMAND, 0x10);
|
||||
}
|
||||
|
||||
bool attach()
|
||||
{
|
||||
return getRegisterBit(HUSB238_PD_STATUS1, 6);
|
||||
}
|
||||
|
||||
PD_Status status()
|
||||
{
|
||||
int val = readRegister(HUSB238_PD_STATUS1);
|
||||
if (val == -1)return NO_RESPONSE;
|
||||
val >>= 3;
|
||||
val &= 0x03;
|
||||
return static_cast<PD_Status>(val);
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
const uint8_t pd_voltage_list[7] = {0, 5, 9, 12, 15, 18, 20};
|
||||
const float pd_current_list[16] = {
|
||||
0.5, 0.7, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5,
|
||||
2.75, 3, 3.25, 3.5, 4, 4.5, 5
|
||||
};
|
||||
|
||||
bool initImpl()
|
||||
{
|
||||
return readRegister(HUSB238_PD_STATUS0) != -1;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
1009
buildroot/package/axp2101/src/XPowersLib/PowersSY6970.tpp
Normal file
1009
buildroot/package/axp2101/src/XPowersLib/PowersSY6970.tpp
Normal file
File diff suppressed because it is too large
Load Diff
182
buildroot/package/axp2101/src/XPowersLib/REG/AXP192Constants.h
Normal file
182
buildroot/package/axp2101/src/XPowersLib/REG/AXP192Constants.h
Normal file
@@ -0,0 +1,182 @@
|
||||
#pragma once
|
||||
|
||||
#define AXP192_SLAVE_ADDRESS (0x34)
|
||||
|
||||
#define XPOWERS_AXP192_CHIP_ID (0x03)
|
||||
|
||||
#define XPOWERS_AXP192_STATUS (0x00)
|
||||
#define XPOWERS_AXP192_MODE_CHGSTATUS (0x01)
|
||||
#define XPOWERS_AXP192_OTG_STATUS (0x02)
|
||||
#define XPOWERS_AXP192_IC_TYPE (0x03)
|
||||
|
||||
#define XPOWERS_AXP192_DATA_BUFFER1 (0x06)
|
||||
#define XPOWERS_AXP192_DATA_BUFFER2 (0x07)
|
||||
#define XPOWERS_AXP192_DATA_BUFFER3 (0x08)
|
||||
#define XPOWERS_AXP192_DATA_BUFFER4 (0x09)
|
||||
#define XPOWERS_AXP192_DATA_BUFFER5 (0x0A)
|
||||
#define XPOWERS_AXP192_DATA_BUFFER6 (0x0B)
|
||||
#define XPOWERS_AXP192_DATA_BUFFER_SIZE (6)
|
||||
|
||||
|
||||
#define XPOWERS_AXP192_LDO23_DC123_EXT_CTL (0x12)
|
||||
#define XPOWERS_AXP192_DC2OUT_VOL (0x23)
|
||||
#define XPOWERS_AXP192_DC2_DVM (0x25)
|
||||
#define XPOWERS_AXP192_DC3OUT_VOL (0x27)
|
||||
#define XPOWERS_AXP192_LDO24OUT_VOL (0x28)
|
||||
#define XPOWERS_AXP192_LDO3OUT_VOL (0x29)
|
||||
#define XPOWERS_AXP192_IPS_SET (0x30)
|
||||
#define XPOWERS_AXP192_VOFF_SET (0x31)
|
||||
#define XPOWERS_AXP192_OFF_CTL (0x32)
|
||||
#define XPOWERS_AXP192_CHARGE1 (0x33)
|
||||
#define XPOWERS_AXP192_CHARGE2 (0x34)
|
||||
#define XPOWERS_AXP192_BACKUP_CHG (0x35)
|
||||
#define XPOWERS_AXP192_POK_SET (0x36)
|
||||
#define XPOWERS_AXP192_DCDC_FREQSET (0x37)
|
||||
#define XPOWERS_AXP192_VLTF_CHGSET (0x38)
|
||||
#define XPOWERS_AXP192_VHTF_CHGSET (0x39)
|
||||
#define XPOWERS_AXP192_APS_WARNING1 (0x3A)
|
||||
#define XPOWERS_AXP192_APS_WARNING2 (0x3B)
|
||||
#define XPOWERS_AXP192_TLTF_DISCHGSET (0x3C)
|
||||
#define XPOWERS_AXP192_THTF_DISCHGSET (0x3D)
|
||||
#define XPOWERS_AXP192_DCDC_MODESET (0x80)
|
||||
#define XPOWERS_AXP192_ADC_EN1 (0x82)
|
||||
#define XPOWERS_AXP192_ADC_EN2 (0x83)
|
||||
#define XPOWERS_AXP192_ADC_SPEED (0x84)
|
||||
#define XPOWERS_AXP192_ADC_INPUTRANGE (0x85)
|
||||
#define XPOWERS_AXP192_ADC_IRQ_RETFSET (0x86)
|
||||
#define XPOWERS_AXP192_ADC_IRQ_FETFSET (0x87)
|
||||
#define XPOWERS_AXP192_TIMER_CTL (0x8A)
|
||||
#define XPOWERS_AXP192_VBUS_DET_SRP (0x8B)
|
||||
#define XPOWERS_AXP192_HOTOVER_CTL (0x8F)
|
||||
|
||||
#define XPOWERS_AXP192_PWM1_FREQ_SET (0x98)
|
||||
#define XPOWERS_AXP192_PWM1_DUTY_SET1 (0x99)
|
||||
#define XPOWERS_AXP192_PWM1_DUTY_SET2 (0x9A)
|
||||
|
||||
#define XPOWERS_AXP192_PWM2_FREQ_SET (0x9B)
|
||||
#define XPOWERS_AXP192_PWM2_DUTY_SET1 (0x9C)
|
||||
#define XPOWERS_AXP192_PWM2_DUTY_SET2 (0x9D)
|
||||
|
||||
|
||||
// INTERRUPT REGISTER
|
||||
#define XPOWERS_AXP192_INTEN1 (0x40)
|
||||
#define XPOWERS_AXP192_INTEN2 (0x41)
|
||||
#define XPOWERS_AXP192_INTEN3 (0x42)
|
||||
#define XPOWERS_AXP192_INTEN4 (0x43)
|
||||
#define XPOWERS_AXP192_INTEN5 (0x4A)
|
||||
|
||||
// INTERRUPT STATUS REGISTER
|
||||
#define XPOWERS_AXP192_INTSTS1 (0x44)
|
||||
#define XPOWERS_AXP192_INTSTS2 (0x45)
|
||||
#define XPOWERS_AXP192_INTSTS3 (0x46)
|
||||
#define XPOWERS_AXP192_INTSTS4 (0x47)
|
||||
#define XPOWERS_AXP192_INTSTS5 (0x4D)
|
||||
#define XPOWERS_AXP192_INTSTS_CNT (5)
|
||||
|
||||
#define XPOWERS_AXP192_DC1_VLOTAGE (0x26)
|
||||
#define XPOWERS_AXP192_LDO23OUT_VOL (0x28)
|
||||
#define XPOWERS_AXP192_GPIO0_CTL (0x90)
|
||||
#define XPOWERS_AXP192_GPIO0_VOL (0x91)
|
||||
#define XPOWERS_AXP192_GPIO1_CTL (0X92)
|
||||
#define XPOWERS_AXP192_GPIO2_CTL (0x93)
|
||||
#define XPOWERS_AXP192_GPIO012_SIGNAL (0x94)
|
||||
#define XPOWERS_AXP192_GPIO34_CTL (0x95)
|
||||
#define XPOWERS_AXP192_GPIO34_SIGNAL (0x96)
|
||||
#define XPOWERS_AXP192_GPIO012_PULLDOWN (0x97)
|
||||
#define XPOWERS_AXP192_GPIO5_CTL (0x9E)
|
||||
|
||||
#define XPOWERS_AXP192_GPIO0_VOL_ADC_H8 (0x64)
|
||||
#define XPOWERS_AXP192_GPIO0_VOL_ADC_L4 (0x65)
|
||||
#define XPOWERS_AXP192_GPIO1_VOL_ADC_H8 (0x66)
|
||||
#define XPOWERS_AXP192_GPIO1_VOL_ADC_L4 (0x67)
|
||||
#define XPOWERS_AXP192_GPIO2_VOL_ADC_H8 (0x68)
|
||||
#define XPOWERS_AXP192_GPIO2_VOL_ADC_L4 (0x69)
|
||||
#define XPOWERS_AXP192_GPIO3_VOL_ADC_H8 (0x6A)
|
||||
#define XPOWERS_AXP192_GPIO3_VOL_ADC_L4 (0x6B)
|
||||
|
||||
#define XPOWERS_AXP192_GPIO0_STEP (0.5F)
|
||||
#define XPOWERS_AXP192_GPIO1_STEP (0.5F)
|
||||
#define XPOWERS_AXP192_TS_IN_H8 (0x62)
|
||||
#define XPOWERS_AXP192_TS_IN_L4 (0x63)
|
||||
|
||||
#define XPOWERS_AXP192_BAT_AVERCHGCUR_H8 (0x7A)
|
||||
#define XPOWERS_AXP192_BAT_AVERCHGCUR_L5 (0x7B)
|
||||
|
||||
|
||||
#define XPOWERS_AXP192_ACIN_VOL_H8 (0x56)
|
||||
#define XPOWERS_AXP192_ACIN_VOL_L4 (0x57)
|
||||
#define XPOWERS_AXP192_ACIN_CUR_H8 (0x58)
|
||||
#define XPOWERS_AXP192_ACIN_CUR_L4 (0x59)
|
||||
#define XPOWERS_AXP192_VBUS_VOL_H8 (0x5A)
|
||||
#define XPOWERS_AXP192_VBUS_VOL_L4 (0x5B)
|
||||
#define XPOWERS_AXP192_VBUS_CUR_H8 (0x5C)
|
||||
#define XPOWERS_AXP192_VBUS_CUR_L4 (0x5D)
|
||||
|
||||
#define XPOWERS_AXP192_BAT_AVERDISCHGCUR_H8 (0x7C)
|
||||
#define XPOWERS_AXP192_BAT_AVERDISCHGCUR_L5 (0x7D)
|
||||
#define XPOWERS_AXP192_APS_AVERVOL_H8 (0x7E)
|
||||
#define XPOWERS_AXP192_APS_AVERVOL_L4 (0x7F)
|
||||
#define XPOWERS_AXP192_BAT_AVERVOL_H8 (0x78)
|
||||
#define XPOWERS_AXP192_BAT_AVERVOL_L4 (0x79)
|
||||
|
||||
#define XPOWERS_AXP192_BAT_CHGCOULOMB3 (0xB0)
|
||||
#define XPOWERS_AXP192_BAT_CHGCOULOMB2 (0xB1)
|
||||
#define XPOWERS_AXP192_BAT_CHGCOULOMB1 (0xB2)
|
||||
#define XPOWERS_AXP192_BAT_CHGCOULOMB0 (0xB3)
|
||||
#define XPOWERS_AXP192_BAT_DISCHGCOULOMB3 (0xB4)
|
||||
#define XPOWERS_AXP192_BAT_DISCHGCOULOMB2 (0xB5)
|
||||
#define XPOWERS_AXP192_BAT_DISCHGCOULOMB1 (0xB6)
|
||||
#define XPOWERS_AXP192_BAT_DISCHGCOULOMB0 (0xB7)
|
||||
#define XPOWERS_AXP192_COULOMB_CTL (0xB8)
|
||||
|
||||
|
||||
#define XPOWERS_AXP192_BATT_VOLTAGE_STEP (1.1F)
|
||||
#define XPOWERS_AXP192_BATT_DISCHARGE_CUR_STEP (0.5F)
|
||||
#define XPOWERS_AXP192_BATT_CHARGE_CUR_STEP (0.5F)
|
||||
#define XPOWERS_AXP192_ACIN_VOLTAGE_STEP (1.7F)
|
||||
#define XPOWERS_AXP192_ACIN_CUR_STEP (0.625F)
|
||||
#define XPOWERS_AXP192_VBUS_VOLTAGE_STEP (1.7F)
|
||||
#define XPOWERS_AXP192_VBUS_CUR_STEP (0.375F)
|
||||
#define XPOWERS_AXP192_APS_VOLTAGE_STEP (1.4F)
|
||||
#define XPOWERS_AXP192_TS_PIN_OUT_STEP (0.8F)
|
||||
|
||||
|
||||
#define XPOWERS_AXP192_LDO2_VOL_MIN (1800u)
|
||||
#define XPOWERS_AXP192_LDO2_VOL_MAX (3300u)
|
||||
#define XPOWERS_AXP192_LDO2_VOL_STEPS (100u)
|
||||
#define XPOWERS_AXP192_LDO2_VOL_BIT_MASK (4u)
|
||||
|
||||
#define XPOWERS_AXP192_LDO3_VOL_MIN (1800u)
|
||||
#define XPOWERS_AXP192_LDO3_VOL_MAX (3300u)
|
||||
#define XPOWERS_AXP192_LDO3_VOL_STEPS (100u)
|
||||
|
||||
|
||||
#define XPOWERS_AXP192_DC1_VOL_STEPS (25u)
|
||||
#define XPOWERS_AXP192_DC1_VOL_MIN (700u)
|
||||
#define XPOWERS_AXP192_DC1_VOL_MAX (3500u)
|
||||
|
||||
#define XPOWERS_AXP192_DC2_VOL_STEPS (25u)
|
||||
#define XPOWERS_AXP192_DC2_VOL_MIN (700u)
|
||||
#define XPOWERS_AXP192_DC2_VOL_MAX (3500u)
|
||||
|
||||
#define XPOWERS_AXP192_DC3_VOL_STEPS (25u)
|
||||
#define XPOWERS_AXP192_DC3_VOL_MIN (700u)
|
||||
#define XPOWERS_AXP192_DC3_VOL_MAX (3500u)
|
||||
|
||||
#define XPOWERS_AXP192_LDOIO_VOL_STEPS (100)
|
||||
#define XPOWERS_AXP192_LDOIO_VOL_MIN (1800)
|
||||
#define XPOWERS_AXP192_LDOIO_VOL_MAX (3300)
|
||||
|
||||
#define XPOWERS_AXP192_SYS_VOL_STEPS (100)
|
||||
#define XPOWERS_AXP192_VOFF_VOL_MIN (2600)
|
||||
#define XPOWERS_AXP192_VOFF_VOL_MAX (3300)
|
||||
|
||||
#define XPOWERS_AXP192_CHG_EXT_CURR_MIN (300)
|
||||
#define XPOWERS_AXP192_CHG_EXT_CURR_MAX (1000)
|
||||
#define XPOWERS_AXP192_CHG_EXT_CURR_STEP (100)
|
||||
|
||||
|
||||
#define XPOWERS_AXP192_INTERNAL_TEMP_H8 (0x5E)
|
||||
#define XPOWERS_AXP192_INTERNAL_TEMP_L4 (0x5F)
|
||||
#define XPOWERS_AXP192_INTERNAL_TEMP_STEP (0.1F)
|
||||
#define XPOWERS_AXP192_INERNAL_TEMP_OFFSET (144.7)
|
||||
192
buildroot/package/axp2101/src/XPowersLib/REG/AXP202Constants.h
Normal file
192
buildroot/package/axp2101/src/XPowersLib/REG/AXP202Constants.h
Normal file
@@ -0,0 +1,192 @@
|
||||
#pragma once
|
||||
|
||||
#define AXP202_SLAVE_ADDRESS (0x35)
|
||||
|
||||
#define XPOWERS_AXP202_CHIP_ID (0x41)
|
||||
|
||||
#define XPOWERS_AXP202_STATUS (0x00)
|
||||
#define XPOWERS_AXP202_MODE_CHGSTATUS (0x01)
|
||||
#define XPOWERS_AXP202_OTG_STATUS (0x02)
|
||||
#define XPOWERS_AXP202_IC_TYPE (0x03)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER1 (0x04)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER2 (0x05)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER3 (0x06)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER4 (0x07)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER5 (0x08)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER6 (0x09)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER7 (0x0A)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER8 (0x0B)
|
||||
#define XPOWERS_AXP202_DATA_BUFFER9 (0x0C)
|
||||
#define XPOWERS_AXP202_DATA_BUFFERA (0x0D)
|
||||
#define XPOWERS_AXP202_DATA_BUFFERB (0x0E)
|
||||
#define XPOWERS_AXP202_DATA_BUFFERC (0x0F)
|
||||
#define XPOWERS_AXP202_LDO234_DC23_CTL (0x12)
|
||||
#define XPOWERS_AXP202_DC2OUT_VOL (0x23)
|
||||
#define XPOWERS_AXP202_LDO3_DC2_DVM (0x25)
|
||||
#define XPOWERS_AXP202_DC3OUT_VOL (0x27)
|
||||
#define XPOWERS_AXP202_LDO24OUT_VOL (0x28)
|
||||
#define XPOWERS_AXP202_LDO3OUT_VOL (0x29)
|
||||
#define XPOWERS_AXP202_IPS_SET (0x30)
|
||||
#define XPOWERS_AXP202_VOFF_SET (0x31)
|
||||
#define XPOWERS_AXP202_OFF_CTL (0x32)
|
||||
#define XPOWERS_AXP202_CHARGE1 (0x33)
|
||||
#define XPOWERS_AXP202_CHARGE2 (0x34)
|
||||
#define XPOWERS_AXP202_BACKUP_CHG (0x35)
|
||||
#define XPOWERS_AXP202_POK_SET (0x36)
|
||||
#define XPOWERS_AXP202_DCDC_FREQSET (0x37)
|
||||
#define XPOWERS_AXP202_VLTF_CHGSET (0x38)
|
||||
#define XPOWERS_AXP202_VHTF_CHGSET (0x39)
|
||||
#define XPOWERS_AXP202_APS_WARNING1 (0x3A)
|
||||
#define XPOWERS_AXP202_APS_WARNING2 (0x3B)
|
||||
#define XPOWERS_AXP202_TLTF_DISCHGSET (0x3C)
|
||||
#define XPOWERS_AXP202_THTF_DISCHGSET (0x3D)
|
||||
#define XPOWERS_AXP202_DCDC_MODESET (0x80)
|
||||
#define XPOWERS_AXP202_ADC_EN1 (0x82)
|
||||
#define XPOWERS_AXP202_ADC_EN2 (0x83)
|
||||
#define XPOWERS_AXP202_ADC_SPEED (0x84)
|
||||
#define XPOWERS_AXP202_ADC_INPUTRANGE (0x85)
|
||||
#define XPOWERS_AXP202_ADC_IRQ_RETFSET (0x86)
|
||||
#define XPOWERS_AXP202_ADC_IRQ_FETFSET (0x87)
|
||||
#define XPOWERS_AXP202_TIMER_CTL (0x8A)
|
||||
#define XPOWERS_AXP202_VBUS_DET_SRP (0x8B)
|
||||
#define XPOWERS_AXP202_HOTOVER_CTL (0x8F)
|
||||
|
||||
#define XPOWERS_AXP202_DATA_BUFFER_SIZE (12)
|
||||
#define XPOWERS_AXP202_GPIO0_CTL (0x90)
|
||||
#define XPOWERS_AXP202_GPIO0_VOL (0x91)
|
||||
#define XPOWERS_AXP202_GPIO1_CTL (0x92)
|
||||
#define XPOWERS_AXP202_GPIO2_CTL (0x93)
|
||||
#define XPOWERS_AXP202_GPIO012_SIGNAL (0x94)
|
||||
#define XPOWERS_AXP202_GPIO3_CTL (0x95)
|
||||
|
||||
// INTERRUPT REGISTER
|
||||
#define XPOWERS_AXP202_INTEN1 (0x40)
|
||||
#define XPOWERS_AXP202_INTEN2 (0x41)
|
||||
#define XPOWERS_AXP202_INTEN3 (0x42)
|
||||
#define XPOWERS_AXP202_INTEN4 (0x43)
|
||||
#define XPOWERS_AXP202_INTEN5 (0x44)
|
||||
|
||||
//INTERRUPT STATUS REGISTER
|
||||
#define XPOWERS_AXP202_INTSTS1 (0x48)
|
||||
#define XPOWERS_AXP202_INTSTS2 (0x49)
|
||||
#define XPOWERS_AXP202_INTSTS3 (0x4A)
|
||||
#define XPOWERS_AXP202_INTSTS4 (0x4B)
|
||||
#define XPOWERS_AXP202_INTSTS5 (0x4C)
|
||||
#define XPOWERS_AXP202_INTSTS_CNT (5)
|
||||
|
||||
|
||||
//AXP ADC DATA REGISTER
|
||||
#define XPOWERS_AXP202_GPIO0_VOL_ADC_H8 (0x64)
|
||||
#define XPOWERS_AXP202_GPIO0_VOL_ADC_L4 (0x65)
|
||||
#define XPOWERS_AXP202_GPIO1_VOL_ADC_H8 (0x66)
|
||||
#define XPOWERS_AXP202_GPIO1_VOL_ADC_L4 (0x67)
|
||||
|
||||
|
||||
#define XPOWERS_AXP202_GPIO0_STEP (0.5F)
|
||||
#define XPOWERS_AXP202_GPIO1_STEP (0.5F)
|
||||
|
||||
#define XPOWERS_AXP202_BAT_AVERVOL_H8 (0x78)
|
||||
#define XPOWERS_AXP202_BAT_AVERVOL_L4 (0x79)
|
||||
|
||||
#define XPOWERS_AXP202_BAT_AVERCHGCUR_H8 (0x7A)
|
||||
#define XPOWERS_AXP202_BAT_AVERCHGCUR_L4 (0x7B)
|
||||
|
||||
#define XPOWERS_AXP202_BAT_AVERCHGCUR_L5 (0x7B)
|
||||
#define XPOWERS_AXP202_ACIN_VOL_H8 (0x56)
|
||||
#define XPOWERS_AXP202_ACIN_VOL_L4 (0x57)
|
||||
#define XPOWERS_AXP202_ACIN_CUR_H8 (0x58)
|
||||
#define XPOWERS_AXP202_ACIN_CUR_L4 (0x59)
|
||||
#define XPOWERS_AXP202_VBUS_VOL_H8 (0x5A)
|
||||
#define XPOWERS_AXP202_VBUS_VOL_L4 (0x5B)
|
||||
#define XPOWERS_AXP202_VBUS_CUR_H8 (0x5C)
|
||||
#define XPOWERS_AXP202_VBUS_CUR_L4 (0x5D)
|
||||
#define XPOWERS_AXP202_INTERNAL_TEMP_H8 (0x5E)
|
||||
#define XPOWERS_AXP202_INTERNAL_TEMP_L4 (0x5F)
|
||||
#define XPOWERS_AXP202_TS_IN_H8 (0x62)
|
||||
#define XPOWERS_AXP202_TS_IN_L4 (0x63)
|
||||
#define XPOWERS_AXP202_GPIO0_VOL_ADC_H8 (0x64)
|
||||
#define XPOWERS_AXP202_GPIO0_VOL_ADC_L4 (0x65)
|
||||
#define XPOWERS_AXP202_GPIO1_VOL_ADC_H8 (0x66)
|
||||
#define XPOWERS_AXP202_GPIO1_VOL_ADC_L4 (0x67)
|
||||
|
||||
#define XPOWERS_AXP202_BAT_AVERDISCHGCUR_H8 (0x7C)
|
||||
#define XPOWERS_AXP202_BAT_AVERDISCHGCUR_L5 (0x7D)
|
||||
#define XPOWERS_AXP202_APS_AVERVOL_H8 (0x7E)
|
||||
#define XPOWERS_AXP202_APS_AVERVOL_L4 (0x7F)
|
||||
#define XPOWERS_AXP202_INT_BAT_CHGCUR_H8 (0xA0)
|
||||
#define XPOWERS_AXP202_INT_BAT_CHGCUR_L4 (0xA1)
|
||||
#define XPOWERS_AXP202_EXT_BAT_CHGCUR_H8 (0xA2)
|
||||
#define XPOWERS_AXP202_EXT_BAT_CHGCUR_L4 (0xA3)
|
||||
#define XPOWERS_AXP202_INT_BAT_DISCHGCUR_H8 (0xA4)
|
||||
#define XPOWERS_AXP202_INT_BAT_DISCHGCUR_L4 (0xA5)
|
||||
#define XPOWERS_AXP202_EXT_BAT_DISCHGCUR_H8 (0xA6)
|
||||
#define XPOWERS_AXP202_EXT_BAT_DISCHGCUR_L4 (0xA7)
|
||||
#define XPOWERS_AXP202_BAT_CHGCOULOMB3 (0xB0)
|
||||
#define XPOWERS_AXP202_BAT_CHGCOULOMB2 (0xB1)
|
||||
#define XPOWERS_AXP202_BAT_CHGCOULOMB1 (0xB2)
|
||||
#define XPOWERS_AXP202_BAT_CHGCOULOMB0 (0xB3)
|
||||
#define XPOWERS_AXP202_BAT_DISCHGCOULOMB3 (0xB4)
|
||||
#define XPOWERS_AXP202_BAT_DISCHGCOULOMB2 (0xB5)
|
||||
#define XPOWERS_AXP202_BAT_DISCHGCOULOMB1 (0xB6)
|
||||
#define XPOWERS_AXP202_BAT_DISCHGCOULOMB0 (0xB7)
|
||||
#define XPOWERS_AXP202_COULOMB_CTL (0xB8)
|
||||
#define XPOWERS_AXP202_BATT_PERCENTAGE (0xB9)
|
||||
|
||||
#define XPOWERS_AXP202_BAT_POWERH8 (0x70)
|
||||
#define XPOWERS_AXP202_BAT_POWERM8 (0x71)
|
||||
#define XPOWERS_AXP202_BAT_POWERL8 (0x72)
|
||||
|
||||
#define XPOWERS_AXP202_BATT_VOLTAGE_STEP (1.1F)
|
||||
#define XPOWERS_AXP202_BATT_DISCHARGE_CUR_STEP (0.5F)
|
||||
#define XPOWERS_AXP202_BATT_CHARGE_CUR_STEP (0.5F)
|
||||
#define XPOWERS_AXP202_ACIN_VOLTAGE_STEP (1.7F)
|
||||
#define XPOWERS_AXP202_ACIN_CUR_STEP (0.625F)
|
||||
#define XPOWERS_AXP202_VBUS_VOLTAGE_STEP (1.7F)
|
||||
#define XPOWERS_AXP202_VBUS_CUR_STEP (0.375F)
|
||||
#define XPOWERS_AXP202_INTERNAL_TEMP_STEP (0.1F)
|
||||
#define XPOWERS_AXP202_APS_VOLTAGE_STEP (1.4F)
|
||||
#define XPOWERS_AXP202_TS_PIN_OUT_STEP (0.8F)
|
||||
|
||||
#define XPOWERS_AXP202_LDO2_VOL_MIN (1800u)
|
||||
#define XPOWERS_AXP202_LDO2_VOL_MAX (3300u)
|
||||
#define XPOWERS_AXP202_LDO2_VOL_STEPS (100u)
|
||||
#define XPOWERS_AXP202_LDO2_VOL_BIT_MASK (4u)
|
||||
|
||||
#define XPOWERS_AXP202_LDO3_VOL_MIN (1800u)
|
||||
#define XPOWERS_AXP202_LDO3_VOL_MAX (3300u)
|
||||
#define XPOWERS_AXP202_LDO3_VOL_STEPS (100u)
|
||||
|
||||
#define XPOWERS_AXP202_DC2_VOL_STEPS (25u)
|
||||
#define XPOWERS_AXP202_DC2_VOL_MIN (700u)
|
||||
#define XPOWERS_AXP202_DC2_VOL_MAX (3500u)
|
||||
|
||||
#define XPOWERS_AXP202_DC3_VOL_STEPS (25u)
|
||||
#define XPOWERS_AXP202_DC3_VOL_MIN (700u)
|
||||
#define XPOWERS_AXP202_DC3_VOL_MAX (3500u)
|
||||
|
||||
#define XPOWERS_AXP202_LDOIO_VOL_STEPS (100)
|
||||
#define XPOWERS_AXP202_LDOIO_VOL_MIN (1800)
|
||||
#define XPOWERS_AXP202_LDOIO_VOL_MAX (3300)
|
||||
|
||||
|
||||
#define XPOWERS_AXP202_SYS_VOL_STEPS (100)
|
||||
#define XPOWERS_AXP202_VOFF_VOL_MIN (2600)
|
||||
#define XPOWERS_AXP202_VOFF_VOL_MAX (3300)
|
||||
|
||||
#define XPOWERS_AXP202_CHG_EXT_CURR_MIN (300)
|
||||
#define XPOWERS_AXP202_CHG_EXT_CURR_MAX (1000)
|
||||
#define XPOWERS_AXP202_CHG_EXT_CURR_STEP (100)
|
||||
|
||||
#define XPOWERS_AXP202_INERNAL_TEMP_OFFSET (144.7)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
243
buildroot/package/axp2101/src/XPowersLib/REG/AXP2101Constants.h
Normal file
243
buildroot/package/axp2101/src/XPowersLib/REG/AXP2101Constants.h
Normal file
@@ -0,0 +1,243 @@
|
||||
#pragma once
|
||||
|
||||
#define AXP2101_SLAVE_ADDRESS (0x34)
|
||||
|
||||
#define XPOWERS_AXP2101_CHIP_ID (0x4A)
|
||||
#define XPOWERS_AXP2101_CHIP_ID_2 (0x47)
|
||||
|
||||
#define XPOWERS_AXP2101_STATUS1 (0x00)
|
||||
#define XPOWERS_AXP2101_STATUS2 (0x01)
|
||||
#define XPOWERS_AXP2101_IC_TYPE (0x03)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_DATA_BUFFER1 (0x04)
|
||||
#define XPOWERS_AXP2101_DATA_BUFFER2 (0x05)
|
||||
#define XPOWERS_AXP2101_DATA_BUFFER3 (0x06)
|
||||
#define XPOWERS_AXP2101_DATA_BUFFER4 (0x07)
|
||||
#define XPOWERS_AXP2101_DATA_BUFFER_SIZE (4u)
|
||||
|
||||
#define XPOWERS_AXP2101_COMMON_CONFIG (0x10)
|
||||
#define XPOWERS_AXP2101_BATFET_CTRL (0x12)
|
||||
#define XPOWERS_AXP2101_DIE_TEMP_CTRL (0x13)
|
||||
#define XPOWERS_AXP2101_MIN_SYS_VOL_CTRL (0x14)
|
||||
#define XPOWERS_AXP2101_INPUT_VOL_LIMIT_CTRL (0x15)
|
||||
#define XPOWERS_AXP2101_INPUT_CUR_LIMIT_CTRL (0x16)
|
||||
#define XPOWERS_AXP2101_RESET_FUEL_GAUGE (0x17)
|
||||
#define XPOWERS_AXP2101_CHARGE_GAUGE_WDT_CTRL (0x18)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_WDT_CTRL (0x19)
|
||||
#define XPOWERS_AXP2101_LOW_BAT_WARN_SET (0x1A)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_PWRON_STATUS (0x20)
|
||||
#define XPOWERS_AXP2101_PWROFF_STATUS (0x21)
|
||||
#define XPOWERS_AXP2101_PWROFF_EN (0x22)
|
||||
#define XPOWERS_AXP2101_DC_OVP_UVP_CTRL (0x23)
|
||||
#define XPOWERS_AXP2101_VOFF_SET (0x24)
|
||||
#define XPOWERS_AXP2101_PWROK_SEQU_CTRL (0x25)
|
||||
#define XPOWERS_AXP2101_SLEEP_WAKEUP_CTRL (0x26)
|
||||
#define XPOWERS_AXP2101_IRQ_OFF_ON_LEVEL_CTRL (0x27)
|
||||
|
||||
#define XPOWERS_AXP2101_FAST_PWRON_SET0 (0x28)
|
||||
#define XPOWERS_AXP2101_FAST_PWRON_SET1 (0x29)
|
||||
#define XPOWERS_AXP2101_FAST_PWRON_SET2 (0x2A)
|
||||
#define XPOWERS_AXP2101_FAST_PWRON_CTRL (0x2B)
|
||||
|
||||
#define XPOWERS_AXP2101_ADC_CHANNEL_CTRL (0x30)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST0 (0x34)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST1 (0x35)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST2 (0x36)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST3 (0x37)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST4 (0x38)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST5 (0x39)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST6 (0x3A)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST7 (0x3B)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST8 (0x3C)
|
||||
#define XPOWERS_AXP2101_ADC_DATA_RELUST9 (0x3D)
|
||||
|
||||
|
||||
//XPOWERS INTERRUPT REGISTER
|
||||
#define XPOWERS_AXP2101_INTEN1 (0x40)
|
||||
#define XPOWERS_AXP2101_INTEN2 (0x41)
|
||||
#define XPOWERS_AXP2101_INTEN3 (0x42)
|
||||
|
||||
|
||||
//XPOWERS INTERRUPT STATUS REGISTER
|
||||
#define XPOWERS_AXP2101_INTSTS1 (0x48)
|
||||
#define XPOWERS_AXP2101_INTSTS2 (0x49)
|
||||
#define XPOWERS_AXP2101_INTSTS3 (0x4A)
|
||||
#define XPOWERS_AXP2101_INTSTS_CNT (3)
|
||||
|
||||
#define XPOWERS_AXP2101_TS_PIN_CTRL (0x50)
|
||||
#define XPOWERS_AXP2101_TS_HYSL2H_SET (0x52)
|
||||
#define XPOWERS_AXP2101_TS_LYSL2H_SET (0x53)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_VLTF_CHG_SET (0x54)
|
||||
#define XPOWERS_AXP2101_VHLTF_CHG_SET (0x55)
|
||||
#define XPOWERS_AXP2101_VLTF_WORK_SET (0x56)
|
||||
#define XPOWERS_AXP2101_VHLTF_WORK_SET (0x57)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_JIETA_EN_CTRL (0x58)
|
||||
#define XPOWERS_AXP2101_JIETA_SET0 (0x59)
|
||||
#define XPOWERS_AXP2101_JIETA_SET1 (0x5A)
|
||||
#define XPOWERS_AXP2101_JIETA_SET2 (0x5B)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_IPRECHG_SET (0x61)
|
||||
#define XPOWERS_AXP2101_ICC_CHG_SET (0x62)
|
||||
#define XPOWERS_AXP2101_ITERM_CHG_SET_CTRL (0x63)
|
||||
|
||||
#define XPOWERS_AXP2101_CV_CHG_VOL_SET (0x64)
|
||||
|
||||
#define XPOWERS_AXP2101_THE_REGU_THRES_SET (0x65)
|
||||
#define XPOWERS_AXP2101_CHG_TIMEOUT_SET_CTRL (0x67)
|
||||
|
||||
#define XPOWERS_AXP2101_BAT_DET_CTRL (0x68)
|
||||
#define XPOWERS_AXP2101_CHGLED_SET_CTRL (0x69)
|
||||
|
||||
#define XPOWERS_AXP2101_BTN_VOL_MIN (2600)
|
||||
#define XPOWERS_AXP2101_BTN_VOL_MAX (3300)
|
||||
#define XPOWERS_AXP2101_BTN_VOL_STEPS (100)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_BTN_BAT_CHG_VOL_SET (0x6A)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_DC_ONOFF_DVM_CTRL (0x80)
|
||||
#define XPOWERS_AXP2101_DC_FORCE_PWM_CTRL (0x81)
|
||||
#define XPOWERS_AXP2101_DC_VOL0_CTRL (0x82)
|
||||
#define XPOWERS_AXP2101_DC_VOL1_CTRL (0x83)
|
||||
#define XPOWERS_AXP2101_DC_VOL2_CTRL (0x84)
|
||||
#define XPOWERS_AXP2101_DC_VOL3_CTRL (0x85)
|
||||
#define XPOWERS_AXP2101_DC_VOL4_CTRL (0x86)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_LDO_ONOFF_CTRL0 (0x90)
|
||||
#define XPOWERS_AXP2101_LDO_ONOFF_CTRL1 (0x91)
|
||||
#define XPOWERS_AXP2101_LDO_VOL0_CTRL (0x92)
|
||||
#define XPOWERS_AXP2101_LDO_VOL1_CTRL (0x93)
|
||||
#define XPOWERS_AXP2101_LDO_VOL2_CTRL (0x94)
|
||||
#define XPOWERS_AXP2101_LDO_VOL3_CTRL (0x95)
|
||||
#define XPOWERS_AXP2101_LDO_VOL4_CTRL (0x96)
|
||||
#define XPOWERS_AXP2101_LDO_VOL5_CTRL (0x97)
|
||||
#define XPOWERS_AXP2101_LDO_VOL6_CTRL (0x98)
|
||||
#define XPOWERS_AXP2101_LDO_VOL7_CTRL (0x99)
|
||||
#define XPOWERS_AXP2101_LDO_VOL8_CTRL (0x9A)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_BAT_PARAME (0xA1)
|
||||
#define XPOWERS_AXP2101_FUEL_GAUGE_CTRL (0xA2)
|
||||
#define XPOWERS_AXP2101_BAT_PERCENT_DATA (0xA4)
|
||||
|
||||
// DCDC 1~5
|
||||
#define XPOWERS_AXP2101_DCDC1_VOL_MIN (1500)
|
||||
#define XPOWERS_AXP2101_DCDC1_VOL_MAX (3400)
|
||||
#define XPOWERS_AXP2101_DCDC1_VOL_STEPS (100u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL1_MIN (500u)
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL1_MAX (1200u)
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL2_MIN (1220u)
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL2_MAX (1540u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS1 (10u)
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS2 (20u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS1_BASE (0u)
|
||||
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS2_BASE (71)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL1_MIN (500u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL1_MAX (1200u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL2_MIN (1220u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL2_MAX (1540u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL3_MIN (1600u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL3_MAX (3400u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_MAX (3400)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS1 (10u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS2 (20u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS3 (100u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS1_BASE (0u)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS2_BASE (71)
|
||||
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS3_BASE (88)
|
||||
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL1_MIN (500u)
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL1_MAX (1200u)
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL2_MIN (1220u)
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL2_MAX (1840u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS1 (10u)
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS2 (20u)
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS1_BASE (0u)
|
||||
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS2_BASE (71)
|
||||
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_DCDC5_VOL_1200MV (1200)
|
||||
#define XPOWERS_AXP2101_DCDC5_VOL_VAL (0x19)
|
||||
#define XPOWERS_AXP2101_DCDC5_VOL_MIN (1400)
|
||||
#define XPOWERS_AXP2101_DCDC5_VOL_MAX (3700)
|
||||
#define XPOWERS_AXP2101_DCDC5_VOL_STEPS (100u)
|
||||
|
||||
#define XPOWERS_AXP2101_VSYS_VOL_THRESHOLD_MIN (2600)
|
||||
#define XPOWERS_AXP2101_VSYS_VOL_THRESHOLD_MAX (3300)
|
||||
#define XPOWERS_AXP2101_VSYS_VOL_THRESHOLD_STEPS (100)
|
||||
|
||||
// ALDO 1~4
|
||||
|
||||
#define XPOWERS_AXP2101_ALDO1_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_ALDO1_VOL_MAX (3500)
|
||||
#define XPOWERS_AXP2101_ALDO1_VOL_STEPS (100u)
|
||||
|
||||
#define XPOWERS_AXP2101_ALDO2_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_ALDO2_VOL_MAX (3500)
|
||||
#define XPOWERS_AXP2101_ALDO2_VOL_STEPS (100u)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_ALDO3_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_ALDO3_VOL_MAX (3500)
|
||||
#define XPOWERS_AXP2101_ALDO3_VOL_STEPS (100u)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_ALDO4_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_ALDO4_VOL_MAX (3500)
|
||||
#define XPOWERS_AXP2101_ALDO4_VOL_STEPS (100u)
|
||||
|
||||
// BLDO 1~2
|
||||
|
||||
#define XPOWERS_AXP2101_BLDO1_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_BLDO1_VOL_MAX (3500)
|
||||
#define XPOWERS_AXP2101_BLDO1_VOL_STEPS (100u)
|
||||
|
||||
#define XPOWERS_AXP2101_BLDO2_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_BLDO2_VOL_MAX (3500)
|
||||
#define XPOWERS_AXP2101_BLDO2_VOL_STEPS (100u)
|
||||
|
||||
// CPUSLDO
|
||||
|
||||
#define XPOWERS_AXP2101_CPUSLDO_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_CPUSLDO_VOL_MAX (1400)
|
||||
#define XPOWERS_AXP2101_CPUSLDO_VOL_STEPS (50)
|
||||
|
||||
|
||||
// DLDO 1~2
|
||||
#define XPOWERS_AXP2101_DLDO1_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_DLDO1_VOL_MAX (3400)
|
||||
#define XPOWERS_AXP2101_DLDO1_VOL_STEPS (100u)
|
||||
|
||||
#define XPOWERS_AXP2101_DLDO2_VOL_MIN (500)
|
||||
#define XPOWERS_AXP2101_DLDO2_VOL_MAX (3400)
|
||||
#define XPOWERS_AXP2101_DLDO2_VOL_STEPS (100u)
|
||||
|
||||
|
||||
#define XPOWERS_AXP2101_CONVERSION(raw) (22.0 + (7274 - raw) / 20.0)
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
#pragma once
|
||||
|
||||
#define AXP216_SLAVE_ADDRESS (0x34)
|
||||
|
||||
#define XPOWERS_AXP216_CHIP_ID (0x41)
|
||||
|
||||
//CONTROL REGISTER
|
||||
#define XPOWERS_AXP216_STATUS (0x00)
|
||||
#define XPOWERS_AXP216_MODE_CHGSTATUS (0x01)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER1 (0x04)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER2 (0x05)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER3 (0x06)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER4 (0x07)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER5 (0x08)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER6 (0x09)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER7 (0x0A)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER8 (0x0B)
|
||||
#define XPOWERS_AXP216_DATA_BUFFER9 (0x0C)
|
||||
#define XPOWERS_AXP216_DATA_BUFFERA (0x0D)
|
||||
#define XPOWERS_AXP216_DATA_BUFFERB (0x0E)
|
||||
#define XPOWERS_AXP216_DATA_BUFFERC (0x0F)
|
||||
|
||||
#define XPOWERS_AXP216_IC_TYPE (0x03)
|
||||
|
||||
#define XPOWERS_AXP216_DC12345_ALDO12_CTL (0x10)
|
||||
#define XPOWERS_AXP216_LDO123_CTL (0x12)
|
||||
#define XPOWERS_AXP216_OUTPUT_CTL (0x13)
|
||||
#define XPOWERS_AXP216_ELDO1_VCTL (0x19)
|
||||
#define XPOWERS_AXP216_ELDO2_VCTL (0x1A)
|
||||
#define XPOWERS_AXP216_DCDC1_VCTL (0x21)
|
||||
#define XPOWERS_AXP216_DCDC2_VCTL (0x22)
|
||||
#define XPOWERS_AXP216_DCDC3_VCTL (0x23)
|
||||
|
||||
#define XPOWERS_AXP216_DCDC4_VCTL (0x24)
|
||||
#define XPOWERS_AXP216_DCDC5_VCTL (0x25)
|
||||
#define XPOWERS_AXP216_DCDC23_VOLX (0x27)
|
||||
#define XPOWERS_AXP216_ALDO1_VCTL (0x28)
|
||||
#define XPOWERS_AXP216_ALDO2_VCTL (0x29)
|
||||
#define XPOWERS_AXP216_ALDO3_VCTL (0x2A)
|
||||
#define XPOWERS_AXP216_VBUS_IPSOUT (0x30)
|
||||
#define XPOWERS_AXP216_VOFF_SET (0x31)
|
||||
#define XPOWERS_AXP216_OFF_CTL (0x32)
|
||||
#define XPOWERS_AXP216_CHARGE1 (0x33)
|
||||
#define XPOWERS_AXP216_CHARGE2 (0x34)
|
||||
#define XPOWERS_AXP216_CHARGE3 (0x35)
|
||||
#define XPOWERS_AXP216_PEK_SET (0x36)
|
||||
#define XPOWERS_AXP216_OFFLEVEL (0x37)
|
||||
#define XPOWERS_AXP216_VLTF_CHGSET (0x38)
|
||||
#define XPOWERS_AXP216_VHTF_CHGSET (0x39)
|
||||
#define XPOWERS_AXP216_DCDC_FREQ (0x3B)
|
||||
#define XPOWERS_AXP216_TLTF_DISCHGSET (0x3C)
|
||||
#define XPOWERS_AXP216_THTF_DISCHGSET (0x3D)
|
||||
#define XPOWERS_AXP216_DCDC_MODESET (0x80)
|
||||
#define XPOWERS_AXP216_ADC_CTL (0x82)
|
||||
#define XPOWERS_AXP216_ADC_SPEED (0x84)
|
||||
#define XPOWERS_AXP216_TS_ADC (0x85)
|
||||
#define XPOWERS_AXP216_TIMER_CTL (0x8A)
|
||||
#define XPOWERS_AXP216_HOTOVER_CTL (0x8F)
|
||||
|
||||
//GPIO REGISTER
|
||||
#define XPOWERS_AXP216_GPIO1_CTL (0x92)
|
||||
#define XPOWERS_AXP216_GPIO1_LDO_CTL (0x93)
|
||||
#define XPOWERS_AXP216_GPIO01_STATUS (0x94)
|
||||
#define XPOWERS_AXP216_GPIO1_PULLDOWN_CTL (0x97)
|
||||
|
||||
//XPOWERS INTERRUPT REGISTER
|
||||
#define XPOWERS_AXP216_INTEN1 (0x40)
|
||||
#define XPOWERS_AXP216_INTEN2 (0x41)
|
||||
#define XPOWERS_AXP216_INTEN3 (0x42)
|
||||
#define XPOWERS_AXP216_INTEN4 (0x43)
|
||||
#define XPOWERS_AXP216_INTEN5 (0x44)
|
||||
|
||||
//XPOWERS INTERRUPT STATUS REGISTER
|
||||
#define XPOWERS_AXP216_INTSTS1 (0x48)
|
||||
#define XPOWERS_AXP216_INTSTS2 (0x49)
|
||||
#define XPOWERS_AXP216_INTSTS3 (0x4A)
|
||||
#define XPOWERS_AXP216_INTSTS4 (0x4B)
|
||||
#define XPOWERS_AXP216_INTSTS5 (0x4C)
|
||||
|
||||
//XPOWERS ADC DATA REGISTER
|
||||
#define XPOWERS_AXP216_INTERNAL_TEMP_H8 (0x56)
|
||||
#define XPOWERS_AXP216_INTERNAL_TEMP_L4 (0x57)
|
||||
#define XPOWERS_AXP216_TS_IN_H8 (0x58)
|
||||
#define XPOWERS_AXP216_TS_IN_L4 (0x59)
|
||||
#define XPOWERS_AXP216_BAT_VOLTAGE_H8 (0x78)
|
||||
#define XPOWERS_AXP216_BAT_VOLTAGE_L4 (0x79)
|
||||
#define XPOWERS_AXP216_BAT_CHGCURCUR_H8 (0x7A)
|
||||
#define XPOWERS_AXP216_BAT_CHGCURCUR_L4 (0x7B)
|
||||
#define XPOWERS_AXP216_BAT_DISCHGCUR_H8 (0x7C)
|
||||
#define XPOWERS_AXP216_BAT_DISCHGCUR_L4 (0x7D)
|
||||
#define XPOWERS_AXP216_FUEL_GAUGE_CTRL (0xB8)
|
||||
#define XPOWERS_AXP216_FUEL_GAUGE_REULST (0xB9)
|
||||
#define XPOWERS_AXP216_BAT_CAPACITY_0 (0xE0)
|
||||
#define XPOWERS_AXP216_BAT_CAPACITY_1 (0xE1)
|
||||
#define XPOWERS_AXP216_BAT_LOW_WARNING_CTRL (0xE6)
|
||||
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2022 lewis he
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file HUSB238Constants.h
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2024-07-24
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define HUSB238_SLAVE_ADDRESS (0x8)
|
||||
|
||||
#define HUSB238_PD_STATUS0 (0x0)
|
||||
#define HUSB238_PD_STATUS1 (0x1)
|
||||
#define HUSB238_SRC_PDO_5V (0x2)
|
||||
#define HUSB238_SRC_PDO_9V (0x3)
|
||||
#define HUSB238_SRC_PDO_12V (0x4)
|
||||
#define HUSB238_SRC_PDO_15V (0x5)
|
||||
#define HUSB238_SRC_PDO_18V (0x6)
|
||||
#define HUSB238_SRC_PDO_20V (0x7)
|
||||
#define HUSB238_SRC_PDO (0x8)
|
||||
#define HUSB238_GO_COMMAND (0x9)
|
||||
|
||||
|
||||
126
buildroot/package/axp2101/src/XPowersLib/REG/SY6970Constants.h
Normal file
126
buildroot/package/axp2101/src/XPowersLib/REG/SY6970Constants.h
Normal file
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2022 lewis he
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file SY6970Constants.h
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2023-07-20
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define SY6970_SLAVE_ADDRESS (0x6A)
|
||||
// https://www.ti.com/product/BQ25896
|
||||
#define BQ25896_SLAVE_ADDRESS (0x6B)
|
||||
// https://www.sg-micro.com/cnproduct/SGM41511
|
||||
#define SGM41511_SLAVE_ADDRESS (0x6B)
|
||||
|
||||
#define SY6970_DEV_REV (0x00)
|
||||
#define BQ25896_DEV_REV (0x02)
|
||||
|
||||
#define POWERS_SY6970_REG_00H (0x00)
|
||||
#define POWERS_SY6970_REG_01H (0x01)
|
||||
#define POWERS_SY6970_REG_02H (0x02)
|
||||
#define POWERS_SY6970_REG_03H (0x03)
|
||||
#define POWERS_SY6970_REG_04H (0x04)
|
||||
#define POWERS_SY6970_REG_05H (0x05)
|
||||
#define POWERS_SY6970_REG_06H (0x06)
|
||||
#define POWERS_SY6970_REG_07H (0x07)
|
||||
#define POWERS_SY6970_REG_08H (0x08)
|
||||
#define POWERS_SY6970_REG_09H (0x09)
|
||||
#define POWERS_SY6970_REG_0AH (0x0A)
|
||||
// Read only STATUS REG
|
||||
#define POWERS_SY6970_REG_0BH (0x0B)
|
||||
// Read only CHARGE IRQ REG
|
||||
#define POWERS_SY6970_REG_0CH (0x0C)
|
||||
// Absolute VINDPM Threshold
|
||||
#define POWERS_SY6970_REG_0DH (0x0D)
|
||||
// Read only BATTERY VOLTAGE
|
||||
#define POWERS_SY6970_REG_0EH (0x0E)
|
||||
// Read only SYSTEM VOLTAGE
|
||||
#define POWERS_SY6970_REG_0FH (0x0F)
|
||||
// Read only NTC PERCENTAGE
|
||||
#define POWERS_SY6970_REG_10H (0x10)
|
||||
// Read only VBUS VOLTAGE
|
||||
#define POWERS_SY6970_REG_11H (0x11)
|
||||
// Read only CHARGE CURRENT
|
||||
#define POWERS_SY6970_REG_12H (0x12)
|
||||
// Read only VINDPM/IINDPM STATUS/CURR LIMIT SETTING
|
||||
#define POWERS_SY6970_REG_13H (0x13)
|
||||
// RESET REG
|
||||
#define POWERS_SY6970_REG_14H (0x14)
|
||||
|
||||
#define POWERS_SY6970_VBUS_MASK_VAL(val) (val & 0x7F)
|
||||
#define POWERS_SY6970_VBAT_MASK_VAL(val) (val & 0x7F)
|
||||
#define POWERS_SY6970_VSYS_MASK_VAL(val) (val & 0x7F)
|
||||
#define POWERS_SY6970_NTC_MASK_VAL(val) (val & 0x7F)
|
||||
|
||||
#define POWERS_SY6970_VBUS_BASE_VAL (2600)
|
||||
#define POWERS_SY6970_VBAT_BASE_VAL (2304)
|
||||
#define POWERS_SY6970_VSYS_BASE_VAL (2304)
|
||||
#define POWERS_SY6970_NTC_BASE_VAL (21)
|
||||
|
||||
#define POWERS_SY6970_VBUS_VOL_STEP (100)
|
||||
#define POWERS_SY6970_VBAT_VOL_STEP (20)
|
||||
#define POWERS_SY6970_VSYS_VOL_STEP (20)
|
||||
#define POWERS_SY6970_NTC_VOL_STEP (0.465)
|
||||
#define POWERS_SY6970_CHG_STEP_VAL (50)
|
||||
|
||||
#define POWERS_SY6970_PRE_CHG_CUR_BASE (64)
|
||||
#define POWERS_SY6970_FAST_CHG_CUR_STEP (64)
|
||||
#define POWERS_SY6970_PRE_CHG_CUR_STEP (64)
|
||||
|
||||
#define POWERS_FAST_CHG_CURRENT_MIN (0)
|
||||
#define POWERS_FAST_CHG_CURRENT_MAX (5056)
|
||||
|
||||
#define POWERS_PRE_CHG_CURRENT_MIN (64)
|
||||
#define POWERS_PRE_CHG_CURRENT_MAX (1024)
|
||||
|
||||
#define POWERS_SY6970_CHG_VOL_BASE (3840)
|
||||
#define POWERS_SY6970_CHG_VOL_STEP (16)
|
||||
#define POWERS_FAST_CHG_VOL_MIN (3840)
|
||||
#define POWERS_FAST_CHG_VOL_MAX (4608)
|
||||
|
||||
#define POWERS_SY6970_SYS_VOL_STEPS (100)
|
||||
#define POWERS_SY6970_SYS_VOFF_VOL_MIN (3000)
|
||||
#define POWERS_SY6970_SYS_VOFF_VOL_MAX (3700)
|
||||
|
||||
#define POWERS_SY6970_IN_CURRENT_STEP (50)
|
||||
#define POWERS_SY6970_IN_CURRENT_MIN (100)
|
||||
#define POWERS_SY6970_IN_CURRENT_MAX (3250)
|
||||
|
||||
#define POWERS_SY6970_BOOTS_VOL_BASE (4550)
|
||||
#define POWERS_SY6970_BOOTS_VOL_STEP (64)
|
||||
#define POWERS_SY6970_BOOST_VOL_MIN (4550)
|
||||
#define POWERS_SY6970_BOOST_VOL_MAX (5510)
|
||||
|
||||
#define POWERS_SY6970_IRQ_WTD_FAULT(x) (bool)(( x & 0xFF ) >> 7)
|
||||
#define POWERS_SY6970_IRQ_BOOST_FAULT(x) (bool)(( x & 0xFF ) >> 6)
|
||||
#define POWERS_SY6970_IRQ_CHG_FAULT(x) (bool)(( x & 0xFF ) >> 5)
|
||||
#define POWERS_SY6970_IRQ_BAT_FAULT(x) (bool)(( x & 0xFF ) >> 4)
|
||||
#define POWERS_SY6970_IRQ_NTC_FAULT(x) (bool)(( x & 0xFF ) & 0x03)
|
||||
|
||||
#define POWERS_SY6970_VINDPM_VOL_BASE (4550)
|
||||
#define POWERS_SY6970_VINDPM_VOL_STEPS (100)
|
||||
#define POWERS_SY6970_VINDPM_VOL_MIN (3900)
|
||||
#define POWERS_SY6970_VINDPM_VOL_MAX (15300)
|
||||
2087
buildroot/package/axp2101/src/XPowersLib/XPowersAXP192.tpp
Normal file
2087
buildroot/package/axp2101/src/XPowersLib/XPowersAXP192.tpp
Normal file
File diff suppressed because it is too large
Load Diff
1704
buildroot/package/axp2101/src/XPowersLib/XPowersAXP202.tpp
Normal file
1704
buildroot/package/axp2101/src/XPowersLib/XPowersAXP202.tpp
Normal file
File diff suppressed because it is too large
Load Diff
3084
buildroot/package/axp2101/src/XPowersLib/XPowersAXP2101.tpp
Normal file
3084
buildroot/package/axp2101/src/XPowersLib/XPowersAXP2101.tpp
Normal file
File diff suppressed because it is too large
Load Diff
512
buildroot/package/axp2101/src/XPowersLib/XPowersCommon.tpp
Normal file
512
buildroot/package/axp2101/src/XPowersLib/XPowersCommon.tpp
Normal file
@@ -0,0 +1,512 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2022 lewis he
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file XPowersCommon.h
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2022-05-07
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#if defined(ARDUINO)
|
||||
#include <Wire.h>
|
||||
#elif defined(ESP_PLATFORM)
|
||||
#include "esp_log.h"
|
||||
#include "esp_err.h"
|
||||
#include <cstring>
|
||||
#include "esp_idf_version.h"
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,0,0)) && defined(CONFIG_XPOWERS_ESP_IDF_NEW_API)
|
||||
#include "driver/i2c_master.h"
|
||||
#else
|
||||
#include "driver/i2c.h"
|
||||
#define XPOWERSLIB_I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
|
||||
#define XPOWERSLIB_I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
|
||||
#define XPOWERSLIB_I2C_MASTER_TIMEOUT_MS 1000
|
||||
#endif //ESP_IDF_VERSION
|
||||
|
||||
|
||||
#endif //ESP_PLATFORM
|
||||
|
||||
#define XPOWERSLIB_I2C_MASTER_SPEED 400000
|
||||
|
||||
|
||||
#ifdef _BV
|
||||
#undef _BV
|
||||
#endif
|
||||
#define _BV(b) (1ULL << (uint64_t)(b))
|
||||
|
||||
|
||||
#ifndef constrain
|
||||
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define XPOWERS_ATTR_NOT_IMPLEMENTED __attribute__((error("Not implemented")))
|
||||
#define IS_BIT_SET(val,mask) (((val)&(mask)) == (mask))
|
||||
|
||||
#if !defined(ARDUINO)
|
||||
#ifdef linux
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#define log_e(__info,...) printf("error :" __info,##__VA_ARGS__)
|
||||
#define log_i(__info,...) printf("info :" __info,##__VA_ARGS__)
|
||||
#define log_d(__info,...) printf("debug :" __info,##__VA_ARGS__)
|
||||
#else
|
||||
#define log_e(...)
|
||||
#define log_i(...)
|
||||
#define log_d(...)
|
||||
#endif
|
||||
|
||||
#define LOW 0x0
|
||||
#define HIGH 0x1
|
||||
|
||||
//GPIO FUNCTIONS
|
||||
#define INPUT 0x01
|
||||
#define OUTPUT 0x03
|
||||
#define PULLUP 0x04
|
||||
#define INPUT_PULLUP 0x05
|
||||
#define PULLDOWN 0x08
|
||||
#define INPUT_PULLDOWN 0x09
|
||||
|
||||
#define RISING 0x01
|
||||
#define FALLING 0x02
|
||||
#endif
|
||||
|
||||
#ifndef ESP32
|
||||
#ifdef LOG_FILE_LINE_INFO
|
||||
#undef LOG_FILE_LINE_INFO
|
||||
#endif
|
||||
#define LOG_FILE_LINE_INFO __FILE__, __LINE__
|
||||
#ifndef log_e
|
||||
#define log_e(fmt, ...) Serial.printf("[E][%s:%d] " fmt "\n", LOG_FILE_LINE_INFO, ##__VA_ARGS__)
|
||||
#endif
|
||||
#ifndef log_i
|
||||
#define log_i(fmt, ...) Serial.printf("[I][%s:%d] " fmt "\n", LOG_FILE_LINE_INFO, ##__VA_ARGS__)
|
||||
#endif
|
||||
#ifndef log_d
|
||||
#define log_d(fmt, ...) Serial.printf("[D][%s:%d] " fmt "\n", LOG_FILE_LINE_INFO, ##__VA_ARGS__)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(NRF52840_XXAA) || defined(NRF52832_XXAA)
|
||||
#ifndef SDA
|
||||
#define SDA (0xFF)
|
||||
#endif
|
||||
|
||||
#ifndef SCL
|
||||
#define SCL (0xFF)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
typedef int (*iic_fptr_t)(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint8_t len);
|
||||
|
||||
template <class chipType>
|
||||
class XPowersCommon
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
#if defined(ARDUINO)
|
||||
bool begin(TwoWire &w, uint8_t addr, int sda, int scl)
|
||||
{
|
||||
if (__has_init)return thisChip().initImpl();
|
||||
__has_init = true;
|
||||
__sda = sda;
|
||||
__scl = scl;
|
||||
__wire = &w;
|
||||
|
||||
#if defined(NRF52840_XXAA) || defined(NRF52832_XXAA)
|
||||
if (__sda != 0xFF && __scl != 0xFF) {
|
||||
__wire->setPins(__sda, __scl);
|
||||
}
|
||||
__wire->begin();
|
||||
#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_STM32)
|
||||
if (__sda != 0xFF && __scl != 0xFF) {
|
||||
__wire->end();
|
||||
__wire->setSDA(__sda);
|
||||
__wire->setSCL(__scl);
|
||||
}
|
||||
__wire->begin();
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
__wire->begin(__sda, __scl);
|
||||
#else
|
||||
__wire->begin();
|
||||
#endif
|
||||
__addr = addr;
|
||||
return thisChip().initImpl();
|
||||
}
|
||||
#elif defined(ESP_PLATFORM)
|
||||
|
||||
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,0,0)) && defined(CONFIG_XPOWERS_ESP_IDF_NEW_API)
|
||||
|
||||
// * Using the new API of esp-idf 5.x, you need to pass the I2C BUS handle,
|
||||
// * which is useful when the bus shares multiple devices.
|
||||
bool begin(i2c_master_bus_handle_t i2c_dev_bus_handle, uint8_t addr)
|
||||
{
|
||||
log_i("Using ESP-IDF Driver interface.");
|
||||
if (i2c_dev_bus_handle == NULL) return false;
|
||||
if (__has_init)return thisChip().initImpl();
|
||||
|
||||
thisReadRegCallback = NULL;
|
||||
thisWriteRegCallback = NULL;
|
||||
|
||||
/*
|
||||
i2c_master_bus_config_t i2c_bus_config;
|
||||
memset(&i2c_bus_config, 0, sizeof(i2c_bus_config));
|
||||
i2c_bus_config.clk_source = I2C_CLK_SRC_DEFAULT;
|
||||
i2c_bus_config.i2c_port = port_num;
|
||||
i2c_bus_config.scl_io_num = (gpio_num_t)__scl;
|
||||
i2c_bus_config.sda_io_num = (gpio_num_t)__sda;
|
||||
i2c_bus_config.glitch_ignore_cnt = 7;
|
||||
|
||||
i2c_new_master_bus(&i2c_bus_config, &bus_handle);
|
||||
*/
|
||||
|
||||
bus_handle = i2c_dev_bus_handle;
|
||||
|
||||
i2c_device_config_t i2c_dev_conf = {
|
||||
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
|
||||
.device_address = addr,
|
||||
.scl_speed_hz = XPOWERSLIB_I2C_MASTER_SPEED,
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,3,0))
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,4,0))
|
||||
// New fields since esp-idf-v5.3-beta1
|
||||
.scl_wait_us = 0,
|
||||
#endif
|
||||
.flags = {
|
||||
. disable_ack_check = 0
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
if (ESP_OK != i2c_master_bus_add_device(bus_handle,
|
||||
&i2c_dev_conf,
|
||||
&__i2c_device)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
__has_init = thisChip().initImpl();
|
||||
|
||||
if (!__has_init) {
|
||||
// Initialization failed, delete device
|
||||
i2c_master_bus_rm_device(__i2c_device);
|
||||
}
|
||||
return __has_init;
|
||||
}
|
||||
|
||||
|
||||
#else //ESP 4.X
|
||||
|
||||
|
||||
bool begin(i2c_port_t port_num, uint8_t addr, int sda, int scl)
|
||||
{
|
||||
__i2c_num = port_num;
|
||||
log_i("Using ESP-IDF Driver interface.");
|
||||
if (__has_init)return thisChip().initImpl();
|
||||
__sda = sda;
|
||||
__scl = scl;
|
||||
__addr = addr;
|
||||
thisReadRegCallback = NULL;
|
||||
thisWriteRegCallback = NULL;
|
||||
|
||||
i2c_config_t i2c_conf;
|
||||
memset(&i2c_conf, 0, sizeof(i2c_conf));
|
||||
i2c_conf.mode = I2C_MODE_MASTER;
|
||||
i2c_conf.sda_io_num = sda;
|
||||
i2c_conf.scl_io_num = scl;
|
||||
i2c_conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
|
||||
i2c_conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
|
||||
i2c_conf.master.clk_speed = XPOWERSLIB_I2C_MASTER_SPEED;
|
||||
|
||||
/**
|
||||
* @brief Without checking whether the initialization is successful,
|
||||
* I2C may be initialized externally,
|
||||
* so just make sure there is an initialization here.
|
||||
*/
|
||||
i2c_param_config(__i2c_num, &i2c_conf);
|
||||
i2c_driver_install(__i2c_num,
|
||||
i2c_conf.mode,
|
||||
XPOWERSLIB_I2C_MASTER_RX_BUF_DISABLE,
|
||||
XPOWERSLIB_I2C_MASTER_TX_BUF_DISABLE, 0);
|
||||
__has_init = thisChip().initImpl();
|
||||
return __has_init;
|
||||
}
|
||||
#endif //ESP 5.X
|
||||
#endif //ESP_PLATFORM
|
||||
|
||||
bool begin(uint8_t addr, iic_fptr_t readRegCallback, iic_fptr_t writeRegCallback)
|
||||
{
|
||||
if (__has_init)return thisChip().initImpl();
|
||||
__has_init = true;
|
||||
thisReadRegCallback = readRegCallback;
|
||||
thisWriteRegCallback = writeRegCallback;
|
||||
__addr = addr;
|
||||
return thisChip().initImpl();
|
||||
}
|
||||
|
||||
int readRegister(uint8_t reg)
|
||||
{
|
||||
uint8_t val = 0;
|
||||
return readRegister(reg, &val, 1) == -1 ? -1 : val;
|
||||
}
|
||||
|
||||
int writeRegister(uint8_t reg, uint8_t val)
|
||||
{
|
||||
return writeRegister(reg, &val, 1);
|
||||
}
|
||||
|
||||
int readRegister(uint8_t reg, uint8_t *buf, uint8_t length)
|
||||
{
|
||||
if (thisReadRegCallback) {
|
||||
return thisReadRegCallback(__addr, reg, buf, length);
|
||||
}
|
||||
#if defined(ARDUINO)
|
||||
if (__wire) {
|
||||
__wire->beginTransmission(__addr);
|
||||
__wire->write(reg);
|
||||
if (__wire->endTransmission() != 0) {
|
||||
return -1;
|
||||
}
|
||||
__wire->requestFrom(__addr, length);
|
||||
return __wire->readBytes(buf, length) == length ? 0 : -1;
|
||||
}
|
||||
#elif defined(ESP_PLATFORM)
|
||||
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,0,0)) && defined(CONFIG_XPOWERS_ESP_IDF_NEW_API)
|
||||
if (ESP_OK == i2c_master_transmit_receive(
|
||||
__i2c_device,
|
||||
(const uint8_t *)®,
|
||||
1,
|
||||
buf,
|
||||
length,
|
||||
-1)) {
|
||||
return 0;
|
||||
}
|
||||
#else //ESP_IDF_VERSION
|
||||
if (ESP_OK == i2c_master_write_read_device(__i2c_num,
|
||||
__addr,
|
||||
(uint8_t *)®,
|
||||
1,
|
||||
buf,
|
||||
length,
|
||||
XPOWERSLIB_I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS)) {
|
||||
return 0;
|
||||
}
|
||||
#endif //ESP_IDF_VERSION
|
||||
#endif //ESP_PLATFORM
|
||||
return -1;
|
||||
}
|
||||
|
||||
int writeRegister(uint8_t reg, uint8_t *buf, uint8_t length)
|
||||
{
|
||||
if (thisWriteRegCallback) {
|
||||
return thisWriteRegCallback(__addr, reg, buf, length);
|
||||
}
|
||||
#if defined(ARDUINO)
|
||||
if (__wire) {
|
||||
__wire->beginTransmission(__addr);
|
||||
__wire->write(reg);
|
||||
__wire->write(buf, length);
|
||||
return (__wire->endTransmission() == 0) ? 0 : -1;
|
||||
}
|
||||
return -1;
|
||||
#elif defined(ESP_PLATFORM)
|
||||
uint8_t *write_buffer = (uint8_t *)malloc(sizeof(uint8_t) * (length + 1));
|
||||
if (!write_buffer) {
|
||||
return -1;
|
||||
}
|
||||
write_buffer[0] = reg;
|
||||
memcpy(write_buffer + 1, buf, length);
|
||||
|
||||
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,0,0)) && defined(CONFIG_XPOWERS_ESP_IDF_NEW_API)
|
||||
if (ESP_OK != i2c_master_transmit(
|
||||
__i2c_device,
|
||||
write_buffer,
|
||||
length + 1,
|
||||
-1)) {
|
||||
free(write_buffer);
|
||||
return -1;
|
||||
}
|
||||
#else //ESP_IDF_VERSION
|
||||
if (ESP_OK != i2c_master_write_to_device(__i2c_num,
|
||||
__addr,
|
||||
write_buffer,
|
||||
length + 1,
|
||||
XPOWERSLIB_I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS)) {
|
||||
free(write_buffer);
|
||||
return -1;
|
||||
}
|
||||
#endif //ESP_IDF_VERSION
|
||||
free(write_buffer);
|
||||
return 0;
|
||||
#endif //ESP_PLATFORM
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool inline clrRegisterBit(uint8_t registers, uint8_t bit)
|
||||
{
|
||||
int val = readRegister(registers);
|
||||
if (val == -1) {
|
||||
return false;
|
||||
}
|
||||
return writeRegister(registers, (val & (~_BV(bit)))) == 0;
|
||||
}
|
||||
|
||||
bool inline setRegisterBit(uint8_t registers, uint8_t bit)
|
||||
{
|
||||
int val = readRegister(registers);
|
||||
if (val == -1) {
|
||||
return false;
|
||||
}
|
||||
return writeRegister(registers, (val | (_BV(bit)))) == 0;
|
||||
}
|
||||
|
||||
bool inline getRegisterBit(uint8_t registers, uint8_t bit)
|
||||
{
|
||||
int val = readRegister(registers);
|
||||
if (val == -1) {
|
||||
return false;
|
||||
}
|
||||
return val & _BV(bit);
|
||||
}
|
||||
|
||||
uint16_t inline readRegisterH8L4(uint8_t highReg, uint8_t lowReg)
|
||||
{
|
||||
int h8 = readRegister(highReg);
|
||||
int l4 = readRegister(lowReg);
|
||||
if (h8 == -1 || l4 == -1)return 0;
|
||||
return (h8 << 4) | (l4 & 0x0F);
|
||||
}
|
||||
|
||||
uint16_t inline readRegisterH8L5(uint8_t highReg, uint8_t lowReg)
|
||||
{
|
||||
int h8 = readRegister(highReg);
|
||||
int l5 = readRegister(lowReg);
|
||||
if (h8 == -1 || l5 == -1)return 0;
|
||||
return (h8 << 5) | (l5 & 0x1F);
|
||||
}
|
||||
|
||||
uint16_t inline readRegisterH6L8(uint8_t highReg, uint8_t lowReg)
|
||||
{
|
||||
int h6 = readRegister(highReg);
|
||||
int l8 = readRegister(lowReg);
|
||||
if (h6 == -1 || l8 == -1)return 0;
|
||||
return ((h6 & 0x3F) << 8) | l8;
|
||||
}
|
||||
|
||||
uint16_t inline readRegisterH5L8(uint8_t highReg, uint8_t lowReg)
|
||||
{
|
||||
int h5 = readRegister(highReg);
|
||||
int l8 = readRegister(lowReg);
|
||||
if (h5 == -1 || l8 == -1)return 0;
|
||||
return ((h5 & 0x1F) << 8) | l8;
|
||||
}
|
||||
|
||||
/*
|
||||
* CRTP Helper
|
||||
*/
|
||||
protected:
|
||||
|
||||
bool begin()
|
||||
{
|
||||
#if defined(ARDUINO)
|
||||
if (__has_init) return thisChip().initImpl();
|
||||
__has_init = true;
|
||||
if (__wire) {
|
||||
log_i("SDA:%d SCL:%d", __sda, __scl);
|
||||
#if defined(NRF52840_XXAA) || defined(NRF52832_XXAA)
|
||||
if (__sda != 0xFF && __scl != 0xFF) {
|
||||
__wire->setPins(__sda, __scl);
|
||||
}
|
||||
__wire->begin();
|
||||
#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_STM32)
|
||||
if (__sda != 0xFF && __scl != 0xFF) {
|
||||
__wire->end();
|
||||
__wire->setSDA(__sda);
|
||||
__wire->setSCL(__scl);
|
||||
}
|
||||
__wire->begin();
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
__wire->begin(__sda, __scl);
|
||||
#else
|
||||
__wire->begin();
|
||||
#endif
|
||||
}
|
||||
#endif /*ARDUINO*/
|
||||
return thisChip().initImpl();
|
||||
}
|
||||
|
||||
void end()
|
||||
{
|
||||
#if defined(ARDUINO)
|
||||
if (__wire) {
|
||||
#if defined(ESP_IDF_VERSION)
|
||||
#if ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(4,4,0)
|
||||
__wire->end();
|
||||
#endif /*ESP_IDF_VERSION*/
|
||||
#endif /*ESP_IDF_VERSION*/
|
||||
}
|
||||
#endif /*ARDUINO*/
|
||||
}
|
||||
|
||||
|
||||
inline const chipType &thisChip() const
|
||||
{
|
||||
return static_cast<const chipType &>(*this);
|
||||
}
|
||||
|
||||
inline chipType &thisChip()
|
||||
{
|
||||
return static_cast<chipType &>(*this);
|
||||
}
|
||||
|
||||
protected:
|
||||
bool __has_init = false;
|
||||
#if defined(ARDUINO)
|
||||
TwoWire *__wire = NULL;
|
||||
#elif defined(ESP_PLATFORM)
|
||||
i2c_port_t __i2c_num;
|
||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,0,0)) && defined(CONFIG_XPOWERS_ESP_IDF_NEW_API)
|
||||
i2c_master_bus_handle_t bus_handle;
|
||||
i2c_master_dev_handle_t __i2c_device;
|
||||
#endif //ESP_IDF_VERSION
|
||||
|
||||
#endif //ESP_PLATFORM
|
||||
int __sda = -1;
|
||||
int __scl = -1;
|
||||
uint8_t __addr = 0xFF;
|
||||
iic_fptr_t thisReadRegCallback = NULL;
|
||||
iic_fptr_t thisWriteRegCallback = NULL;
|
||||
};
|
||||
37
buildroot/package/axp2101/src/XPowersLib/XPowersLib.h
Normal file
37
buildroot/package/axp2101/src/XPowersLib/XPowersLib.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* @file XPowersLib.h
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @license MIT
|
||||
* @copyright Copyright (c) 2022
|
||||
* @date 2022-05-07
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __XPOWERSLIB_H__
|
||||
#define __XPOWERSLIB_H__
|
||||
|
||||
|
||||
#if defined(XPOWERS_CHIP_AXP192)
|
||||
#include "XPowersAXP192.tpp"
|
||||
typedef XPowersAXP192 XPowersPMU;
|
||||
#elif defined(XPOWERS_CHIP_AXP202)
|
||||
#include "XPowersAXP202.tpp"
|
||||
typedef XPowersAXP202 XPowersPMU;
|
||||
#elif defined(XPOWERS_CHIP_AXP2101)
|
||||
#include "XPowersAXP2101.tpp"
|
||||
typedef XPowersAXP2101 XPowersPMU;
|
||||
#else
|
||||
#include "XPowersAXP192.tpp"
|
||||
#include "XPowersAXP202.tpp"
|
||||
#include "XPowersAXP2101.tpp"
|
||||
#include "PowersSY6970.tpp"
|
||||
#include "PowerDeliveryHUSB238.hpp"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*__XPOWERSLIB_H__*/
|
||||
173
buildroot/package/axp2101/src/XPowersLib/XPowersLibInterface.cpp
Normal file
173
buildroot/package/axp2101/src/XPowersLib/XPowersLibInterface.cpp
Normal file
@@ -0,0 +1,173 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2022 lewis he
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file XPowersLibInterface.cpp
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2022-08-28
|
||||
*
|
||||
*/
|
||||
#if defined(ARDUINO)
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
|
||||
#include "XPowersLibInterface.hpp"
|
||||
|
||||
|
||||
bool XPowersLibInterface::isChannelAvailable(uint8_t channel)
|
||||
{
|
||||
if (__chipModel == XPOWERS_AXP192) {
|
||||
switch (channel) {
|
||||
case XPOWERS_DCDC1:
|
||||
case XPOWERS_DCDC2:
|
||||
case XPOWERS_DCDC3:
|
||||
case XPOWERS_LDO2:
|
||||
case XPOWERS_LDO3:
|
||||
case XPOWERS_LDOIO:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else if (__chipModel == XPOWERS_AXP202) {
|
||||
|
||||
switch (channel) {
|
||||
case XPOWERS_DCDC2:
|
||||
case XPOWERS_DCDC3:
|
||||
case XPOWERS_LDO2:
|
||||
case XPOWERS_LDO3:
|
||||
case XPOWERS_LDO4:
|
||||
case XPOWERS_LDO5:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
} else if (__chipModel == XPOWERS_AXP2101) {
|
||||
switch (channel) {
|
||||
case XPOWERS_DCDC1:
|
||||
case XPOWERS_DCDC2:
|
||||
case XPOWERS_DCDC3:
|
||||
case XPOWERS_DCDC4:
|
||||
case XPOWERS_DCDC5:
|
||||
case XPOWERS_ALDO1:
|
||||
case XPOWERS_ALDO2:
|
||||
case XPOWERS_ALDO3:
|
||||
case XPOWERS_ALDO4:
|
||||
case XPOWERS_BLDO1:
|
||||
case XPOWERS_BLDO2:
|
||||
case XPOWERS_VBACKUP:
|
||||
case XPOWERS_CPULDO:
|
||||
return true;
|
||||
default:
|
||||
// DLDO is not available, will also return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void XPowersLibInterface::setProtectedChannel(uint8_t channel)
|
||||
{
|
||||
__protectedMask |= _BV(channel);
|
||||
}
|
||||
|
||||
void XPowersLibInterface::setUnprotectChannel(uint8_t channel)
|
||||
{
|
||||
__protectedMask &= (~_BV(channel));
|
||||
}
|
||||
|
||||
bool XPowersLibInterface::getProtectedChannel(uint8_t channel)
|
||||
{
|
||||
return __protectedMask & _BV(channel);
|
||||
}
|
||||
|
||||
|
||||
uint16_t XPowersLibInterface::getVbusVoltage()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint64_t inline check_params(uint32_t opt, uint32_t params, uint64_t mask)
|
||||
{
|
||||
return ((opt & params) == params) ? mask : 0;
|
||||
}
|
||||
|
||||
bool XPowersLibInterface::enableInterrupt(uint32_t option)
|
||||
{
|
||||
return setInterruptMask(option, true);
|
||||
}
|
||||
|
||||
bool XPowersLibInterface::disableInterrupt(uint32_t option)
|
||||
{
|
||||
return setInterruptMask(option, false);
|
||||
}
|
||||
|
||||
bool XPowersLibInterface::setInterruptMask(uint32_t option, bool enable)
|
||||
{
|
||||
uint64_t params = 0;
|
||||
switch (__chipModel) {
|
||||
case XPOWERS_AXP173:
|
||||
break;
|
||||
case XPOWERS_AXP192:
|
||||
params |= check_params(option, XPOWERS_USB_INSERT_INT, XPOWERS_AXP192_VBUS_INSERT_IRQ);
|
||||
params |= check_params(option, XPOWERS_USB_REMOVE_INT, XPOWERS_AXP192_VBUS_REMOVE_IRQ);
|
||||
params |= check_params(option, XPOWERS_BATTERY_INSERT_INT, XPOWERS_AXP192_BAT_INSERT_IRQ);
|
||||
params |= check_params(option, XPOWERS_BATTERY_REMOVE_INT, XPOWERS_AXP192_BAT_REMOVE_IRQ);
|
||||
params |= check_params(option, XPOWERS_CHARGE_START_INT, XPOWERS_AXP192_BAT_CHG_START_IRQ);
|
||||
params |= check_params(option, XPOWERS_CHARGE_DONE_INT, XPOWERS_AXP192_BAT_CHG_DONE_IRQ);
|
||||
params |= check_params(option, XPOWERS_PWR_BTN_CLICK_INT, XPOWERS_AXP192_PKEY_SHORT_IRQ);
|
||||
params |= check_params(option, XPOWERS_PWR_BTN_LONGPRESSED_INT, XPOWERS_AXP192_PKEY_LONG_IRQ);
|
||||
params |= check_params(option, XPOWERS_ALL_INT, XPOWERS_AXP192_ALL_IRQ);
|
||||
return enable ? enableIRQ(params) : disableIRQ(params);
|
||||
break;
|
||||
case XPOWERS_AXP202:
|
||||
params |= check_params(option, XPOWERS_USB_INSERT_INT, XPOWERS_AXP202_VBUS_INSERT_IRQ);
|
||||
params |= check_params(option, XPOWERS_USB_REMOVE_INT, XPOWERS_AXP202_VBUS_REMOVE_IRQ);
|
||||
params |= check_params(option, XPOWERS_BATTERY_INSERT_INT, XPOWERS_AXP202_BAT_INSERT_IRQ);
|
||||
params |= check_params(option, XPOWERS_BATTERY_REMOVE_INT, XPOWERS_AXP202_BAT_REMOVE_IRQ);
|
||||
params |= check_params(option, XPOWERS_CHARGE_START_INT, XPOWERS_AXP202_BAT_CHG_START_IRQ);
|
||||
params |= check_params(option, XPOWERS_CHARGE_DONE_INT, XPOWERS_AXP202_BAT_CHG_DONE_IRQ);
|
||||
params |= check_params(option, XPOWERS_PWR_BTN_CLICK_INT, XPOWERS_AXP202_PKEY_SHORT_IRQ);
|
||||
params |= check_params(option, XPOWERS_PWR_BTN_LONGPRESSED_INT, XPOWERS_AXP202_PKEY_LONG_IRQ);
|
||||
params |= check_params(option, XPOWERS_ALL_INT, XPOWERS_AXP202_ALL_IRQ);
|
||||
return enable ? enableIRQ(params) : disableIRQ(params);
|
||||
break;
|
||||
case XPOWERS_AXP216:
|
||||
break;
|
||||
case XPOWERS_AXP2101:
|
||||
params |= check_params(option, XPOWERS_USB_INSERT_INT, XPOWERS_AXP2101_VBUS_INSERT_IRQ);
|
||||
params |= check_params(option, XPOWERS_USB_REMOVE_INT, XPOWERS_AXP2101_VBUS_REMOVE_IRQ);
|
||||
params |= check_params(option, XPOWERS_BATTERY_INSERT_INT, XPOWERS_AXP2101_BAT_INSERT_IRQ);
|
||||
params |= check_params(option, XPOWERS_BATTERY_REMOVE_INT, XPOWERS_AXP2101_BAT_REMOVE_IRQ);
|
||||
params |= check_params(option, XPOWERS_CHARGE_START_INT, XPOWERS_AXP2101_BAT_CHG_START_IRQ);
|
||||
params |= check_params(option, XPOWERS_CHARGE_DONE_INT, XPOWERS_AXP2101_BAT_CHG_DONE_IRQ);
|
||||
params |= check_params(option, XPOWERS_PWR_BTN_CLICK_INT, XPOWERS_AXP2101_PKEY_SHORT_IRQ);
|
||||
params |= check_params(option, XPOWERS_PWR_BTN_LONGPRESSED_INT, XPOWERS_AXP2101_PKEY_LONG_IRQ);
|
||||
params |= check_params(option, XPOWERS_ALL_INT, XPOWERS_AXP2101_ALL_IRQ);
|
||||
return enable ? enableIRQ(params) : disableIRQ(params);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
672
buildroot/package/axp2101/src/XPowersLib/XPowersLibInterface.hpp
Normal file
672
buildroot/package/axp2101/src/XPowersLib/XPowersLibInterface.hpp
Normal file
@@ -0,0 +1,672 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2022 lewis he
|
||||
*
|
||||
* Permission is hereby granted,free of charge,to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"),to deal
|
||||
* in the Software without restriction,including without limitation the rights
|
||||
* to use,copy,modify,merge,publish,distribute,sublicense,and/or sell
|
||||
* copies of the Software,and to permit persons to whom the Software is
|
||||
* furnished to do so,subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS",WITHOUT WARRANTY OF ANY KIND,EXPRESS OR
|
||||
* IMPLIED,INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER
|
||||
* LIABILITY,WHETHER IN AN ACTION OF CONTRACT,TORT OR OTHERWISE,ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file XPowersLibInterface.hpp
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2022-08-28
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "XPowersParams.hpp"
|
||||
|
||||
/*
|
||||
| CHIP | AXP173 | AXP192 | AXP202 | AXP2101 |
|
||||
| ---------- | ----------------- | ----------------- | ----------------- | -------------------------------------- |
|
||||
| DC1 | 0.7V-3.5V /1.2A | 0.7V-3.5V /1.2A | X | 1.5-3.4V /2A |
|
||||
| DC2 | 0.7-2.275V/0.6A | 0.7-2.275V /1.6A | 0.7-2.275V /1.6A | 0.5-1.2V,1.22-1.54V /2A |
|
||||
| DC3 | X | 0.7-3.5V /0.7A | 0.7-3.5V /1.2A | 0.5-1.2V,1.22-1.54V,1.6-3.4V /2A |
|
||||
| DC4 | X | x | x | 0.5-1.2V,1.22-1.84V /1.5A |
|
||||
| DC5 | X | x | x | 1.2V,1.4-3.7V /1A |
|
||||
| LDO1(VRTC) | 3.3V /30mA | 3.3V /30mA | 3.3V /30mA | 1.8V /30mA |
|
||||
| LDO2 | 1.8V-3.3V /200mA | 1.8V-3.3V /200mA | 1.8V-3.3V /200mA | x |
|
||||
| LDO3 | 1.8V-3.3V /200mA | 1.8-3.3V /200mA | 0.7-3.5V /200mA | x |
|
||||
| LDO4 | 0.7-3.5V /500mA | X | 1.8V-3.3V /200mA | x |
|
||||
| LDO5/IO0 | X | 1.8-3.3V /50mA | 1.8-3.3V /50mA | x |
|
||||
| ALDO1 | x | x | x | 0.5-3.5V /300mA |
|
||||
| ALDO2 | x | x | x | 0.5-3.5V /300mA |
|
||||
| ALDO3 | x | x | x | 0.5-3.5V /300mA |
|
||||
| ALDO4 | x | x | x | 0.5-3.5V /300mA |
|
||||
| BLDO1 | x | x | x | 0.5-3.5V /300mA |
|
||||
| BLDO2 | x | x | x | 0.5-3.5V /300mA |
|
||||
| DLDO1 | x | x | x | 0.5-3.3V/ 0.5-1.4V /300mA |
|
||||
| DLDO1 | x | x | x | 0.5-3.3V/ 0.5-1.4V /300mA |
|
||||
| CPUSLDO | x | x | x | 0.5-1.4V /30mA |
|
||||
| | | | | |
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// @brief Each chip resource is different,please refer to the table above
|
||||
typedef enum __XPowersPowerChannel {
|
||||
|
||||
XPOWERS_DCDC1,
|
||||
XPOWERS_DCDC2,
|
||||
XPOWERS_DCDC3,
|
||||
XPOWERS_DCDC4,
|
||||
XPOWERS_DCDC5,
|
||||
|
||||
XPOWERS_LDO1,
|
||||
XPOWERS_LDO2,
|
||||
XPOWERS_LDO3,
|
||||
XPOWERS_LDO4,
|
||||
XPOWERS_LDO5,
|
||||
|
||||
XPOWERS_LDOIO,
|
||||
|
||||
XPOWERS_ALDO1,
|
||||
XPOWERS_ALDO2,
|
||||
XPOWERS_ALDO3,
|
||||
XPOWERS_ALDO4,
|
||||
|
||||
XPOWERS_BLDO1,
|
||||
XPOWERS_BLDO2,
|
||||
|
||||
XPOWERS_DLDO1,
|
||||
XPOWERS_DLDO2,
|
||||
|
||||
XPOWERS_VBACKUP,
|
||||
|
||||
XPOWERS_CPULDO,
|
||||
|
||||
} XPowersPowerChannel_t;
|
||||
|
||||
// @brief Chip type
|
||||
typedef enum __XPowersChipModel {
|
||||
XPOWERS_AXP173,
|
||||
XPOWERS_AXP192,
|
||||
XPOWERS_AXP202,
|
||||
XPOWERS_AXP216,
|
||||
XPOWERS_AXP2101,
|
||||
XPOWERS_UNDEFINED,
|
||||
} XPowersChipModel_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Compatible with subclasses of the Meshtastic-devic project
|
||||
*/
|
||||
class HasBatteryLevel
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Get battery percentage
|
||||
* @retval 0~100% , -1 no battery is connected
|
||||
*/
|
||||
virtual int getBatteryPercent()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get battery Voltage
|
||||
* @retval Voltage unit: millivolt , 0 is no battery is connected
|
||||
*/
|
||||
virtual uint16_t getBattVoltage()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Query whether the current battery is connected
|
||||
* @retval true to access,false to not access
|
||||
*/
|
||||
virtual bool isBatteryConnect()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Query whether the current USB is connected
|
||||
* @retval true to access,false to not access
|
||||
*/
|
||||
virtual bool isVbusIn()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Query whether it is currently in charging state
|
||||
* @retval true to charge,false to not charge
|
||||
*/
|
||||
virtual bool isCharging()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// @brief Power resource interface class
|
||||
class XPowersLibInterface : public HasBatteryLevel
|
||||
{
|
||||
public:
|
||||
|
||||
XPowersLibInterface() : __chipModel(XPOWERS_UNDEFINED), __protectedMask(0) {};
|
||||
|
||||
virtual ~XPowersLibInterface() {}
|
||||
|
||||
/**
|
||||
* @brief Calling the XPowersLibInterface interface class
|
||||
* requires calling init for initialization
|
||||
* @retval
|
||||
*/
|
||||
virtual bool init() = 0;
|
||||
|
||||
/**
|
||||
* @brief When calling the XPowersLibInterface interface class,
|
||||
* calling deinit releases the Wire handle
|
||||
* @retval None
|
||||
*/
|
||||
virtual void deinit() = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set the PMU sleep flag,
|
||||
* need to manually close the power channel after setting
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableSleep() = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set shutdown, calling shutdown will turn off all power channels,
|
||||
* only VRTC belongs to normal power supply
|
||||
* @retval None
|
||||
*/
|
||||
virtual void shutdown() = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get PMU satatus register
|
||||
* @note
|
||||
* @retval register value
|
||||
*/
|
||||
virtual uint16_t status() = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Query chip ID
|
||||
* @retval Chip ID
|
||||
*/
|
||||
virtual uint8_t getChipID() = 0;
|
||||
|
||||
//Status function
|
||||
/**
|
||||
* @brief Query whether it is currently in charging state
|
||||
* @retval true to charge,false to not charge
|
||||
*/
|
||||
// virtual bool isCharging() = 0;
|
||||
|
||||
/**
|
||||
* @brief Query whether the current USB is connected
|
||||
* @retval true to access,false to not access
|
||||
*/
|
||||
// virtual bool isVbusIn() = 0;
|
||||
|
||||
/**
|
||||
* @brief Query whether the current battery is connected
|
||||
* @retval true to access,false to not access
|
||||
*/
|
||||
// virtual bool isBatteryConnect() = 0;
|
||||
|
||||
/**
|
||||
* @brief Query whether the current is in the discharge state
|
||||
* @retval true the battery is discharged,false is not discharged
|
||||
*/
|
||||
virtual bool isDischarge() = 0;
|
||||
|
||||
//Power Channel Control
|
||||
|
||||
/**
|
||||
* @brief Turn on the power channel
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enablePowerOutput(uint8_t channel) = 0;
|
||||
|
||||
/**
|
||||
* @brief Turn off the power channel
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disablePowerOutput(uint8_t channel) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get whether the power channel is enabled
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool isPowerChannelEnable(uint8_t channel) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get the set voltage of the power channel
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual uint16_t getPowerChannelVoltage(uint8_t channel) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set the output voltage of a channel power supply
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool setPowerChannelVoltage(uint8_t channel, uint16_t millivolt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Set a channel power protection,after setting this channel
|
||||
* will not be able to be set and closed
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
*/
|
||||
virtual void setProtectedChannel(uint8_t channel);
|
||||
|
||||
/**
|
||||
* @brief Unprotect the channel, call this to unprotect the channel lock
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
*/
|
||||
virtual void setUnprotectChannel(uint8_t channel);
|
||||
|
||||
/**
|
||||
* * @brief Get whether a channel power supply has been protected
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true is set,false is not set
|
||||
*/
|
||||
virtual bool getProtectedChannel(uint8_t channel);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Query whether the PMU input parameter channel is valid
|
||||
* @param channel: Parameters See XPowersPowerChannel_t enumeration
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isChannelAvailable(uint8_t channel);
|
||||
|
||||
virtual void setPrechargeCurr(uint8_t opt) = 0;
|
||||
virtual void disableChargerTerminationLimit(void) = 0;
|
||||
|
||||
virtual bool setVbusVoltageLimit(uint8_t opt) = 0;
|
||||
virtual uint8_t getVbusVoltageLimit(void) = 0;
|
||||
|
||||
virtual bool isStandby(void) = 0;
|
||||
virtual bool isVbusGood(void) = 0;
|
||||
virtual uint8_t getChargerStatus(void) = 0;
|
||||
virtual void enableCellbatteryCharge(void) = 0;
|
||||
virtual void enableGauge(void) = 0;
|
||||
virtual void disableGauge(void) = 0;
|
||||
virtual void setLinearChargerVsysDpm(uint8_t opt) = 0;
|
||||
virtual void disablePwronShutPMIC(void) = 0;
|
||||
|
||||
virtual void fuelGaugeControl(bool writeROM, bool enable) = 0;
|
||||
virtual void printIntRegister() = 0;
|
||||
|
||||
//battery
|
||||
/**
|
||||
* @brief Get battery Voltage
|
||||
* @retval Voltage unit: millivolt , 0 is no battery is connected
|
||||
*/
|
||||
// virtual uint16_t getBattVoltage() = 0;
|
||||
|
||||
/**
|
||||
* @brief Get battery percentage
|
||||
* @retval 0~100% , -1 no battery is connected
|
||||
*/
|
||||
// virtual int getBatteryPercent(void);
|
||||
|
||||
// Vbus
|
||||
/**
|
||||
* @brief Get PMU VBUS/USB Voltage
|
||||
* @retval Voltage unit: millivolt , 0 is no vbus is connected
|
||||
*/
|
||||
virtual uint16_t getVbusVoltage();
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set VBUS Current Input Limit.
|
||||
* @param opt: View the related chip type xpowers_axpxxx_vbus_cur_limit_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool setVbusCurrentLimit(uint8_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get VBUS Current Input Limit.
|
||||
* @retval View the related chip type xpowers_axpxxx_vbus_cur_limit_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
*/
|
||||
virtual uint8_t getVbusCurrentLimit(void) = 0;
|
||||
|
||||
|
||||
// SYS
|
||||
/**
|
||||
* @brief Get PMU SYS main Voltage
|
||||
* @retval Voltage unit: millivolt
|
||||
*/
|
||||
virtual uint16_t getSystemVoltage() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set PMU Low Voltage Shutdown Threshold
|
||||
* @param millivolt: 2600mV ~ 3300mV
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool setSysPowerDownVoltage(uint16_t millivolt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get PMU Low Voltage Shutdown Threshold
|
||||
* @retval Voltage unit: millivolt
|
||||
*/
|
||||
virtual uint16_t getSysPowerDownVoltage() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set charge target voltage.
|
||||
* @param opt: View the related chip type xpowers_axpxxx_chg_vol_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool setChargeTargetVoltage(uint8_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get charge target voltage.
|
||||
* @retval View the related chip type xpowers_axpxxx_chg_vol_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* parameters in "XPowersParams.hpp"
|
||||
*/
|
||||
virtual uint8_t getChargeTargetVoltage() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set charge current.
|
||||
* @param opt: View the related chip type xpowers_axpxxx_chg_curr_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool setChargerConstantCurr(uint8_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get charge current.
|
||||
* @retval View the related chip type xpowers_axpxxx_chg_curr_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
*/
|
||||
virtual uint8_t getChargerConstantCurr() = 0;
|
||||
|
||||
|
||||
//!PMU Interrupt control
|
||||
/*
|
||||
* Example of interrupt usage
|
||||
* if (pmuInterrupt) {
|
||||
* pmuInterrupt = false;
|
||||
*
|
||||
* Read interrupt status
|
||||
* uint64_t mask = PMU->getIrqStatus();
|
||||
* Serial.print("IRQ Mask:0b");
|
||||
* Serial.println(mask,BIN);
|
||||
*
|
||||
* if (PMU->isPekeyShortPressIrq()) {
|
||||
* Serial.println("isPekeyShortPressIrq");
|
||||
* }
|
||||
* if (PMU->isBatChagerStartIrq()) {
|
||||
* Serial.println("isBatChagerStart");
|
||||
* }
|
||||
* ......
|
||||
*
|
||||
* After reading the interrupt status,you need to manually clear the status register
|
||||
* PMU->clearIrqStatus();
|
||||
* }
|
||||
* * * */
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the interrupt controller mask value.
|
||||
* @retval Mask value corresponds to xpowers_axpxxx_irq_t ,
|
||||
*/
|
||||
virtual uint64_t getIrqStatus() = 0;
|
||||
|
||||
/**
|
||||
* @brief Clear interrupt controller state.
|
||||
*/
|
||||
virtual void clearIrqStatus() = 0;
|
||||
|
||||
/**
|
||||
* @brief Eanble PMU interrupt control mask .
|
||||
* @param opt: View the related chip type xpowers_axpxxx_irq_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool enableIRQ(uint64_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable PMU interrupt control mask .
|
||||
* @param opt: View the related chip type xpowers_axpxxx_irq_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool disableIRQ(uint64_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief .
|
||||
* @param opt: View the related chip type xpowers_interrupt_enum_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
bool enableInterrupt(uint32_t opt);
|
||||
|
||||
/**
|
||||
* @brief .
|
||||
* @param opt: View the related chip type xpowers_interrupt_enum_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
bool disableInterrupt(uint32_t opt);
|
||||
|
||||
/**
|
||||
* @brief .
|
||||
* @param opt: View the related chip type xpowers_interrupt_enum_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
bool setInterruptMask(uint32_t option, bool enable);
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU PEKEY is short pressed
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isPekeyShortPressIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU PEKEY is long pressed
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isPekeyLongPressIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU battery is connected
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isBatInsertIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU battery is removed
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isBatRemoveIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU USB is plugged in
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isVbusInsertIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU USB is removed
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isVbusRemoveIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU charging is complete
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isBatChagerDoneIrq() = 0;
|
||||
|
||||
/**
|
||||
* @brief Interrupt response when PMU charging starts
|
||||
* @retval true valid false invalid
|
||||
*/
|
||||
virtual bool isBatChagerStartIrq() = 0;
|
||||
|
||||
|
||||
//Data collection function
|
||||
|
||||
/**
|
||||
* @brief Enable battery detection function,the default is on
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableBattDetection() = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable battery detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disableBattDetection() = 0;
|
||||
|
||||
/**
|
||||
* @brief Enable USB input voltage detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableVbusVoltageMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable USB input voltage detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disableVbusVoltageMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Enable system voltage detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableSystemVoltageMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable system voltage detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disableSystemVoltageMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Enable PMU internal temperature sensor detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableTemperatureMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable PMU internal temperature sensor detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disableTemperatureMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Enable battery input voltage detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableBattVoltageMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable battery input voltage detection
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disableBattVoltageMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Enable NTC thermistor detection (requires hardware support)
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool enableTSPinMeasure(void) = 0;
|
||||
|
||||
/**
|
||||
* @brief Disable NTC thermistor detection (requires hardware support)
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool disableTSPinMeasure(void) = 0;
|
||||
|
||||
// Charge indicator function
|
||||
/**
|
||||
* @brief Set charging led mode
|
||||
* @param opt: View the related chip type xpowers_chg_led_mode_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
*/
|
||||
virtual void setChargingLedMode(uint8_t mode) = 0;
|
||||
virtual void setChargerTerminationCurr(uint8_t opt) = 0;
|
||||
virtual void disableDieOverTempDetect(void) = 0;
|
||||
virtual void resetGauge(void) = 0;
|
||||
virtual void enableLongPressShutdown(void) = 0;
|
||||
|
||||
// PMU PEKEY settings
|
||||
/**
|
||||
* @brief Set PEKEY press power on time
|
||||
* @param opt: View the related chip type xpowers_press_on_time_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool setPowerKeyPressOnTime(uint8_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get PEKEY press power on time
|
||||
* @retval View the related chip type xpowers_press_on_time_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
*/
|
||||
virtual uint8_t getPowerKeyPressOnTime() = 0;
|
||||
|
||||
/**
|
||||
* @brief Set PEKEY press power off time
|
||||
* @param opt: View the related chip type xpowers_press_off_time_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
* @retval true success false failed
|
||||
*/
|
||||
virtual bool setPowerKeyPressOffTime(uint8_t opt) = 0;
|
||||
|
||||
/**
|
||||
* @brief Get PEKEY press power off time
|
||||
* @retval View the related chip type xpowers_press_off_time_t enumeration
|
||||
* parameters in "XPowersParams.hpp"
|
||||
*/
|
||||
virtual uint8_t getPowerKeyPressOffTime() = 0;
|
||||
|
||||
/**
|
||||
* @brief Get the chip model
|
||||
* @retval See XPowersChipModel_t enumeration
|
||||
*/
|
||||
uint8_t getChipModel()
|
||||
{
|
||||
return __chipModel;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
void setChipModel(uint8_t m)
|
||||
{
|
||||
__chipModel = m;
|
||||
}
|
||||
|
||||
uint8_t __chipModel;
|
||||
uint32_t __protectedMask;
|
||||
|
||||
};
|
||||
|
||||
399
buildroot/package/axp2101/src/XPowersLib/XPowersParams.hpp
Normal file
399
buildroot/package/axp2101/src/XPowersLib/XPowersParams.hpp
Normal file
@@ -0,0 +1,399 @@
|
||||
/**
|
||||
*
|
||||
* @license MIT License
|
||||
*
|
||||
* Copyright (c) 2022 lewis he
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* @file XPowersParams.hpp
|
||||
* @author Lewis He (lewishe@outlook.com)
|
||||
* @date 2022-08-28
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef _BV
|
||||
#undef _BV
|
||||
#endif
|
||||
#define _BV(b) (1ULL << (uint64_t)(b))
|
||||
|
||||
|
||||
//TODO:Unified interface functions and parameters
|
||||
|
||||
/**
|
||||
* @brief PMU PEKEY Press off time parameters.
|
||||
*/
|
||||
typedef enum __xpowers_press_off_time {
|
||||
XPOWERS_POWEROFF_4S,
|
||||
XPOWERS_POWEROFF_6S,
|
||||
XPOWERS_POWEROFF_8S,
|
||||
XPOWERS_POWEROFF_10S,
|
||||
} xpowers_press_off_time_t;
|
||||
|
||||
/**
|
||||
* @brief PMU PEKEY Press on time parameters.
|
||||
*/
|
||||
typedef enum __xpowers_press_on_time {
|
||||
XPOWERS_POWERON_128MS,
|
||||
XPOWERS_POWERON_512MS,
|
||||
XPOWERS_POWERON_1S,
|
||||
XPOWERS_POWERON_2S,
|
||||
} xpowers_press_on_time_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Charging led mode parameters.
|
||||
*/
|
||||
typedef enum __xpowers_chg_led_mode {
|
||||
XPOWERS_CHG_LED_OFF,
|
||||
XPOWERS_CHG_LED_BLINK_1HZ,
|
||||
XPOWERS_CHG_LED_BLINK_4HZ,
|
||||
XPOWERS_CHG_LED_ON,
|
||||
XPOWERS_CHG_LED_CTRL_CHG, // The charging indicator is controlled by the charger
|
||||
} xpowers_chg_led_mode_t;
|
||||
|
||||
/**
|
||||
* @brief axp2101 charge target voltage parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp2101_chg_vol {
|
||||
XPOWERS_AXP2101_CHG_VOL_4V = 1,
|
||||
XPOWERS_AXP2101_CHG_VOL_4V1,
|
||||
XPOWERS_AXP2101_CHG_VOL_4V2,
|
||||
XPOWERS_AXP2101_CHG_VOL_4V35,
|
||||
XPOWERS_AXP2101_CHG_VOL_4V4,
|
||||
XPOWERS_AXP2101_CHG_VOL_MAX
|
||||
} xpowers_axp2101_chg_vol_t;
|
||||
|
||||
/**
|
||||
* @brief axp2101 charge currnet voltage parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp2101_chg_curr {
|
||||
XPOWERS_AXP2101_CHG_CUR_0MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_100MA = 4,
|
||||
XPOWERS_AXP2101_CHG_CUR_125MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_150MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_175MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_200MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_300MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_400MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_500MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_600MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_700MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_800MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_900MA,
|
||||
XPOWERS_AXP2101_CHG_CUR_1000MA,
|
||||
} xpowers_axp2101_chg_curr_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief axp192 charge target voltage parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp192_chg_vol {
|
||||
XPOWERS_AXP192_CHG_VOL_4V1,
|
||||
XPOWERS_AXP192_CHG_VOL_4V15,
|
||||
XPOWERS_AXP192_CHG_VOL_4V2,
|
||||
XPOWERS_AXP192_CHG_VOL_4V36,
|
||||
XPOWERS_AXP192_CHG_VOL_MAX,
|
||||
} xpowers_axp192_chg_vol_t;
|
||||
|
||||
/**
|
||||
* @brief axp202 charge target voltage parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp202_chg_vol {
|
||||
XPOWERS_AXP202_CHG_VOL_4V1,
|
||||
XPOWERS_AXP202_CHG_VOL_4V15,
|
||||
XPOWERS_AXP202_CHG_VOL_4V2,
|
||||
XPOWERS_AXP202_CHG_VOL_4V36,
|
||||
XPOWERS_AXP202_CHG_VOL_MAX,
|
||||
} xpowers_axp202_chg_vol_t;
|
||||
|
||||
/**
|
||||
* @brief axp192 charge currnet voltage parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp192_chg_curr {
|
||||
XPOWERS_AXP192_CHG_CUR_100MA,
|
||||
XPOWERS_AXP192_CHG_CUR_190MA,
|
||||
XPOWERS_AXP192_CHG_CUR_280MA,
|
||||
XPOWERS_AXP192_CHG_CUR_360MA,
|
||||
XPOWERS_AXP192_CHG_CUR_450MA,
|
||||
XPOWERS_AXP192_CHG_CUR_550MA,
|
||||
XPOWERS_AXP192_CHG_CUR_630MA,
|
||||
XPOWERS_AXP192_CHG_CUR_700MA,
|
||||
XPOWERS_AXP192_CHG_CUR_780MA,
|
||||
XPOWERS_AXP192_CHG_CUR_880MA,
|
||||
XPOWERS_AXP192_CHG_CUR_960MA,
|
||||
XPOWERS_AXP192_CHG_CUR_1000MA,
|
||||
XPOWERS_AXP192_CHG_CUR_1080MA,
|
||||
XPOWERS_AXP192_CHG_CUR_1160MA,
|
||||
XPOWERS_AXP192_CHG_CUR_1240MA,
|
||||
XPOWERS_AXP192_CHG_CUR_1320MA,
|
||||
} xpowers_axp192_chg_curr_t;
|
||||
|
||||
/**
|
||||
* @brief axp202 charge currnet voltage parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp202_chg_curr {
|
||||
XPOWERS_AXP202_CHG_CUR_100MA,
|
||||
XPOWERS_AXP202_CHG_CUR_190MA,
|
||||
XPOWERS_AXP202_CHG_CUR_280MA,
|
||||
XPOWERS_AXP202_CHG_CUR_360MA,
|
||||
XPOWERS_AXP202_CHG_CUR_450MA,
|
||||
XPOWERS_AXP202_CHG_CUR_550MA,
|
||||
XPOWERS_AXP202_CHG_CUR_630MA,
|
||||
XPOWERS_AXP202_CHG_CUR_700MA,
|
||||
XPOWERS_AXP202_CHG_CUR_780MA,
|
||||
XPOWERS_AXP202_CHG_CUR_880MA,
|
||||
XPOWERS_AXP202_CHG_CUR_960MA,
|
||||
XPOWERS_AXP202_CHG_CUR_1000MA,
|
||||
XPOWERS_AXP202_CHG_CUR_1080MA,
|
||||
XPOWERS_AXP202_CHG_CUR_1160MA,
|
||||
XPOWERS_AXP202_CHG_CUR_1240MA,
|
||||
XPOWERS_AXP202_CHG_CUR_1320MA,
|
||||
} xpowers_axp202_chg_curr_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief axp2101 vbus currnet limit parameters.
|
||||
*/
|
||||
typedef enum {
|
||||
XPOWERS_AXP2101_VBUS_CUR_LIM_100MA,
|
||||
XPOWERS_AXP2101_VBUS_CUR_LIM_500MA,
|
||||
XPOWERS_AXP2101_VBUS_CUR_LIM_900MA,
|
||||
XPOWERS_AXP2101_VBUS_CUR_LIM_1000MA,
|
||||
XPOWERS_AXP2101_VBUS_CUR_LIM_1500MA,
|
||||
XPOWERS_AXP2101_VBUS_CUR_LIM_2000MA,
|
||||
} xpowers_axp2101_vbus_cur_limit_t;
|
||||
|
||||
/**
|
||||
* @brief axp192 vbus currnet limit parameters.
|
||||
*/
|
||||
typedef enum {
|
||||
XPOWERS_AXP192_VBUS_CUR_LIM_500MA,
|
||||
XPOWERS_AXP192_VBUS_CUR_LIM_100MA,
|
||||
XPOWERS_AXP192_VBUS_CUR_LIM_OFF,
|
||||
} xpowers_axp192_vbus_cur_limit_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief axp202 vbus currnet limit parameters.
|
||||
*/
|
||||
typedef enum {
|
||||
XPOWERS_AXP202_VBUS_CUR_LIM_900MA,
|
||||
XPOWERS_AXP202_VBUS_CUR_LIM_500MA,
|
||||
XPOWERS_AXP202_VBUS_CUR_LIM_100MA,
|
||||
XPOWERS_AXP202_VBUS_CUR_LIM_OFF,
|
||||
} xpowers_axp202_vbus_cur_limit_t;
|
||||
|
||||
/**
|
||||
* @brief XPowersLibInterface interrupt control mask parameters.
|
||||
* Common interrupt interfaces
|
||||
* @Example: enableInterrupt(XPOWERS_USB_INSERT_INT|XPOWERS_USB_REMOVE_INT);
|
||||
* disableInterrupt(XPOWERS_CHARGE_START_INT|XPOWERS_PWR_BTN_CLICK_INT);
|
||||
*/
|
||||
typedef enum __xpowers_interrupt_enum {
|
||||
XPOWERS_USB_INSERT_INT = _BV(0),
|
||||
XPOWERS_USB_REMOVE_INT = _BV(1),
|
||||
XPOWERS_BATTERY_INSERT_INT = _BV(2),
|
||||
XPOWERS_BATTERY_REMOVE_INT = _BV(3),
|
||||
XPOWERS_CHARGE_START_INT = _BV(4),
|
||||
XPOWERS_CHARGE_DONE_INT = _BV(5),
|
||||
XPOWERS_PWR_BTN_CLICK_INT = _BV(6),
|
||||
XPOWERS_PWR_BTN_LONGPRESSED_INT = _BV(7),
|
||||
XPOWERS_ALL_INT = _BV(8),
|
||||
} xpowers_interrupt_enum_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief axp192 interrupt control mask parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp192_irq {
|
||||
//! IRQ1 REG 40H
|
||||
XPOWERS_AXP192_VBUS_VHOLD_LOW_IRQ = _BV(1), //VBUS is available, but lower than V HOLD, IRQ enable
|
||||
XPOWERS_AXP192_VBUS_REMOVE_IRQ = _BV(2), //VBUS removed, IRQ enable
|
||||
XPOWERS_AXP192_VBUS_INSERT_IRQ = _BV(3), //VBUS connected, IRQ enable
|
||||
XPOWERS_AXP192_VBUS_OVER_VOL_IRQ = _BV(4), //VBUS over-voltage, IRQ enable
|
||||
XPOWERS_AXP192_ACIN_REMOVED_IRQ = _BV(5), //ACIN removed, IRQ enable
|
||||
XPOWERS_AXP192_ACIN_CONNECT_IRQ = _BV(6), //ACIN connected, IRQ enable
|
||||
XPOWERS_AXP192_ACIN_OVER_VOL_IRQ = _BV(7), //ACIN over-voltage, IRQ enable
|
||||
|
||||
//! IRQ2 REG 41H
|
||||
XPOWERS_AXP192_BATT_LOW_TEMP_IRQ = _BV(8), //Battery low-temperature, IRQ enable
|
||||
XPOWERS_AXP192_BATT_OVER_TEMP_IRQ = _BV(9), //Battery over-temperature, IRQ enable
|
||||
XPOWERS_AXP192_BAT_CHG_DONE_IRQ = _BV(10), //Charge finished, IRQ enable
|
||||
XPOWERS_AXP192_BAT_CHG_START_IRQ = _BV(11), //Be charging, IRQ enable
|
||||
XPOWERS_AXP192_BATT_EXIT_ACTIVATE_IRQ = _BV(12), //Exit battery activate mode, IRQ enable
|
||||
XPOWERS_AXP192_BATT_ACTIVATE_IRQ = _BV(13), //Battery activate mode, IRQ enable
|
||||
XPOWERS_AXP192_BAT_REMOVE_IRQ = _BV(14), //Battery removed, IRQ enable
|
||||
XPOWERS_AXP192_BAT_INSERT_IRQ = _BV(15), //Battery connected, IRQ enable
|
||||
|
||||
//! IRQ3 REG 42H
|
||||
XPOWERS_AXP192_PKEY_LONG_IRQ = _BV(16), //PEK long press, IRQ enable
|
||||
XPOWERS_AXP192_PKEY_SHORT_IRQ = _BV(17), //PEK short press, IRQ enable
|
||||
//**Reserved and unchangeable BIT 2
|
||||
XPOWERS_AXP192_DC3_LOW_VOL_IRQ = _BV(19), //DC-DC3output voltage is lower than the set value, IRQ enable
|
||||
XPOWERS_AXP192_DC2_LOW_VOL_IRQ = _BV(20), //DC-DC2 output voltage is lower than the set value, IRQ enable
|
||||
XPOWERS_AXP192_DC1_LOW_VOL_IRQ = _BV(21), //DC-DC1 output voltage is lower than the set value, IRQ enable
|
||||
XPOWERS_AXP192_CHARGE_LOW_CUR_IRQ = _BV(22), //Charge current is lower than the set current, IRQ enable
|
||||
XPOWERS_AXP192_CHIP_TEMP_HIGH_IRQ = _BV(23), //XPOWERS internal over-temperature, IRQ enable
|
||||
|
||||
//! IRQ4 REG 43H
|
||||
XPOWERS_AXP192_APS_LOW_VOL_LEVEL_IRQ = _BV(24), //APS low-voltage, IRQ enable
|
||||
//**Reserved and unchangeable BIT 1
|
||||
XPOWERS_AXP192_VBUS_SESSION_END_IRQ = _BV(26), //VBUS Session End IRQ enable
|
||||
XPOWERS_AXP192_VBUS_SESSION_AB_IRQ = _BV(27), //VBUS Session A/B IRQ enable
|
||||
XPOWERS_AXP192_VBUS_INVALID_IRQ = _BV(28), //VBUS invalid, IRQ enable
|
||||
XPOWERS_AXP192_VBUS_VAILD_IRQ = _BV(29), //VBUS valid, IRQ enable
|
||||
XPOWERS_AXP192_NOE_OFF_IRQ = _BV(30), //N_OE shutdown, IRQ enable
|
||||
XPOWERS_AXP192_NOE_ON_IRQ = _BV(31), //N_OE startup, IRQ enable
|
||||
|
||||
//! IRQ5 REG 4AH
|
||||
XPOWERS_AXP192_GPIO0_EDGE_TRIGGER_IRQ = _BV(32), //GPIO0 input edge trigger, IRQ enable
|
||||
XPOWERS_AXP192_GPIO1_EDGE_TRIGGER_IRQ = _BV(33), //GPIO1input edge trigger or ADC input, IRQ enable
|
||||
XPOWERS_AXP192_GPIO2_EDGE_TRIGGER_IRQ = _BV(34), //GPIO2input edge trigger, IRQ enable
|
||||
//**Reserved and unchangeable BIT 3
|
||||
//**Reserved and unchangeable BIT 4
|
||||
//**Reserved and unchangeable BIT 5
|
||||
//**Reserved and unchangeable BIT 6
|
||||
XPOWERS_AXP192_TIMER_TIMEOUT_IRQ = _BV(39), //Timer timeout, IRQ enable
|
||||
|
||||
XPOWERS_AXP192_ALL_IRQ = (0xFFFFFFFFFFULL)
|
||||
} xpowers_axp192_irq_t;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief axp2101 interrupt control mask parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp2101_irq {
|
||||
//! IRQ1 REG 40H
|
||||
XPOWERS_AXP2101_BAT_NOR_UNDER_TEMP_IRQ = _BV(0), // Battery Under Temperature in Work
|
||||
XPOWERS_AXP2101_BAT_NOR_OVER_TEMP_IRQ = _BV(1), // Battery Over Temperature in Work mode
|
||||
XPOWERS_AXP2101_BAT_CHG_UNDER_TEMP_IRQ = _BV(2), // Battery Under Temperature in Charge mode IRQ(bcut_irq)
|
||||
XPOWERS_AXP2101_BAT_CHG_OVER_TEMP_IRQ = _BV(3), // Battery Over Temperature in Charge mode IRQ(bcot_irq) enable
|
||||
XPOWERS_AXP2101_GAUGE_NEW_SOC_IRQ = _BV(4), // Gauge New SOC IRQ(lowsoc_irq) enable ???
|
||||
XPOWERS_AXP2101_WDT_TIMEOUT_IRQ = _BV(5), // Gauge Watchdog Timeout IRQ(gwdt_irq) enable
|
||||
XPOWERS_AXP2101_WARNING_LEVEL1_IRQ = _BV(6), // SOC drop to Warning Level1 IRQ(socwl1_irq) enable
|
||||
XPOWERS_AXP2101_WARNING_LEVEL2_IRQ = _BV(7), // SOC drop to Warning Level2 IRQ(socwl2_irq) enable
|
||||
|
||||
//! IRQ2 REG 41H
|
||||
XPOWERS_AXP2101_PKEY_POSITIVE_IRQ = _BV(8), // POWERON Positive Edge IRQ(ponpe_irq_en) enable
|
||||
XPOWERS_AXP2101_PKEY_NEGATIVE_IRQ = _BV(9), // POWERON Negative Edge IRQ(ponne_irq_en) enable
|
||||
XPOWERS_AXP2101_PKEY_LONG_IRQ = _BV(10), // POWERON Long PRESS IRQ(ponlp_irq) enable
|
||||
XPOWERS_AXP2101_PKEY_SHORT_IRQ = _BV(11), // POWERON Short PRESS IRQ(ponsp_irq_en) enable
|
||||
XPOWERS_AXP2101_BAT_REMOVE_IRQ = _BV(12), // Battery Remove IRQ(bremove_irq) enable
|
||||
XPOWERS_AXP2101_BAT_INSERT_IRQ = _BV(13), // Battery Insert IRQ(binsert_irq) enabl
|
||||
XPOWERS_AXP2101_VBUS_REMOVE_IRQ = _BV(14), // VBUS Remove IRQ(vremove_irq) enabl
|
||||
XPOWERS_AXP2101_VBUS_INSERT_IRQ = _BV(15), // VBUS Insert IRQ(vinsert_irq) enable
|
||||
|
||||
//! IRQ3 REG 42H
|
||||
XPOWERS_AXP2101_BAT_OVER_VOL_IRQ = _BV(16), // Battery Over Voltage Protection IRQ(bovp_irq) enable
|
||||
XPOWERS_AXP2101_CHAGER_TIMER_IRQ = _BV(17), // Charger Safety Timer1/2 expire IRQ(chgte_irq) enable
|
||||
XPOWERS_AXP2101_DIE_OVER_TEMP_IRQ = _BV(18), // DIE Over Temperature level1 IRQ(dotl1_irq) enable
|
||||
XPOWERS_AXP2101_BAT_CHG_START_IRQ = _BV(19), // Charger start IRQ(chgst_irq) enable
|
||||
XPOWERS_AXP2101_BAT_CHG_DONE_IRQ = _BV(20), // Battery charge done IRQ(chgdn_irq) enable
|
||||
XPOWERS_AXP2101_BATFET_OVER_CURR_IRQ = _BV(21), // BATFET Over Current Protection IRQ(bocp_irq) enable
|
||||
XPOWERS_AXP2101_LDO_OVER_CURR_IRQ = _BV(22), // LDO Over Current IRQ(ldooc_irq) enable
|
||||
XPOWERS_AXP2101_WDT_EXPIRE_IRQ = _BV(23), // Watchdog Expire IRQ(wdexp_irq) enable
|
||||
|
||||
XPOWERS_AXP2101_ALL_IRQ = (0xFFFFFFFFUL)
|
||||
} xpowers_axp2101_irq_t;
|
||||
|
||||
|
||||
/**
|
||||
* @brief axp202 interrupt control mask parameters.
|
||||
*/
|
||||
typedef enum __xpowers_axp202_irq {
|
||||
//! IRQ1 REG 40H
|
||||
XPOWERS_AXP202_VBUS_VHOLD_LOW_IRQ = _BV(1), //VBUS is available, but lower than V HOLD, IRQ enable
|
||||
XPOWERS_AXP202_VBUS_REMOVE_IRQ = _BV(2), //VBUS removed, IRQ enable
|
||||
XPOWERS_AXP202_VBUS_INSERT_IRQ = _BV(3), //VBUS connected, IRQ enable
|
||||
XPOWERS_AXP202_VBUS_OVER_VOL_IRQ = _BV(4), //VBUS over-voltage, IRQ enable
|
||||
XPOWERS_AXP202_ACIN_REMOVED_IRQ = _BV(5), //ACIN removed, IRQ enable
|
||||
XPOWERS_AXP202_ACIN_CONNECT_IRQ = _BV(6), //ACIN connected, IRQ enable
|
||||
XPOWERS_AXP202_ACIN_OVER_VOL_IRQ = _BV(7), //ACIN over-voltage, IRQ enable
|
||||
|
||||
//! IRQ2 REG 41H
|
||||
XPOWERS_AXP202_BATT_LOW_TEMP_IRQ = _BV(8), //Battery low-temperature, IRQ enable
|
||||
XPOWERS_AXP202_BATT_OVER_TEMP_IRQ = _BV(9), //Battery over-temperature, IRQ enable
|
||||
XPOWERS_AXP202_BAT_CHG_DONE_IRQ = _BV(10), //Charge finished, IRQ enable
|
||||
XPOWERS_AXP202_BAT_CHG_START_IRQ = _BV(11), //Be charging, IRQ enable
|
||||
XPOWERS_AXP202_BATT_EXIT_ACTIVATE_IRQ = _BV(12), //Exit battery activate mode, IRQ enable
|
||||
XPOWERS_AXP202_BATT_ACTIVATE_IRQ = _BV(13), //Battery activate mode, IRQ enable
|
||||
XPOWERS_AXP202_BAT_REMOVE_IRQ = _BV(14), //Battery removed, IRQ enable
|
||||
XPOWERS_AXP202_BAT_INSERT_IRQ = _BV(15), //Battery connected, IRQ enable
|
||||
|
||||
//! IRQ3 REG 42H
|
||||
XPOWERS_AXP202_PKEY_LONG_IRQ = _BV(16), //PEK long press, IRQ enable
|
||||
XPOWERS_AXP202_PKEY_SHORT_IRQ = _BV(17), //PEK short press, IRQ enable
|
||||
XPOWERS_AXP202_LDO3_LOW_VOL_IRQ = _BV(18), //LDO3output voltage is lower than the set value, IRQ enable
|
||||
XPOWERS_AXP202_DC3_LOW_VOL_IRQ = _BV(19), //DC-DC3output voltage is lower than the set value, IRQ enable
|
||||
XPOWERS_AXP202_DC2_LOW_VOL_IRQ = _BV(20), //DC-DC2 output voltage is lower than the set value, IRQ enable
|
||||
//**Reserved and unchangeable BIT 5
|
||||
XPOWERS_AXP202_CHARGE_LOW_CUR_IRQ = _BV(22), //Charge current is lower than the set current, IRQ enable
|
||||
XPOWERS_AXP202_CHIP_TEMP_HIGH_IRQ = _BV(23), //AXP202 internal over-temperature, IRQ enable
|
||||
|
||||
//! IRQ4 REG 43H
|
||||
XPOWERS_AXP202_APS_LOW_VOL_LEVEL2_IRQ = _BV(24), //APS low-voltage, IRQ enable(LEVEL2)
|
||||
XPOWERS_APX202_APS_LOW_VOL_LEVEL1_IRQ = _BV(25), //APS low-voltage, IRQ enable(LEVEL1)
|
||||
XPOWERS_AXP202_VBUS_SESSION_END_IRQ = _BV(26), //VBUS Session End IRQ enable
|
||||
XPOWERS_AXP202_VBUS_SESSION_AB_IRQ = _BV(27), //VBUS Session A/B IRQ enable
|
||||
XPOWERS_AXP202_VBUS_INVALID_IRQ = _BV(28), //VBUS invalid, IRQ enable
|
||||
XPOWERS_AXP202_VBUS_VAILD_IRQ = _BV(29), //VBUS valid, IRQ enable
|
||||
XPOWERS_AXP202_NOE_OFF_IRQ = _BV(30), //N_OE shutdown, IRQ enable
|
||||
XPOWERS_AXP202_NOE_ON_IRQ = _BV(31), //N_OE startup, IRQ enable
|
||||
|
||||
//! IRQ5 REG 44H
|
||||
XPOWERS_AXP202_GPIO0_EDGE_TRIGGER_IRQ = _BV(32), //GPIO0 input edge trigger, IRQ enable
|
||||
XPOWERS_AXP202_GPIO1_EDGE_TRIGGER_IRQ = _BV(33), //GPIO1input edge trigger or ADC input, IRQ enable
|
||||
XPOWERS_AXP202_GPIO2_EDGE_TRIGGER_IRQ = _BV(34), //GPIO2input edge trigger, IRQ enable
|
||||
XPOWERS_AXP202_GPIO3_EDGE_TRIGGER_IRQ = _BV(35), //GPIO3 input edge trigger, IRQ enable
|
||||
//**Reserved and unchangeable BIT 4
|
||||
XPOWERS_AXP202_PKEY_NEGATIVE_IRQ = _BV(37), //PEK press falling edge, IRQ enable
|
||||
XPOWERS_AXP202_PKEY_POSITIVE_IRQ = _BV(38), //PEK press rising edge, IRQ enable
|
||||
XPOWERS_AXP202_TIMER_TIMEOUT_IRQ = _BV(39), //Timer timeout, IRQ enable
|
||||
|
||||
XPOWERS_AXP202_ALL_IRQ = (0xFFFFFFFFFFULL)
|
||||
} xpowers_axp202_irq_t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
3
buildroot/package/axp2101/src/include/main.h
Normal file
3
buildroot/package/axp2101/src/include/main.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
326
buildroot/package/axp2101/src/src/main.cpp
Normal file
326
buildroot/package/axp2101/src/src/main.cpp
Normal file
@@ -0,0 +1,326 @@
|
||||
#include "main.h"
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/i2c-dev.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <poll.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "XPowersLib.h"
|
||||
|
||||
#define I2C_BUS (4)
|
||||
#define AXP2101_SLAVE_ADDRESS (0x34)
|
||||
#define APP_VERSION "1.1.0"
|
||||
|
||||
int i2c_dev = -1;
|
||||
XPowersLibInterface *PMU = NULL;
|
||||
|
||||
static int linux_i2c_read_callback(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint8_t len);
|
||||
static int linux_i2c_write_callback(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint8_t len);
|
||||
static void printPMU();
|
||||
|
||||
static int open_i2c_bus(int bus)
|
||||
{
|
||||
char filename[20];
|
||||
snprintf(filename, 19, "/dev/i2c-%d", bus);
|
||||
int file = open(filename, O_RDWR);
|
||||
if (file < 0) {
|
||||
perror("PMU: Failed to open the i2c bus");
|
||||
}
|
||||
return file;
|
||||
}
|
||||
|
||||
static int set_i2c_slave(int file, int addr)
|
||||
{
|
||||
if (ioctl(file, I2C_SLAVE, addr) < 0) {
|
||||
perror("PMU: Failed to acquire bus access and/or talk to slave");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
bool log_enabled = false;
|
||||
bool version_enabled = false;
|
||||
|
||||
printf("PMU: Init axp2101 pmu\n");
|
||||
|
||||
i2c_dev = open_i2c_bus(I2C_BUS);
|
||||
if (i2c_dev < 0) {
|
||||
printf("PMU: Open i2c bus error\n");
|
||||
return -1;
|
||||
} else {
|
||||
printf("PMU: Open i2c bus success\n");
|
||||
}
|
||||
|
||||
if (set_i2c_slave(i2c_dev, AXP2101_SLAVE_ADDRESS) < 0) {
|
||||
close(i2c_dev);
|
||||
printf("PMU: Set i2c slave error\n");
|
||||
return 1;
|
||||
} else {
|
||||
printf("PMU: Set i2c slave success\n");
|
||||
}
|
||||
|
||||
if (!PMU) {
|
||||
if (ioctl(i2c_dev, I2C_SLAVE, AXP2101_SLAVE_ADDRESS) < 0) {
|
||||
printf("PMU: Failed to access bus.\n");
|
||||
exit(1);
|
||||
}
|
||||
PMU = new XPowersAXP2101(AXP2101_SLAVE_ADDRESS, linux_i2c_read_callback, linux_i2c_write_callback);
|
||||
if (!PMU->init()) {
|
||||
printf("PMU: Failed to find AXP2101 power management\n");
|
||||
delete PMU;
|
||||
PMU = NULL;
|
||||
} else {
|
||||
printf("PMU: AXP2101 PMU init succeeded, using AXP2101 PMU\n");
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
std::string arg = argv[i];
|
||||
if (arg == "--log" || arg == "-l") {
|
||||
log_enabled = true;
|
||||
} else if (arg == "--version" || arg == "-v") {
|
||||
version_enabled = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (version_enabled) {
|
||||
std::cout << "version: " << APP_VERSION << std::endl;
|
||||
if (PMU != nullptr) {
|
||||
delete PMU;
|
||||
PMU = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (log_enabled) {
|
||||
std::cout << "=======================================================================\n";
|
||||
|
||||
if (PMU->isChannelAvailable(XPOWERS_DCDC1)) {
|
||||
std::cout << "DC1 : " << (PMU->isPowerChannelEnable(XPOWERS_DCDC1) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DCDC1) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_DCDC2)) {
|
||||
std::cout << "DC2 : " << (PMU->isPowerChannelEnable(XPOWERS_DCDC2) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DCDC2) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_DCDC3)) {
|
||||
std::cout << "DC3 : " << (PMU->isPowerChannelEnable(XPOWERS_DCDC3) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DCDC3) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_DCDC4)) {
|
||||
std::cout << "DC4 : " << (PMU->isPowerChannelEnable(XPOWERS_DCDC4) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DCDC4) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_DCDC5)) {
|
||||
std::cout << "DC5 : " << (PMU->isPowerChannelEnable(XPOWERS_DCDC5) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DCDC5) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_ALDO1)) {
|
||||
std::cout << "ALDO1: " << (PMU->isPowerChannelEnable(XPOWERS_ALDO1) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_ALDO1) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_ALDO2)) {
|
||||
std::cout << "ALDO2: " << (PMU->isPowerChannelEnable(XPOWERS_ALDO2) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_ALDO2) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_ALDO3)) {
|
||||
std::cout << "ALDO3: " << (PMU->isPowerChannelEnable(XPOWERS_ALDO3) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_ALDO3) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_ALDO4)) {
|
||||
std::cout << "ALDO4: " << (PMU->isPowerChannelEnable(XPOWERS_ALDO4) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_ALDO4) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_BLDO1)) {
|
||||
std::cout << "BLDO1: " << (PMU->isPowerChannelEnable(XPOWERS_BLDO1) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_BLDO1) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_BLDO2)) {
|
||||
std::cout << "BLDO2: " << (PMU->isPowerChannelEnable(XPOWERS_BLDO2) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_BLDO2) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_DLDO1)) {
|
||||
std::cout << "DLDO1: " << (PMU->isPowerChannelEnable(XPOWERS_DLDO1) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DLDO1) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_DLDO2)) {
|
||||
std::cout << "DLDO2: " << (PMU->isPowerChannelEnable(XPOWERS_DLDO2) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_DLDO2) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_CPULDO)) {
|
||||
std::cout << "CPUSLDO: " << (PMU->isPowerChannelEnable(XPOWERS_CPULDO) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_CPULDO) << " mV \n";
|
||||
}
|
||||
if (PMU->isChannelAvailable(XPOWERS_VBACKUP)) {
|
||||
std::cout << "VBACKUP: " << (PMU->isPowerChannelEnable(XPOWERS_VBACKUP) ? "+" : "-")
|
||||
<< " Voltage:" << PMU->getPowerChannelVoltage(XPOWERS_VBACKUP) << " mV \n";
|
||||
}
|
||||
|
||||
std::cout << "=======================================================================\n";
|
||||
|
||||
printPMU();
|
||||
|
||||
if (PMU != nullptr) {
|
||||
delete PMU;
|
||||
PMU = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
PMU->setVbusVoltageLimit(XPOWERS_AXP2101_VBUS_VOL_LIM_3V88);
|
||||
PMU->setVbusCurrentLimit(XPOWERS_AXP2101_VBUS_CUR_LIM_2000MA);
|
||||
PMU->setSysPowerDownVoltage(2600);
|
||||
|
||||
// DCDC1 --> VDD3V3_SYS
|
||||
PMU->setPowerChannelVoltage(XPOWERS_DCDC1, 3300);
|
||||
PMU->enablePowerOutput(XPOWERS_DCDC1);
|
||||
|
||||
// DCDC2 --> Disable
|
||||
PMU->disablePowerOutput(XPOWERS_DCDC2);
|
||||
|
||||
// DCDC3 --> VDD0V9_CPU
|
||||
PMU->setPowerChannelVoltage(XPOWERS_DCDC3, 1000);
|
||||
PMU->enablePowerOutput(XPOWERS_DCDC3);
|
||||
|
||||
// DCDC4 --> VDD1V35_DRAM
|
||||
PMU->setPowerChannelVoltage(XPOWERS_DCDC4, 1400);
|
||||
PMU->enablePowerOutput(XPOWERS_DCDC4);
|
||||
|
||||
// DCDC5 --> Disable
|
||||
PMU->disablePowerOutput(XPOWERS_DCDC5);
|
||||
|
||||
// ALDO1 --> VDD1V8_SYS
|
||||
PMU->setPowerChannelVoltage(XPOWERS_ALDO1, 1800);
|
||||
PMU->enablePowerOutput(XPOWERS_ALDO1);
|
||||
|
||||
// ALDO2 ~ ALDO4 --> Disable
|
||||
PMU->disablePowerOutput(XPOWERS_ALDO2);
|
||||
PMU->disablePowerOutput(XPOWERS_ALDO3);
|
||||
PMU->disablePowerOutput(XPOWERS_ALDO4);
|
||||
|
||||
// BLDO1 ~ BLDO2 --> Disable
|
||||
PMU->disablePowerOutput(XPOWERS_BLDO1);
|
||||
PMU->disablePowerOutput(XPOWERS_BLDO2);
|
||||
|
||||
// DLDO1 ~ DLDO2 --> Disable
|
||||
PMU->disablePowerOutput(XPOWERS_DLDO1);
|
||||
PMU->disablePowerOutput(XPOWERS_DLDO2);
|
||||
|
||||
// CPUSLDO --> Disable
|
||||
PMU->disablePowerOutput(XPOWERS_CPULDO);
|
||||
|
||||
// VBACKUP
|
||||
PMU->setPowerChannelVoltage(XPOWERS_VBACKUP, 3100);
|
||||
PMU->enablePowerOutput(XPOWERS_VBACKUP);
|
||||
|
||||
PMU->disableIRQ(XPOWERS_AXP2101_ALL_IRQ);
|
||||
PMU->clearIrqStatus();
|
||||
|
||||
PMU->setLinearChargerVsysDpm(XPOWERS_AXP2101_VSYS_VOL_4V8);
|
||||
PMU->setPrechargeCurr(XPOWERS_AXP2101_PRECHARGE_200MA);
|
||||
PMU->setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_1000MA);
|
||||
PMU->setChargeTargetVoltage(XPOWERS_AXP2101_CHG_VOL_4V2);
|
||||
PMU->disableChargerTerminationLimit();
|
||||
PMU->setChargingLedMode(XPOWERS_CHG_LED_OFF);
|
||||
PMU->enableCellbatteryCharge();
|
||||
|
||||
// Set the time of pressing the button to turn off
|
||||
PMU->setPowerKeyPressOffTime(XPOWERS_POWEROFF_4S);
|
||||
// Set the button power-on press time
|
||||
PMU->setPowerKeyPressOnTime(XPOWERS_POWERON_128MS);
|
||||
PMU->enableLongPressShutdown();
|
||||
PMU->enableIRQ(XPOWERS_AXP2101_PKEY_POSITIVE_IRQ);
|
||||
PMU->enableIRQ(XPOWERS_AXP2101_PKEY_NEGATIVE_IRQ);
|
||||
|
||||
PMU->disableTSPinMeasure();
|
||||
PMU->enableVbusVoltageMeasure();
|
||||
PMU->enableBattVoltageMeasure();
|
||||
PMU->enableSystemVoltageMeasure();
|
||||
PMU->enableBattDetection();
|
||||
|
||||
PMU -> fuelGaugeControl(true, true);
|
||||
|
||||
if (PMU != nullptr) {
|
||||
delete PMU;
|
||||
PMU = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int linux_i2c_read_callback(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint8_t len)
|
||||
{
|
||||
if (write(i2c_dev, ®Addr, 1) != 1) {
|
||||
perror("Failed to write to the i2c device");
|
||||
close(i2c_dev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (read(i2c_dev, data, len) != len) {
|
||||
perror("Failed to read from the i2c device");
|
||||
close(i2c_dev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int linux_i2c_write_callback(uint8_t devAddr, uint8_t regAddr, uint8_t *data, uint8_t len)
|
||||
{
|
||||
uint8_t buffer[len + 1];
|
||||
buffer[0] = regAddr;
|
||||
for (int i = 0; i < len; i++) {
|
||||
buffer[i + 1] = data[i];
|
||||
}
|
||||
|
||||
if (write(i2c_dev, buffer, len + 1) != len + 1) {
|
||||
perror("Failed to write to the i2c device");
|
||||
close(i2c_dev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void printPMU() {
|
||||
std::cout << "---------------------------------------------------------------------------------------------------------\n";
|
||||
std::cout << "CHARG DISC STBY VBUSIN VGOOD VBAT VBUS VSYS Percentage CHG_STATUS\n";
|
||||
std::cout << "(bool) (bool) (bool) (bool) (bool) (mV) (mV) (mV) (%%) (str) \n";
|
||||
std::cout << "---------------------------------------------------------------------------------------------------------\n";
|
||||
|
||||
std::cout << (PMU->isCharging() ? "YES" : "NO ") << "\t";
|
||||
std::cout << (PMU->isDischarge() ? "YES" : "NO ") << "\t";
|
||||
std::cout << (PMU->isStandby() ? "YES" : "NO ") << "\t";
|
||||
std::cout << (PMU->isVbusIn() ? "YES" : "NO ") << "\t";
|
||||
std::cout << (PMU->isVbusGood() ? "YES" : "NO ") << "\t";
|
||||
|
||||
std::cout << PMU->getBattVoltage() << "\t";
|
||||
std::cout << PMU->getVbusVoltage() << "\t";
|
||||
std::cout << PMU->getSystemVoltage() << "\t";
|
||||
|
||||
std::cout << PMU->getBatteryPercent() << "%\t";
|
||||
|
||||
uint8_t charge_status = PMU->getChargerStatus();
|
||||
if (charge_status == XPOWERS_AXP2101_CHG_TRI_STATE) {
|
||||
std::cout << "tri_charge";
|
||||
} else if (charge_status == XPOWERS_AXP2101_CHG_PRE_STATE) {
|
||||
std::cout << "pre_charge";
|
||||
} else if (charge_status == XPOWERS_AXP2101_CHG_CC_STATE) {
|
||||
std::cout << "constant charge(CC)";
|
||||
} else if (charge_status == XPOWERS_AXP2101_CHG_CV_STATE) {
|
||||
std::cout << "constant voltage(CV)";
|
||||
} else if (charge_status == XPOWERS_AXP2101_CHG_DONE_STATE) {
|
||||
std::cout << "charge done";
|
||||
} else if (charge_status == XPOWERS_AXP2101_CHG_STOP_STATE) {
|
||||
std::cout << "not charging";
|
||||
}
|
||||
|
||||
std::cout << "\n";
|
||||
}
|
||||
@@ -719,7 +719,7 @@ CONFIG_VOLUMEID=y
|
||||
# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
|
||||
# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
|
||||
CONFIG_FEATURE_VOLUMEID_EROFS=y
|
||||
# CONFIG_FEATURE_VOLUMEID_EXFAT is not set
|
||||
CONFIG_FEATURE_VOLUMEID_EXFAT
|
||||
# CONFIG_FEATURE_VOLUMEID_EXT is not set
|
||||
# CONFIG_FEATURE_VOLUMEID_F2FS is not set
|
||||
# CONFIG_FEATURE_VOLUMEID_FAT is not set
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
################################################################################
|
||||
|
||||
LCDTEST_VERSION = 9dc8793ff0a6cdc973cf823af6447a79a4da6cac
|
||||
LCDTEST_VERSION = d6defe34015d64b70963e16ee0e1d274387ec060
|
||||
LCDTEST_SITE = $(call github,0x754C,lcdtest,$(LCDTEST_VERSION))
|
||||
|
||||
define LCDTEST_BUILD_CMDS
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# Locally calculated
|
||||
sha256 62f650467a60a38794d681ae7e66e3e8cfba38f445e0bf87867e2f2cdc8be9d5 opencv4-4.8.1.tar.gz
|
||||
sha256 ddf76f9dffd322c7c3cb1f721d0887f62d747b82059342213138dc190f28bc6c opencv4-4.9.0.tar.gz
|
||||
sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
################################################################################
|
||||
|
||||
OPENCV4_VERSION = 4.8.1
|
||||
OPENCV4_VERSION = 4.9.0
|
||||
OPENCV4_SITE = $(call github,opencv,opencv,$(OPENCV4_VERSION))
|
||||
OPENCV4_INSTALL_STAGING = YES
|
||||
OPENCV4_LICENSE = Apache-2.0
|
||||
@@ -44,6 +44,12 @@ ifeq ($(BR2_PACKAGE_OPENCV4_BUILD_TESTS)$(BR2_PACKAGE_OPENCV4_BUILD_PERF_TESTS),
|
||||
OPENCV4_CONF_OPTS += -DINSTALL_TEST=OFF
|
||||
else
|
||||
OPENCV4_CONF_OPTS += -DINSTALL_TEST=ON
|
||||
define OPENCV4_INSTALL_TESTBIN
|
||||
ls $(@D)/buildroot-build/bin
|
||||
mkdir -pv $(TARGET_DIR)/usr/bin/
|
||||
cp -vf $(@D)/buildroot-build/bin/* $(TARGET_DIR)/usr/bin/
|
||||
endef
|
||||
OPENCV4_POST_INSTALL_TARGET_HOOKS += OPENCV4_INSTALL_TESTBIN
|
||||
endif
|
||||
|
||||
# OpenCV build options
|
||||
|
||||
7
buildroot/package/python-pyqt5-sip/Config.in
Normal file
7
buildroot/package/python-pyqt5-sip/Config.in
Normal file
@@ -0,0 +1,7 @@
|
||||
config BR2_PACKAGE_PYTHON_PYQT5_SIP
|
||||
bool "python-pyqt5-sip"
|
||||
help
|
||||
This is the PyQt5.sip module which is needed at runtime for
|
||||
the PyQt5 module from package python-pyqt5.
|
||||
|
||||
https://pypi.org/project/PyQt5-sip/
|
||||
6
buildroot/package/python-pyqt5-sip/python-pyqt5-sip.hash
Normal file
6
buildroot/package/python-pyqt5-sip/python-pyqt5-sip.hash
Normal file
@@ -0,0 +1,6 @@
|
||||
# From https://pypi.org/pypi/PyQt5-sip/json
|
||||
md5 9e0909e79f40619b0f2d3d3c33b4d4f7 PyQt5_sip-12.15.0.tar.gz
|
||||
sha256 d23fdfcf363b5cedd9d39f8a9c5710e7d52804f5b08a58e91c638b36eafcb702 PyQt5_sip-12.15.0.tar.gz
|
||||
|
||||
# Locally calculated
|
||||
sha256 3859cfca971e429d6b79bdfeb1dc9e43aa9592f7295bf28fdd62824097909383 LICENSE
|
||||
24
buildroot/package/python-pyqt5-sip/python-pyqt5-sip.mk
Normal file
24
buildroot/package/python-pyqt5-sip/python-pyqt5-sip.mk
Normal file
@@ -0,0 +1,24 @@
|
||||
################################################################################
|
||||
#
|
||||
# python-sip-qt5
|
||||
#
|
||||
################################################################################
|
||||
|
||||
# Note about the package version:
|
||||
# This module version corresponds in fact to the "sip" ABI
|
||||
# version (not the version of its generator). See:
|
||||
# https://github.com/Python-SIP/sip/blob/6.8.6/sipbuild/module/source/12/sip.h.in#L43
|
||||
# The source git repository of this module is located at:
|
||||
# https://github.com/Python-SIP/sip/tree/main/sipbuild/module/source
|
||||
# The Python-SIP version/tag which generated a given "sip" module is
|
||||
# recorded in the PyPI source file "sip.h", in the SIP_VERSION_STR
|
||||
# macro. For example, PyQt5-sip 12.15.0 was generated with Python-SIP
|
||||
# 6.8.6.
|
||||
PYTHON_PYQT5_SIP_VERSION = 12.15.0
|
||||
PYTHON_PYQT5_SIP_SITE = https://files.pythonhosted.org/packages/1b/15/78318d50f10062c428e97e7ce387e772616a4673c356018b905f247a6a85
|
||||
PYTHON_PYQT5_SIP_SOURCE = PyQt5_sip-$(PYTHON_PYQT5_SIP_VERSION).tar.gz
|
||||
PYTHON_PYQT5_SIP_LICENSE = BSD-2-Clause
|
||||
PYTHON_PYQT5_SIP_LICENSE_FILES = LICENSE
|
||||
PYTHON_PYQT5_SIP_SETUP_TYPE = setuptools
|
||||
|
||||
$(eval $(python-package))
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
################################################################################
|
||||
|
||||
TPUDEMO_SG200X_VERSION = 345541b2f2a30e4efaa7505aa3b911826ec78505
|
||||
TPUDEMO_SG200X_VERSION = e50c97cbfc3f6018d674883a6a60bccd63bbf01d
|
||||
TPUDEMO_SG200X_SITE = $(call github,0x754C,tpudemo-sg200x,$(TPUDEMO_SG200X_VERSION))
|
||||
|
||||
define TPUDEMO_SG200X_INSTALL_TARGET_CMDS
|
||||
|
||||
@@ -25,6 +25,7 @@ class TestBmapTools(BRTest):
|
||||
BR2_PACKAGE_UTIL_LINUX=y
|
||||
BR2_PACKAGE_UTIL_LINUX_FALLOCATE=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_EXFATPROGS=y
|
||||
BR2_PACKAGE_UTIL_LINUX_LIBUUID=y
|
||||
""".format(infra.filepath(copy_script),
|
||||
infra.filepath(sample_script))
|
||||
|
||||
21
demo/tioccons.c
Normal file
21
demo/tioccons.c
Normal file
@@ -0,0 +1,21 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int fd;
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "usage: %s /dev/ttyX\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
fd = open(argv[1], O_RDWR);
|
||||
if (fd < 0) {
|
||||
perror("open");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
ioctl(fd, TIOCCONS);
|
||||
close(fd);
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
BIN
host/fuse2fs
Executable file
BIN
host/fuse2fs
Executable file
Binary file not shown.
44
host/make_logo.sh
Executable file
44
host/make_logo.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if the correct number of arguments is provided
|
||||
if [ "$#" -eq 2 ]; then
|
||||
# Get input and output file paths
|
||||
input_file="$1"
|
||||
output_file="$2"
|
||||
|
||||
# Use ffmpeg to convert the image to YUV420P format JPEG
|
||||
ffmpeg -i "$input_file" -pix_fmt yuvj420p "$output_file"
|
||||
elif [ "$#" -eq 4 ]; then
|
||||
# Get input and output file paths
|
||||
input_file="$1"
|
||||
output_file="$2"
|
||||
output_width="$3"
|
||||
output_height="$4"
|
||||
|
||||
# Use ffmpeg to convert the image to YUV420P format JPEG
|
||||
ffmpeg -i "$input_file" -vf "scale=$output_width:$output_height" -pix_fmt yuvj420p "$output_file"
|
||||
elif [ "$#" -eq 5 ]; then
|
||||
# Get input and output file paths
|
||||
input_file="$1"
|
||||
output_file="$2"
|
||||
output_width="$3"
|
||||
output_height="$4"
|
||||
transpose="$5"
|
||||
|
||||
# Use ffmpeg to convert the image to YUV420P format JPEG
|
||||
ffmpeg -i "$input_file" -vf "transpose=$transpose,scale=$output_width:$output_height" -pix_fmt yuvj420p "$output_file"
|
||||
else
|
||||
echo "Usage: $0 <input file path> <output file path> <output width> <output height> <transpose>"
|
||||
echo "example: $0 input.jpg logo.jpeg"
|
||||
echo "example: $0 input.jpg logo.jpeg 640 480"
|
||||
echo "example: $0 input.jpg logo.jpeg 640 480 3"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if the conversion was successful
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "The file has been successfully converted to YUV420P JPEG and saved to $output_file"
|
||||
else
|
||||
echo "Conversion failed. Please check the input file path and ensure ffmpeg is installed."
|
||||
exit 1
|
||||
fi
|
||||
26
host/mount_ext4.sh
Executable file
26
host/mount_ext4.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
THISDIR=$(dirname $(realpath $0))
|
||||
|
||||
if [ -z $2 ]
|
||||
then
|
||||
echo "usage: $0 image dir"
|
||||
fi
|
||||
|
||||
if [ ! -e $2 ]
|
||||
then
|
||||
mkdir -pv $2
|
||||
fi
|
||||
|
||||
set -eux
|
||||
|
||||
PART=2
|
||||
|
||||
PART_OFFSET=$(partx -s $1 | head -n 3 | tail -n 1 | awk '{print $2}')
|
||||
PART_OFFSET=$((PART_OFFSET * 512)) # sector size is 512
|
||||
|
||||
echo "PART: $PART"
|
||||
echo "PART OFFSET: $PART_OFFSET"
|
||||
|
||||
# some old version fuse2fs not support offset
|
||||
$THISDIR/fuse2fs -o fakeroot -o offset=$PART_OFFSET $1 $2
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/completion.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/i2c-algo-bit.h>
|
||||
#include <linux/i2c.h>
|
||||
@@ -18,6 +19,25 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#define DEBUG_LOG_TAG "[i2c gpio]"
|
||||
#define DEBUG_LOG(fmt, ...) printk(KERN_DEBUG DEBUG_LOG_TAG " " fmt, ##__VA_ARGS__)
|
||||
|
||||
static int delay_us = -1;
|
||||
volatile int udelay_value = 0;
|
||||
struct kobject *udelay_v;
|
||||
struct i2c_algo_bit_data *udelay_data = NULL;
|
||||
|
||||
static int sda = -1;
|
||||
static int scl = -1;
|
||||
|
||||
static bool insmod_gpio = false;
|
||||
|
||||
struct i2c_gpio_private_data {
|
||||
struct gpio_desc *sda;
|
||||
struct gpio_desc *scl;
|
||||
@@ -32,6 +52,49 @@ struct i2c_gpio_private_data {
|
||||
#endif
|
||||
};
|
||||
|
||||
static void show_freq(void)
|
||||
{
|
||||
switch(udelay_data->udelay) {
|
||||
case 0:
|
||||
DEBUG_LOG("Freq max ~ 750KHz for MaixCAM");
|
||||
break;
|
||||
case 1:
|
||||
DEBUG_LOG("Freq 500KHz ~ 308KHz for MaixCAM");
|
||||
break;
|
||||
case 2:
|
||||
DEBUG_LOG("Freq 250KHz");
|
||||
break;
|
||||
case 5:
|
||||
DEBUG_LOG("Freq 100KHz");
|
||||
break;
|
||||
default:
|
||||
DEBUG_LOG("Freq - Unknown");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t __udelay_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
// DEBUG_LOG("Read udelay value: %d\n", udelay_value);
|
||||
show_freq();
|
||||
udelay_value = udelay_data->udelay;
|
||||
return sprintf(buf, "%d", udelay_value);
|
||||
}
|
||||
|
||||
static ssize_t __udelay_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr,const char *buf, size_t count)
|
||||
{
|
||||
// int old_value = udelay_value;
|
||||
sscanf(buf,"%d",&udelay_value);
|
||||
udelay_data->udelay = udelay_value;
|
||||
// DEBUG_LOG("Write udelay value: %d --> %d\n", old_value, udelay_value);
|
||||
// show_freq();
|
||||
return count;
|
||||
}
|
||||
|
||||
struct kobj_attribute sysfs_test_attr = __ATTR(udelay_v, 0664, __udelay_show, __udelay_store);
|
||||
|
||||
/*
|
||||
* Toggle SDA by changing the output value of the pin. This is only
|
||||
* valid for pins configured as open drain (i.e. setting the value
|
||||
@@ -362,8 +425,10 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
struct i2c_adapter *adap;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
enum gpiod_flags gflags;
|
||||
enum gpiod_flags gflags_sda, gflags_scl;
|
||||
unsigned long gf_sda, gf_scl;
|
||||
int ret;
|
||||
struct device *curr_dev;
|
||||
|
||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
@@ -384,6 +449,9 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
memcpy(pdata, dev_get_platdata(dev), sizeof(*pdata));
|
||||
}
|
||||
|
||||
/* 508 SCL
|
||||
509 SDA */
|
||||
|
||||
/*
|
||||
* First get the GPIO pins; if it fails, we'll defer the probe.
|
||||
* If the SCL/SDA lines are marked "open drain" by platform data or
|
||||
@@ -392,21 +460,67 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
* handle them as we handle any other output. Else we enforce open
|
||||
* drain as this is required for an I2C bus.
|
||||
*/
|
||||
if (pdata->sda_is_open_drain)
|
||||
gflags = GPIOD_OUT_HIGH;
|
||||
else
|
||||
gflags = GPIOD_OUT_HIGH_OPEN_DRAIN;
|
||||
priv->sda = i2c_gpio_get_desc(dev, "sda", 0, gflags);
|
||||
if (IS_ERR(priv->sda))
|
||||
return PTR_ERR(priv->sda);
|
||||
if (sda >= 0 && scl >= 0) {
|
||||
DEBUG_LOG("used sda %d and scl %d without device tree\n", sda, scl);
|
||||
|
||||
if (pdata->scl_is_open_drain)
|
||||
gflags = GPIOD_OUT_HIGH;
|
||||
else
|
||||
gflags = GPIOD_OUT_HIGH_OPEN_DRAIN;
|
||||
priv->scl = i2c_gpio_get_desc(dev, "scl", 1, gflags);
|
||||
if (IS_ERR(priv->scl))
|
||||
return PTR_ERR(priv->scl);
|
||||
if (pdata->sda_is_open_drain) {
|
||||
gf_sda = GPIOF_OUT_INIT_HIGH;
|
||||
} else
|
||||
gf_sda = GPIOF_OUT_INIT_HIGH | GPIOF_OPEN_DRAIN;
|
||||
|
||||
if (pdata->scl_is_open_drain)
|
||||
gf_scl = GPIOF_OUT_INIT_HIGH;
|
||||
else
|
||||
gf_scl = GPIOF_OUT_INIT_HIGH | GPIOF_OPEN_DRAIN;
|
||||
|
||||
/* request sda */
|
||||
ret = gpio_request_one(sda, gf_sda, "sda");
|
||||
if (ret < 0) {
|
||||
DEBUG_LOG("request sda failed!\n");
|
||||
return -1;
|
||||
}
|
||||
priv->sda = gpio_to_desc(sda);
|
||||
if (IS_ERR(priv->sda))
|
||||
return PTR_ERR(priv->sda);
|
||||
|
||||
DEBUG_LOG("request sda succ!\n");
|
||||
|
||||
/* request scl */
|
||||
ret = gpio_request_one(scl, gf_scl, "scl");
|
||||
if (ret < 0) {
|
||||
DEBUG_LOG("request scl failed!\n");
|
||||
DEBUG_LOG("release sda\n");
|
||||
gpio_free(sda);
|
||||
return -1;
|
||||
}
|
||||
priv->scl = gpio_to_desc(scl);
|
||||
if (IS_ERR(priv->scl))
|
||||
return PTR_ERR(priv->scl);
|
||||
|
||||
DEBUG_LOG("request scl succ!\n");
|
||||
|
||||
insmod_gpio = true;
|
||||
} else {
|
||||
if (pdata->sda_is_open_drain)
|
||||
gflags_sda = GPIOD_OUT_HIGH;
|
||||
else
|
||||
gflags_sda = GPIOD_OUT_HIGH_OPEN_DRAIN;
|
||||
|
||||
if (pdata->scl_is_open_drain)
|
||||
gflags_scl = GPIOD_OUT_HIGH;
|
||||
else
|
||||
gflags_scl = GPIOD_OUT_HIGH_OPEN_DRAIN;
|
||||
DEBUG_LOG("used sda and scl with device tree\n");
|
||||
priv->sda = i2c_gpio_get_desc(dev, "sda", 0, gflags_sda);
|
||||
if (IS_ERR(priv->sda))
|
||||
return PTR_ERR(priv->sda);
|
||||
|
||||
priv->scl = i2c_gpio_get_desc(dev, "scl", 1, gflags_scl);
|
||||
if (IS_ERR(priv->scl))
|
||||
return PTR_ERR(priv->scl);
|
||||
|
||||
insmod_gpio = false;
|
||||
}
|
||||
|
||||
if (gpiod_cansleep(priv->sda) || gpiod_cansleep(priv->scl))
|
||||
dev_warn(dev, "Slow GPIO pins might wreak havoc into I2C/SMBus bus timing");
|
||||
@@ -420,6 +534,9 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
bit_data->getscl = i2c_gpio_getscl;
|
||||
bit_data->getsda = i2c_gpio_getsda;
|
||||
|
||||
udelay_data = bit_data;
|
||||
|
||||
/* Get udelay from device tree */
|
||||
if (pdata->udelay)
|
||||
bit_data->udelay = pdata->udelay;
|
||||
else if (pdata->scl_is_output_only)
|
||||
@@ -432,6 +549,17 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
else
|
||||
bit_data->timeout = HZ / 10; /* 100 ms */
|
||||
|
||||
/* If `insmod ko delay_us=x` (x>=0) */
|
||||
if (delay_us >= 0) {
|
||||
DEBUG_LOG("Get delay_us from insmod: %d\n", delay_us);
|
||||
bit_data->udelay = delay_us;
|
||||
} else {
|
||||
DEBUG_LOG("Get delay_us from device tree: %d\n", bit_data->udelay);
|
||||
}
|
||||
|
||||
DEBUG_LOG("delay us: %d\n", bit_data->udelay);
|
||||
show_freq();
|
||||
|
||||
bit_data->data = priv;
|
||||
|
||||
adap->owner = THIS_MODULE;
|
||||
@@ -464,6 +592,17 @@ static int i2c_gpio_probe(struct platform_device *pdev)
|
||||
|
||||
i2c_gpio_fault_injector_init(pdev);
|
||||
|
||||
/* Add udelay kobj */
|
||||
curr_dev = &pdev->dev;
|
||||
udelay_v = kobject_create_and_add("udelay_value", &curr_dev->kobj);
|
||||
if(sysfs_create_file(udelay_v, &sysfs_test_attr.attr)){
|
||||
DEBUG_LOG("Create sysfs file failed!\n");
|
||||
kobject_put(udelay_v);
|
||||
sysfs_remove_file(kernel_kobj, &sysfs_test_attr.attr);
|
||||
}
|
||||
|
||||
udelay_value = udelay_data->udelay;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -472,6 +611,11 @@ static int i2c_gpio_remove(struct platform_device *pdev)
|
||||
struct i2c_gpio_private_data *priv;
|
||||
struct i2c_adapter *adap;
|
||||
|
||||
if (insmod_gpio) {
|
||||
gpio_free(scl);
|
||||
gpio_free(sda);
|
||||
}
|
||||
|
||||
i2c_gpio_fault_injector_exit(pdev);
|
||||
|
||||
priv = platform_get_drvdata(pdev);
|
||||
@@ -479,6 +623,10 @@ static int i2c_gpio_remove(struct platform_device *pdev)
|
||||
|
||||
i2c_del_adapter(adap);
|
||||
|
||||
/* Remove udelay kobj */
|
||||
kobject_put(udelay_v);
|
||||
sysfs_remove_file(kernel_kobj, &sysfs_test_attr.attr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -500,6 +648,15 @@ static struct platform_driver i2c_gpio_driver = {
|
||||
.remove = i2c_gpio_remove,
|
||||
};
|
||||
|
||||
module_param(delay_us, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(delay_us, "An integer parameter for the i2c udelay");
|
||||
|
||||
module_param(sda, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(sda, "sda gpio");
|
||||
|
||||
module_param(scl, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(scl, "scl gpio");
|
||||
|
||||
static int __init i2c_gpio_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#define I2C2 "i2c@04020000"
|
||||
#define I2C3 "i2c@04030000"
|
||||
#define I2C4 "i2c@04040000"
|
||||
#define I2C5 "i2c5@gpio"
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -680,6 +681,8 @@ static int i2cdev_attach_adapter(struct device *dev, void *dummy)
|
||||
adap->i2c_idx = 3;
|
||||
if (!strcmp(adap->dev.of_node->full_name, I2C4))
|
||||
adap->i2c_idx = 4;
|
||||
if (!strcmp(adap->dev.of_node->full_name, I2C5))
|
||||
adap->i2c_idx = 5;
|
||||
|
||||
dev_set_name(&i2c_dev->dev, "i2c-%d", adap->i2c_idx);
|
||||
#else
|
||||
|
||||
@@ -113,3 +113,4 @@ obj-$(CONFIG_TOUCHSCREEN_RASPBERRYPI_FW) += raspberrypi-ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_IQS5XX) += iqs5xx.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_ZINITIX) += zinitix.o
|
||||
obj-y += hynitron/
|
||||
obj-y += hyn/
|
||||
13
linux_5.10/drivers/input/touchscreen/hyn/Makefile
Normal file
13
linux_5.10/drivers/input/touchscreen/hyn/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
obj-m += hynitron_touch_new.o
|
||||
|
||||
hynitron_touch_new-objs += hyn_core.o hyn_lib/hyn_i2c.o hyn_lib/hyn_spi.o hyn_lib/hyn_ts_ext.o hyn_lib/hyn_fs_node.o
|
||||
hynitron_touch_new-objs += hyn_lib/hyn_tool.o
|
||||
hynitron_touch_new-objs += hyn_lib/hyn_gesture.o
|
||||
hynitron_touch_new-objs += hyn_lib/hyn_prox.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst66xx.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst3240.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst92xx.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst3xx.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst1xx.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst7xx.o
|
||||
hynitron_touch_new-objs += hyn_chips/hyn_cst8xxT.o
|
||||
Binary file not shown.
44
linux_5.10/drivers/input/touchscreen/hyn/hyn_cfg.h
Normal file
44
linux_5.10/drivers/input/touchscreen/hyn/hyn_cfg.h
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
#ifndef _HYNITRON_CFG_H
|
||||
#define _HYNITRON_CFG_H
|
||||
|
||||
|
||||
#define I2C_PORT
|
||||
#ifdef I2C_PORT
|
||||
#define I2C_USE_DMA (0) //0:soft 1:DMA 2:MTK_DMA
|
||||
#else
|
||||
#define SPI_MODE (0)
|
||||
#define SPI_DELAY_CS (10) //us
|
||||
#define SPI_CLOCK_FREQ (8000000)
|
||||
#define I2C_USE_DMA (0)
|
||||
#endif
|
||||
|
||||
#define HYN_TRANSFER_LIMIT_LEN (8192) //need >= 8
|
||||
|
||||
#define HYN_POWER_ON_UPDATA (0) //updata
|
||||
|
||||
#define HYN_GKI_VER (0) //GKI version need enable
|
||||
#define HYN_APK_DEBUG_EN (1)
|
||||
|
||||
#define HYN_GESTURE_EN (0) //gesture
|
||||
|
||||
#define HYN_PROX_TYEP (0) //0:disable 1:default 2:mtk_sensor 3:mtk_alps 4:Spread misc
|
||||
|
||||
#define MAX_POINTS_REPORT (1)
|
||||
|
||||
#define KEY_USED_POS_REPORT (0)
|
||||
|
||||
#define ESD_CHECK_EN (0)
|
||||
|
||||
#define HYN_WAKE_LOCK_EN (0)
|
||||
|
||||
#define HYN_MT_PROTOCOL_B_EN (1)
|
||||
|
||||
//selftest cfg
|
||||
#define HYN_TP0_TEST_LOG_SAVE (0)
|
||||
|
||||
#define HYN_DRIVER_VERSION "== Hynitron V2.5 202406014 =="
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
1544
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst1xx_fw.h
Normal file
1544
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst1xx_fw.h
Normal file
File diff suppressed because it is too large
Load Diff
1027
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst3240_fw.h
Normal file
1027
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst3240_fw.h
Normal file
File diff suppressed because it is too large
Load Diff
1546
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst3xx_fw.h
Normal file
1546
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst3xx_fw.h
Normal file
File diff suppressed because it is too large
Load Diff
2568
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst66xx_fw1.h
Normal file
2568
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst66xx_fw1.h
Normal file
File diff suppressed because it is too large
Load Diff
2568
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst66xx_fw2.h
Normal file
2568
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst66xx_fw2.h
Normal file
File diff suppressed because it is too large
Load Diff
972
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst7xx_fw.h
Normal file
972
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst7xx_fw.h
Normal file
@@ -0,0 +1,972 @@
|
||||
#ifndef HYNITRON_FIRMWARE_H
|
||||
#define HYNITRON_FIRMWARE_H
|
||||
|
||||
static const unsigned char fw_bin[] = {
|
||||
0x00, 0x00, 0x00, 0x3c, 0x97, 0xad,
|
||||
0x02, 0x27, 0x98, 0x22, 0x22, 0x00, 0x02, 0x35, 0xdb, 0x12, 0x2c, 0xa4, 0xe0, 0xff, 0x22, 0x02,
|
||||
0x38, 0x9b, 0xef, 0x78, 0xa4, 0x60, 0x05, 0xe6, 0x44, 0x01, 0xf6, 0x22, 0xe6, 0x54, 0xfe, 0xf6,
|
||||
0x22, 0x02, 0x2b, 0x72, 0xe5, 0x58, 0x24, 0x05, 0x12, 0x0d, 0x18, 0xe0, 0x70, 0x03, 0x02, 0x07,
|
||||
0x4a, 0x12, 0x0d, 0x8d, 0x74, 0x20, 0x93, 0xff, 0xe5, 0x58, 0x24, 0x09, 0x12, 0x0d, 0x18, 0xe0,
|
||||
0xc3, 0x9f, 0x50, 0x65, 0xe5, 0x58, 0x24, 0x07, 0x12, 0x0d, 0x18, 0xe0, 0x54, 0xfe, 0xf0, 0xe5,
|
||||
0x58, 0x24, 0x11, 0x12, 0x0d, 0x18, 0xe4, 0xf0, 0xa3, 0xf0, 0xe5, 0x58, 0x24, 0x13, 0x12, 0x0d,
|
||||
0x18, 0xe4, 0xf0, 0x12, 0x0d, 0x58, 0x12, 0x0e, 0x08, 0x24, 0x1b, 0x12, 0x0d, 0x18, 0x12, 0x0d,
|
||||
0x55, 0x12, 0x0e, 0x06, 0x24, 0x1d, 0x12, 0x0c, 0xde, 0x12, 0x0d, 0x55, 0x12, 0x0e, 0x08, 0x24,
|
||||
0x15, 0x12, 0x0d, 0x18, 0x12, 0x0d, 0x55, 0x12, 0x0e, 0x06, 0x24, 0x17, 0x12, 0x0d, 0x18, 0x12,
|
||||
0x0f, 0x80, 0x24, 0x09, 0x12, 0x0d, 0x18, 0xe0, 0x60, 0x03, 0x02, 0x01, 0xe1, 0xe5, 0x58, 0x24,
|
||||
0x05, 0x12, 0x0d, 0x18, 0xe4, 0xf0, 0x02, 0x01, 0xe1, 0xe5, 0x58, 0x24, 0x07, 0x12, 0x0d, 0x18,
|
||||
0xe0, 0x30, 0xe0, 0x03, 0x02, 0x01, 0x3f, 0xe5, 0x58, 0x24, 0x1b, 0x12, 0x0d, 0x18, 0xe0, 0xfe,
|
||||
0xa3, 0xe0, 0xff, 0x12, 0x0d, 0x5a, 0x12, 0x0e, 0xee, 0xf5, 0x28, 0xec, 0x9e, 0xf5, 0x27, 0xe5,
|
||||
0x58, 0x24, 0x1d, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x0d, 0x5a, 0x12, 0x0e,
|
||||
0xec, 0xf5, 0x2a, 0xec, 0x9e, 0xf5, 0x29, 0x12, 0x0d, 0x8d, 0x74, 0x19, 0x93, 0xff, 0xe4, 0x8f,
|
||||
0x36, 0xf5, 0x35, 0xf5, 0x34, 0xf5, 0x33, 0x12, 0x0e, 0x3a, 0x90, 0x04, 0x9c, 0xe0, 0x24, 0x01,
|
||||
0xff, 0xe4, 0x33, 0xfe, 0x12, 0x0e, 0xfa, 0x8f, 0x36, 0x8e, 0x35, 0x8d, 0x34, 0x8c, 0x33, 0xaf,
|
||||
0x2a, 0xae, 0x29, 0x12, 0x2d, 0xa5, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x28, 0xae, 0x27, 0x12, 0x2d,
|
||||
0xa5, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x12, 0x0e, 0x35, 0xc3, 0x12, 0x0b, 0xca,
|
||||
0x50, 0x39, 0xe5, 0x58, 0x24, 0x07, 0x12, 0x0d, 0x18, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x2c, 0xe5,
|
||||
0x58, 0x24, 0x21, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x0d, 0x5a, 0x12, 0x0e,
|
||||
0xee, 0xf5, 0x28, 0xec, 0x9e, 0xf5, 0x27, 0x12, 0x0d, 0x14, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12,
|
||||
0x0d, 0x5a, 0x12, 0x0e, 0xec, 0xf5, 0x2a, 0xec, 0x9e, 0xf5, 0x29, 0xe5, 0x58, 0x24, 0x11, 0x12,
|
||||
0x0d, 0x18, 0x12, 0x0e, 0x13, 0xe5, 0x28, 0x9f, 0xfd, 0xe5, 0x27, 0x9e, 0xfc, 0xef, 0x78, 0x03,
|
||||
0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0x2d, 0xff, 0xec, 0x3e, 0xfe, 0xef, 0x78, 0x03, 0x12,
|
||||
0x0f, 0x27, 0xd8, 0xfb, 0xf5, 0x28, 0x8e, 0x27, 0xe5, 0x58, 0x24, 0x13, 0x12, 0x0d, 0x18, 0x12,
|
||||
0x0e, 0x13, 0xe5, 0x2a, 0x9f, 0xfd, 0xe5, 0x29, 0x9e, 0xfc, 0xef, 0x78, 0x03, 0xc3, 0x33, 0xce,
|
||||
0x33, 0xce, 0xd8, 0xf9, 0x2d, 0xff, 0xec, 0x3e, 0xfe, 0xef, 0x78, 0x03, 0x12, 0x0f, 0x27, 0xd8,
|
||||
0xfb, 0xf5, 0x2a, 0x8e, 0x29, 0xe5, 0x58, 0x24, 0x11, 0x12, 0x0d, 0x18, 0xe5, 0x27, 0xf0, 0xa3,
|
||||
0xe5, 0x28, 0xf0, 0xe5, 0x58, 0x24, 0x13, 0x12, 0x0d, 0x18, 0xe5, 0x29, 0xf0, 0xa3, 0xe5, 0x2a,
|
||||
0xf0, 0x12, 0x0d, 0x8d, 0x74, 0x20, 0x93, 0xff, 0xe5, 0x58, 0x24, 0x09, 0x12, 0x0d, 0x18, 0xe0,
|
||||
0xc3, 0x9f, 0x50, 0x03, 0x02, 0x07, 0x09, 0xe5, 0x58, 0x24, 0x21, 0x12, 0x0d, 0x18, 0xe0, 0xfe,
|
||||
0xa3, 0xe0, 0xfd, 0xac, 0x06, 0xe5, 0x27, 0xa2, 0xe7, 0x13, 0xfe, 0xe5, 0x28, 0x12, 0x0e, 0x1a,
|
||||
0x12, 0x0d, 0x5a, 0x12, 0x0f, 0x2e, 0x12, 0x0f, 0x27, 0xd8, 0xfb, 0xf5, 0x24, 0x8e, 0x23, 0x12,
|
||||
0x0d, 0x14, 0xe0, 0xfe, 0xa3, 0xe0, 0xfd, 0xac, 0x06, 0xe5, 0x29, 0xa2, 0xe7, 0x13, 0xfe, 0xe5,
|
||||
0x2a, 0x12, 0x0e, 0x1a, 0x12, 0x0d, 0x5a, 0xa3, 0xa3, 0x12, 0x0f, 0x2e, 0x12, 0x0f, 0x27, 0xd8,
|
||||
0xfb, 0xf5, 0x26, 0x8e, 0x25, 0xc3, 0xe5, 0x24, 0x94, 0x01, 0xe5, 0x23, 0x64, 0x80, 0x94, 0x80,
|
||||
0x50, 0x08, 0x75, 0x23, 0x00, 0x75, 0x24, 0x01, 0x80, 0x1d, 0x12, 0x0d, 0x8d, 0x74, 0x01, 0x93,
|
||||
0xfe, 0x74, 0x02, 0x93, 0xff, 0xd3, 0x95, 0x24, 0xee, 0x95, 0x23, 0x50, 0x0a, 0xef, 0x24, 0xff,
|
||||
0xf5, 0x24, 0xee, 0x34, 0xff, 0xf5, 0x23, 0xc3, 0xe5, 0x26, 0x94, 0x01, 0xe5, 0x25, 0x64, 0x80,
|
||||
0x94, 0x80, 0x50, 0x08, 0x75, 0x25, 0x00, 0x75, 0x26, 0x01, 0x80, 0x1d, 0x12, 0x0d, 0x8d, 0x74,
|
||||
0x03, 0x93, 0xfe, 0x74, 0x04, 0x93, 0xff, 0xd3, 0x95, 0x26, 0xee, 0x95, 0x25, 0x50, 0x0a, 0xef,
|
||||
0x24, 0xff, 0xf5, 0x26, 0xee, 0x34, 0xff, 0xf5, 0x25, 0x12, 0x0d, 0x8d, 0x74, 0x20, 0x93, 0x24,
|
||||
0x0a, 0xff, 0xe4, 0x33, 0xfe, 0xe5, 0x58, 0x24, 0x09, 0x12, 0x0d, 0x18, 0xe0, 0xc3, 0x9f, 0xee,
|
||||
0x64, 0x80, 0xf8, 0x74, 0x80, 0x98, 0x50, 0x5d, 0xe5, 0x58, 0x24, 0x11, 0x12, 0x0d, 0x18, 0x12,
|
||||
0x07, 0x9c, 0x12, 0x0d, 0x8d, 0x74, 0x20, 0x93, 0xfd, 0xe5, 0x58, 0x24, 0x09, 0x12, 0x0d, 0x18,
|
||||
0xe0, 0xc3, 0x9d, 0xfd, 0xe4, 0x94, 0x00, 0xfc, 0x12, 0x0e, 0xcd, 0x12, 0x0f, 0x3b, 0xe5, 0x58,
|
||||
0x24, 0x13, 0x12, 0x0d, 0x18, 0x12, 0x07, 0x9c, 0x12, 0x0d, 0x8d, 0x74, 0x20, 0x93, 0xfd, 0xe5,
|
||||
0x58, 0x24, 0x09, 0x12, 0x0d, 0x18, 0xe0, 0xc3, 0x9d, 0xfd, 0xe4, 0x94, 0x00, 0xfc, 0x12, 0x0d,
|
||||
0xdb, 0xf5, 0x83, 0x12, 0x0f, 0x3b, 0x75, 0x3b, 0x00, 0x75, 0x3c, 0x80, 0x75, 0x3d, 0x00, 0x75,
|
||||
0x3e, 0x80, 0x02, 0x05, 0x57, 0xe5, 0x58, 0x24, 0x11, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xa3, 0xe0,
|
||||
0xff, 0x12, 0x2d, 0xa5, 0x8e, 0x46, 0x8f, 0x47, 0xe5, 0x58, 0x24, 0x13, 0x12, 0x0d, 0x18, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x2d, 0xa5, 0x8e, 0x48, 0x8f, 0x49, 0xd3, 0xe5, 0x47, 0x94, 0xff,
|
||||
0xe5, 0x46, 0x94, 0x00, 0x40, 0x06, 0x75, 0x46, 0x00, 0x75, 0x47, 0xff, 0xd3, 0xe5, 0x49, 0x94,
|
||||
0xff, 0xe5, 0x48, 0x94, 0x00, 0x40, 0x06, 0x75, 0x48, 0x00, 0x75, 0x49, 0xff, 0x85, 0x46, 0x3f,
|
||||
0x85, 0x47, 0x40, 0x85, 0x48, 0x41, 0x85, 0x49, 0x42, 0x75, 0x45, 0x09, 0x12, 0x0d, 0x62, 0xe0,
|
||||
0x25, 0x40, 0xf5, 0x40, 0xe4, 0x35, 0x3f, 0xf5, 0x3f, 0x12, 0x0d, 0xdb, 0x12, 0x0d, 0x6f, 0xe0,
|
||||
0x25, 0x42, 0xf5, 0x42, 0xe4, 0x35, 0x41, 0xf5, 0x41, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24,
|
||||
0xa2, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0x12, 0x0d, 0x6f, 0xe0, 0xff, 0x12, 0x0d, 0x62, 0xef, 0xf0,
|
||||
0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb6, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0x12, 0x0d, 0x6f,
|
||||
0xe0, 0xff, 0x12, 0x0d, 0xdb, 0x12, 0x0d, 0x6f, 0xef, 0xf0, 0x15, 0x45, 0xe5, 0x45, 0x70, 0xac,
|
||||
0x12, 0x0e, 0xcd, 0xe5, 0x47, 0xf0, 0x12, 0x0d, 0xdb, 0xf5, 0x83, 0xe5, 0x49, 0xf0, 0xd3, 0xe5,
|
||||
0x40, 0x95, 0x42, 0xe5, 0x3f, 0x95, 0x41, 0x40, 0x26, 0x75, 0x4a, 0x00, 0x75, 0x4b, 0x00, 0x75,
|
||||
0x4c, 0x41, 0x75, 0x4d, 0x00, 0x75, 0x4e, 0x00, 0x75, 0x4f, 0x3f, 0x75, 0x50, 0x00, 0x75, 0x51,
|
||||
0x00, 0x75, 0x52, 0x3b, 0x75, 0x53, 0x00, 0x75, 0x54, 0x00, 0x75, 0x55, 0x3d, 0x80, 0x24, 0x75,
|
||||
0x4a, 0x00, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x3f, 0x75, 0x4d, 0x00, 0x75, 0x4e, 0x00, 0x75, 0x4f,
|
||||
0x41, 0x75, 0x50, 0x00, 0x75, 0x51, 0x00, 0x75, 0x52, 0x3d, 0x75, 0x53, 0x00, 0x75, 0x54, 0x00,
|
||||
0x75, 0x55, 0x3b, 0x12, 0x0f, 0x9a, 0x45, 0xf0, 0x70, 0x06, 0x75, 0xf0, 0x01, 0x12, 0x0a, 0x4b,
|
||||
0xab, 0x4d, 0xaa, 0x4e, 0xa9, 0x4f, 0x12, 0x09, 0xe8, 0xae, 0xf0, 0x78, 0x03, 0xc3, 0x33, 0xce,
|
||||
0x33, 0xce, 0xd8, 0xf9, 0xff, 0x12, 0x0f, 0x9a, 0xfd, 0xac, 0xf0, 0x12, 0x09, 0x47, 0x8e, 0x43,
|
||||
0x8f, 0x44, 0xe5, 0x58, 0x24, 0x0b, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x0e,
|
||||
0x20, 0xe5, 0x44, 0x2f, 0xff, 0xe5, 0x43, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce,
|
||||
0x13, 0xd8, 0xf9, 0xf5, 0x44, 0x8e, 0x43, 0xc3, 0x94, 0x28, 0xe5, 0x43, 0x94, 0x00, 0x50, 0x08,
|
||||
0x75, 0x43, 0x00, 0x75, 0x44, 0x28, 0x80, 0x11, 0xd3, 0xe5, 0x44, 0x94, 0x46, 0xe5, 0x43, 0x94,
|
||||
0x00, 0x40, 0x06, 0x75, 0x43, 0x00, 0x75, 0x44, 0x46, 0xae, 0x43, 0xaf, 0x44, 0x7c, 0x00, 0x7d,
|
||||
0x0a, 0x12, 0x09, 0x35, 0xef, 0x24, 0xf0, 0xff, 0xee, 0x34, 0xfe, 0xab, 0x53, 0xaa, 0x54, 0xa9,
|
||||
0x55, 0x8f, 0xf0, 0x12, 0x0a, 0x4b, 0xe5, 0x44, 0x25, 0xe0, 0xff, 0xe5, 0x43, 0x33, 0xfe, 0xc3,
|
||||
0x74, 0xd0, 0x9f, 0xff, 0xe4, 0x9e, 0xab, 0x50, 0xaa, 0x51, 0xa9, 0x52, 0x8f, 0xf0, 0x12, 0x0a,
|
||||
0x4b, 0xe5, 0x58, 0x24, 0x0b, 0x12, 0x0d, 0x18, 0xe5, 0x43, 0xf0, 0xa3, 0xe5, 0x44, 0xf0, 0xe5,
|
||||
0x58, 0x24, 0x0d, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7d, 0x03, 0x12, 0x09, 0x35,
|
||||
0xe5, 0x3c, 0x2f, 0xff, 0xe5, 0x3b, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13,
|
||||
0xd8, 0xf9, 0xf5, 0x3c, 0x8e, 0x3b, 0xe5, 0x58, 0x24, 0x0f, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xa3,
|
||||
0xe0, 0xff, 0x12, 0x0e, 0x20, 0xe5, 0x3e, 0x2f, 0xff, 0xe5, 0x3d, 0x3e, 0xfe, 0xef, 0x78, 0x02,
|
||||
0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xf5, 0x3e, 0x8e, 0x3d, 0xe5, 0x58, 0x24, 0x0d, 0x12,
|
||||
0x0d, 0x18, 0xe5, 0x3b, 0xf0, 0xa3, 0xe5, 0x3c, 0xf0, 0xe5, 0x58, 0x24, 0x0f, 0x12, 0x0d, 0x18,
|
||||
0xe5, 0x3d, 0xf0, 0xa3, 0xe5, 0x3e, 0xf0, 0x12, 0x0d, 0x14, 0x12, 0x07, 0xa5, 0x7c, 0x00, 0x7d,
|
||||
0x02, 0x12, 0x09, 0x9c, 0xc0, 0x06, 0xc0, 0x07, 0xe5, 0x58, 0x24, 0x21, 0x12, 0x0d, 0x18, 0x12,
|
||||
0x07, 0xb5, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x33, 0x95, 0xe0, 0x8f, 0x36, 0x8e,
|
||||
0x35, 0xf5, 0x34, 0xf5, 0x33, 0xae, 0x3b, 0xaf, 0x3c, 0xe4, 0xfc, 0xfd, 0x12, 0x0e, 0x3a, 0xd3,
|
||||
0x12, 0x0b, 0xca, 0x40, 0x0b, 0xe4, 0x85, 0x3c, 0x36, 0x85, 0x3b, 0x35, 0xf5, 0x34, 0xf5, 0x33,
|
||||
0xc3, 0xe5, 0x3c, 0x95, 0x36, 0xfb, 0xe5, 0x3b, 0x95, 0x35, 0xfa, 0xe4, 0x95, 0x34, 0xf9, 0xe4,
|
||||
0x95, 0x33, 0xf8, 0xe5, 0x58, 0x24, 0x21, 0x12, 0x0d, 0x18, 0x12, 0x0e, 0xf5, 0x8f, 0x2e, 0x8e,
|
||||
0x2d, 0x8d, 0x2c, 0x8c, 0x2b, 0xae, 0x23, 0xaf, 0x24, 0xee, 0x12, 0x0e, 0x35, 0x12, 0x0a, 0x97,
|
||||
0xef, 0x25, 0x2e, 0xff, 0xee, 0x35, 0x2d, 0xfe, 0xed, 0x35, 0x2c, 0xfd, 0xec, 0x35, 0x2b, 0x12,
|
||||
0x0f, 0x00, 0xe5, 0x3b, 0xc3, 0x13, 0xfe, 0xe5, 0x3c, 0x12, 0x0d, 0xab, 0xc0, 0x06, 0xc0, 0x07,
|
||||
0xae, 0x3b, 0xaf, 0x3c, 0xab, 0x07, 0xaa, 0x06, 0xe4, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12,
|
||||
0x0b, 0x22, 0x8f, 0x2e, 0x8e, 0x2d, 0x8d, 0x2c, 0x8c, 0x2b, 0xe5, 0x58, 0x24, 0x21, 0x12, 0x0d,
|
||||
0x18, 0x12, 0x07, 0xb5, 0x7c, 0x00, 0x7d, 0x02, 0x12, 0x09, 0x9c, 0xc0, 0x06, 0xc0, 0x07, 0x12,
|
||||
0x0d, 0x14, 0x12, 0x07, 0xa5, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x33, 0x95, 0xe0,
|
||||
0x8f, 0x3a, 0x8e, 0x39, 0xf5, 0x38, 0xf5, 0x37, 0xae, 0x3d, 0xaf, 0x3e, 0xe4, 0xfc, 0xfd, 0xab,
|
||||
0x3a, 0xaa, 0x39, 0xa9, 0x38, 0xa8, 0x37, 0xd3, 0x12, 0x0b, 0xca, 0x40, 0x0b, 0xe4, 0x85, 0x3e,
|
||||
0x3a, 0x85, 0x3d, 0x39, 0xf5, 0x38, 0xf5, 0x37, 0xc3, 0xe5, 0x3e, 0x95, 0x3a, 0xfb, 0xe5, 0x3d,
|
||||
0x95, 0x39, 0xfa, 0xe4, 0x95, 0x38, 0xf9, 0xe4, 0x95, 0x37, 0xf8, 0x12, 0x0d, 0x14, 0x12, 0x0e,
|
||||
0xf5, 0x8f, 0x32, 0x8e, 0x31, 0x8d, 0x30, 0x8c, 0x2f, 0xae, 0x25, 0xaf, 0x26, 0xee, 0x33, 0x95,
|
||||
0xe0, 0xfd, 0xfc, 0xab, 0x3a, 0xaa, 0x39, 0xa9, 0x38, 0xa8, 0x37, 0x12, 0x0a, 0x97, 0xef, 0x25,
|
||||
0x32, 0xff, 0xee, 0x35, 0x31, 0xfe, 0xed, 0x35, 0x30, 0xfd, 0xec, 0x35, 0x2f, 0x12, 0x0f, 0x00,
|
||||
0xe5, 0x3d, 0xc3, 0x13, 0xfe, 0xe5, 0x3e, 0x12, 0x0d, 0xab, 0xc0, 0x06, 0xc0, 0x07, 0xae, 0x3d,
|
||||
0xaf, 0x3e, 0xab, 0x07, 0xaa, 0x06, 0xe4, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0b, 0x22,
|
||||
0x8f, 0x32, 0x8e, 0x31, 0x8d, 0x30, 0x8c, 0x2f, 0xe5, 0x58, 0x24, 0x07, 0x12, 0x0d, 0x18, 0xe0,
|
||||
0x30, 0xe0, 0x11, 0x12, 0x0d, 0x5a, 0xe5, 0x2d, 0xf0, 0xa3, 0xe5, 0x2e, 0x12, 0x0d, 0x59, 0xa3,
|
||||
0xa3, 0xee, 0x80, 0x21, 0xe5, 0x58, 0x24, 0x1b, 0x12, 0x0d, 0x18, 0xe0, 0xff, 0xa3, 0xe0, 0x12,
|
||||
0x0d, 0x5a, 0xcf, 0x12, 0x0f, 0x81, 0x24, 0x1d, 0x12, 0x0d, 0x18, 0xe0, 0xff, 0xa3, 0xe0, 0x12,
|
||||
0x0d, 0x5a, 0xa3, 0xa3, 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x58, 0x24, 0x21, 0x12, 0x0d, 0x18,
|
||||
0x12, 0x0e, 0x08, 0x24, 0x15, 0x12, 0x0d, 0x18, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x0d, 0x14,
|
||||
0x12, 0x0e, 0x08, 0x24, 0x17, 0x12, 0x0c, 0xde, 0x12, 0x0f, 0x80, 0x24, 0x09, 0x12, 0x0d, 0x18,
|
||||
0xe0, 0xc3, 0x94, 0x14, 0x50, 0x0a, 0xe5, 0x58, 0x24, 0x09, 0x12, 0x0d, 0x18, 0xe0, 0x04, 0xf0,
|
||||
0xe5, 0x58, 0x24, 0x0a, 0x12, 0x0d, 0x18, 0xe4, 0xf0, 0x22, 0xe5, 0x58, 0x24, 0x0a, 0x12, 0x0d,
|
||||
0x18, 0xe0, 0xd3, 0x94, 0x00, 0x40, 0x0a, 0xe5, 0x58, 0x24, 0x0a, 0x12, 0x0d, 0x18, 0xe0, 0x14,
|
||||
0xf0, 0xe5, 0x58, 0x24, 0x0a, 0x12, 0x0d, 0x18, 0xe0, 0x70, 0x30, 0xe5, 0x58, 0x24, 0x09, 0x12,
|
||||
0x0d, 0x18, 0xe4, 0xf0, 0xe5, 0x58, 0x24, 0x0d, 0x12, 0x0d, 0x18, 0xe4, 0xf0, 0xa3, 0x74, 0x80,
|
||||
0xf0, 0xe5, 0x58, 0x24, 0x0f, 0x12, 0x0d, 0x18, 0xe4, 0xf0, 0xa3, 0x74, 0x80, 0xf0, 0xe5, 0x58,
|
||||
0x24, 0x0b, 0x12, 0x0d, 0x18, 0xe4, 0xf0, 0xa3, 0x74, 0x28, 0xf0, 0x22, 0xe0, 0xfe, 0xa3, 0xe0,
|
||||
0xff, 0x12, 0x2d, 0xa5, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x95, 0x26, 0xff, 0xee, 0x95, 0x25,
|
||||
0xfe, 0x12, 0x2d, 0xa5, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x95, 0x24, 0xff, 0xee, 0x95, 0x23,
|
||||
0xfe, 0x12, 0x2d, 0xa5, 0x22, 0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2,
|
||||
0x08, 0xdf, 0xfa, 0x80, 0x3e, 0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80,
|
||||
0x32, 0xe3, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80,
|
||||
0x70, 0x88, 0x82, 0x8c, 0x83, 0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a,
|
||||
0x83, 0xe0, 0xa3, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2,
|
||||
0x08, 0xdf, 0xfa, 0x80, 0x4c, 0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80,
|
||||
0xf2, 0x80, 0x33, 0x80, 0x10, 0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80,
|
||||
0xe2, 0x80, 0xca, 0x80, 0x33, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5,
|
||||
0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc,
|
||||
0xdf, 0xe9, 0xde, 0xe7, 0x80, 0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf,
|
||||
0xf9, 0xec, 0xfa, 0xa9, 0xf0, 0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3,
|
||||
0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5,
|
||||
0x83, 0xcc, 0xdf, 0xea, 0xde, 0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2,
|
||||
0x08, 0xdf, 0xf9, 0x80, 0xcc, 0x88, 0xf0, 0xef, 0x60, 0x01, 0x0e, 0x4e, 0x60, 0xc3, 0x88, 0xf0,
|
||||
0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xb9, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xb4, 0x04, 0x00,
|
||||
0x50, 0xaf, 0x23, 0x23, 0x45, 0x82, 0x23, 0x90, 0x08, 0x15, 0x73, 0xbb, 0x01, 0x06, 0x89, 0x82,
|
||||
0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02, 0xe3, 0x22, 0x89, 0x82, 0x8a,
|
||||
0x83, 0xe4, 0x93, 0x22, 0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5,
|
||||
0x83, 0xe0, 0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25,
|
||||
0x82, 0xf8, 0xe2, 0x22, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93,
|
||||
0x22, 0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xf0, 0x22, 0x50, 0x02, 0xf7, 0x22, 0xbb, 0xfe,
|
||||
0x01, 0xf3, 0x22, 0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5,
|
||||
0x83, 0xe8, 0xf0, 0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb, 0xfe, 0x05, 0xe9,
|
||||
0x25, 0x82, 0xc8, 0xf2, 0x22, 0xef, 0x8d, 0xf0, 0xa4, 0xa8, 0xf0, 0xcf, 0x8c, 0xf0, 0xa4, 0x28,
|
||||
0xce, 0x8d, 0xf0, 0xa4, 0x2e, 0xfe, 0x22, 0xbc, 0x00, 0x0b, 0xbe, 0x00, 0x29, 0xef, 0x8d, 0xf0,
|
||||
0x84, 0xff, 0xad, 0xf0, 0x22, 0xe4, 0xcc, 0xf8, 0x75, 0xf0, 0x08, 0xef, 0x2f, 0xff, 0xee, 0x33,
|
||||
0xfe, 0xec, 0x33, 0xfc, 0xee, 0x9d, 0xec, 0x98, 0x40, 0x05, 0xfc, 0xee, 0x9d, 0xfe, 0x0f, 0xd5,
|
||||
0xf0, 0xe9, 0xe4, 0xce, 0xfd, 0x22, 0xed, 0xf8, 0xf5, 0xf0, 0xee, 0x84, 0x20, 0xd2, 0x1c, 0xfe,
|
||||
0xad, 0xf0, 0x75, 0xf0, 0x08, 0xef, 0x2f, 0xff, 0xed, 0x33, 0xfd, 0x40, 0x07, 0x98, 0x50, 0x06,
|
||||
0xd5, 0xf0, 0xf2, 0x22, 0xc3, 0x98, 0xfd, 0x0f, 0xd5, 0xf0, 0xea, 0x22, 0xc2, 0xd5, 0xec, 0x30,
|
||||
0xe7, 0x09, 0xb2, 0xd5, 0xe4, 0xc3, 0x9d, 0xfd, 0xe4, 0x9c, 0xfc, 0xee, 0x30, 0xe7, 0x15, 0xb2,
|
||||
0xd5, 0xe4, 0xc3, 0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0x12, 0x09, 0x47, 0xc3, 0xe4, 0x9d, 0xfd, 0xe4,
|
||||
0x9c, 0xfc, 0x80, 0x03, 0x12, 0x09, 0x47, 0x30, 0xd5, 0x07, 0xc3, 0xe4, 0x9f, 0xff, 0xe4, 0x9e,
|
||||
0xfe, 0x22, 0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82,
|
||||
0x70, 0x02, 0x15, 0x83, 0xe0, 0x38, 0xf0, 0x22, 0xbb, 0x01, 0x0a, 0x89, 0x82, 0x8a, 0x83, 0xe0,
|
||||
0xf5, 0xf0, 0xa3, 0xe0, 0x22, 0x50, 0x06, 0x87, 0xf0, 0x09, 0xe7, 0x19, 0x22, 0xbb, 0xfe, 0x07,
|
||||
0xe3, 0xf5, 0xf0, 0x09, 0xe3, 0x19, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xf5, 0xf0, 0x74,
|
||||
0x01, 0x93, 0x22, 0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83,
|
||||
0xe0, 0xf5, 0xf0, 0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6,
|
||||
0x22, 0xbb, 0xfe, 0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83,
|
||||
0x2a, 0xf5, 0x83, 0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22, 0xbb, 0x01, 0x0a, 0x89, 0x82,
|
||||
0x8a, 0x83, 0xf0, 0xe5, 0xf0, 0xa3, 0xf0, 0x22, 0x50, 0x06, 0xf7, 0x09, 0xa7, 0xf0, 0x19, 0x22,
|
||||
0xbb, 0xfe, 0x06, 0xf3, 0xe5, 0xf0, 0x09, 0xf3, 0x19, 0x22, 0xf8, 0xbb, 0x01, 0x11, 0xe5, 0x82,
|
||||
0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf0, 0xe5, 0xf0, 0xa3, 0xf0, 0x22, 0x50,
|
||||
0x09, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x08, 0xa6, 0xf0, 0x22, 0xbb, 0xfe, 0x09, 0xe9, 0x25, 0x82,
|
||||
0xc8, 0xf2, 0xe5, 0xf0, 0x08, 0xf2, 0x22, 0xe8, 0x8f, 0xf0, 0xa4, 0xcc, 0x8b, 0xf0, 0xa4, 0x2c,
|
||||
0xfc, 0xe9, 0x8e, 0xf0, 0xa4, 0x2c, 0xfc, 0x8a, 0xf0, 0xed, 0xa4, 0x2c, 0xfc, 0xea, 0x8e, 0xf0,
|
||||
0xa4, 0xcd, 0xa8, 0xf0, 0x8b, 0xf0, 0xa4, 0x2d, 0xcc, 0x38, 0x25, 0xf0, 0xfd, 0xe9, 0x8f, 0xf0,
|
||||
0xa4, 0x2c, 0xcd, 0x35, 0xf0, 0xfc, 0xeb, 0x8e, 0xf0, 0xa4, 0xfe, 0xa9, 0xf0, 0xeb, 0x8f, 0xf0,
|
||||
0xa4, 0xcf, 0xc5, 0xf0, 0x2e, 0xcd, 0x39, 0xfe, 0xe4, 0x3c, 0xfc, 0xea, 0xa4, 0x2d, 0xce, 0x35,
|
||||
0xf0, 0xfd, 0xe4, 0x3c, 0xfc, 0x22, 0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee,
|
||||
0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcc, 0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a,
|
||||
0xec, 0x99, 0xe5, 0x82, 0x98, 0x40, 0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec,
|
||||
0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0xd6, 0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8,
|
||||
0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb9, 0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf,
|
||||
0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xcb, 0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed,
|
||||
0x33, 0xfd, 0xec, 0x33, 0xfc, 0xeb, 0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99,
|
||||
0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xf9, 0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe,
|
||||
0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40,
|
||||
0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9a, 0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb,
|
||||
0x22, 0x75, 0xf0, 0x10, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc,
|
||||
0xc8, 0x33, 0xc8, 0x10, 0xd7, 0x07, 0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd,
|
||||
0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xf8, 0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa,
|
||||
0xe4, 0xc8, 0xf9, 0x22, 0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0,
|
||||
0xec, 0x64, 0x80, 0xc8, 0x64, 0x80, 0x98, 0x45, 0xf0, 0x22, 0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e,
|
||||
0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0, 0x22, 0xe8, 0x60, 0x0f, 0xef, 0xc3,
|
||||
0x33, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xd8, 0xf1, 0x22, 0xe6, 0xfc,
|
||||
0x08, 0xe6, 0xfd, 0x08, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x22, 0xe4, 0x93, 0xfc, 0x74, 0x01, 0x93,
|
||||
0xfd, 0x74, 0x02, 0x93, 0xfe, 0x74, 0x03, 0x93, 0xff, 0x22, 0xe6, 0xfb, 0x08, 0xe6, 0xf9, 0x08,
|
||||
0xe6, 0xfa, 0x08, 0xe6, 0xcb, 0xf8, 0x22, 0xec, 0xf6, 0x08, 0xed, 0xf6, 0x08, 0xee, 0xf6, 0x08,
|
||||
0xef, 0xf6, 0x22, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xa3, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22, 0xd0,
|
||||
0x83, 0xd0, 0x82, 0xe4, 0x93, 0xf6, 0x08, 0x74, 0x01, 0x93, 0xf6, 0x08, 0x74, 0x02, 0x93, 0xf6,
|
||||
0x08, 0x74, 0x03, 0x93, 0xf6, 0x74, 0x04, 0x73, 0xa8, 0x82, 0x85, 0x83, 0xf0, 0xd0, 0x83, 0xd0,
|
||||
0x82, 0x12, 0x0c, 0x5f, 0x12, 0x0c, 0x5f, 0x12, 0x0c, 0x5f, 0x12, 0x0c, 0x5f, 0xe4, 0x73, 0xe4,
|
||||
0x93, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83, 0xc8, 0xc5, 0x82, 0xc8, 0xf0, 0xa3, 0xc5, 0x83,
|
||||
0xc5, 0xf0, 0xc5, 0x83, 0xc8, 0xc5, 0x82, 0xc8, 0x22, 0xa4, 0x25, 0x82, 0xf5, 0x82, 0xe5, 0xf0,
|
||||
0x35, 0x83, 0xf5, 0x83, 0x22, 0xec, 0x8e, 0xf0, 0xa4, 0xcc, 0xc5, 0xf0, 0xcc, 0xcd, 0xf8, 0xef,
|
||||
0xa4, 0xce, 0xc5, 0xf0, 0x2d, 0xfd, 0xe4, 0x3c, 0xfc, 0xe8, 0xa4, 0x2e, 0xc8, 0xc5, 0xf0, 0x3d,
|
||||
0xfd, 0xe4, 0x3c, 0xfc, 0xef, 0xa4, 0xff, 0xe5, 0xf0, 0x28, 0xfe, 0xe4, 0x3d, 0xfd, 0xe4, 0x3c,
|
||||
0xfc, 0x22, 0xef, 0x4e, 0x60, 0x12, 0xef, 0x60, 0x01, 0x0e, 0xed, 0xbb, 0x01, 0x0b, 0x89, 0x82,
|
||||
0x8a, 0x83, 0xf0, 0xa3, 0xdf, 0xfc, 0xde, 0xfa, 0x22, 0x89, 0xf0, 0x50, 0x07, 0xf7, 0x09, 0xdf,
|
||||
0xfc, 0xa9, 0xf0, 0x22, 0xbb, 0xfe, 0xfc, 0xf3, 0x09, 0xdf, 0xfc, 0xa9, 0xf0, 0x22, 0xf5, 0x82,
|
||||
0xe4, 0x35, 0x57, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x58, 0x82, 0x85, 0x57, 0x83,
|
||||
0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x58, 0x24, 0x21, 0xf5, 0x82, 0xe4, 0x35, 0x57, 0xf5,
|
||||
0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x58, 0x82, 0x85, 0x57, 0x83, 0xa3, 0xa3, 0xa3, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x58, 0x24, 0x23, 0xf5, 0x82, 0xe4, 0x35, 0x57, 0xf5, 0x83, 0x22,
|
||||
0xe5, 0x29, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0xfe, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0xe5, 0x29,
|
||||
0x25, 0xe0, 0x25, 0xe0, 0x24, 0xfd, 0xf8, 0xe2, 0x2f, 0xf5, 0x24, 0x18, 0xe2, 0x3e, 0xf5, 0x23,
|
||||
0xe5, 0x29, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x02, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0xe5, 0x29,
|
||||
0x25, 0xe0, 0x25, 0xe0, 0x22, 0xee, 0xf0, 0xef, 0xa3, 0xf0, 0x85, 0x58, 0x82, 0x85, 0x57, 0x83,
|
||||
0xa3, 0x22, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xa3, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0xf5,
|
||||
0x83, 0xe5, 0x82, 0x25, 0x45, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0x22, 0x85, 0x1e, 0x82,
|
||||
0x85, 0x1d, 0x83, 0x74, 0x66, 0x93, 0xfe, 0x74, 0x67, 0x93, 0x78, 0x06, 0x22, 0x85, 0x5f, 0x82,
|
||||
0x85, 0x5e, 0x83, 0x22, 0xff, 0xe4, 0xfc, 0xfd, 0xab, 0x1f, 0x05, 0x1f, 0xeb, 0x25, 0xe0, 0x25,
|
||||
0xe0, 0x24, 0xf5, 0xf5, 0x82, 0xe4, 0x34, 0x03, 0xf5, 0x83, 0x22, 0x13, 0xff, 0xe4, 0xfc, 0xfd,
|
||||
0xeb, 0x2f, 0xff, 0xea, 0x3e, 0xfe, 0xed, 0x39, 0xfd, 0xec, 0x38, 0xfc, 0x22, 0x74, 0x01, 0x93,
|
||||
0xfe, 0x74, 0x02, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0x02, 0x0c, 0x0a, 0xe5, 0x20, 0x75, 0xf0, 0x27,
|
||||
0xa4, 0x24, 0x4d, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0xf5, 0x83, 0x22, 0xe5, 0x22, 0x75, 0xf0, 0x0a,
|
||||
0xa4, 0x24, 0xb7, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0x22, 0x25, 0xe0, 0x24, 0x01, 0xf8, 0xe2, 0x2f,
|
||||
0xff, 0x18, 0xe2, 0x3e, 0xfe, 0x22, 0xf5, 0x83, 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa,
|
||||
0xa3, 0xe0, 0xfb, 0x02, 0x0a, 0x97, 0xa3, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x58, 0x22,
|
||||
0x90, 0x04, 0x70, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x22, 0x13, 0x2d, 0xff, 0xee, 0x3c, 0xfe,
|
||||
0x7c, 0x00, 0x7d, 0x03, 0x02, 0x09, 0x35, 0x90, 0x04, 0xa1, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4,
|
||||
0xfc, 0xfd, 0x02, 0x0c, 0x0a, 0x33, 0x95, 0xe0, 0xfd, 0xfc, 0xab, 0x36, 0xaa, 0x35, 0xa9, 0x34,
|
||||
0xa8, 0x33, 0x22, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0x12, 0x0c, 0x0a, 0x12, 0x0a, 0x97, 0xe4, 0x7b,
|
||||
0x02, 0xfa, 0xf9, 0xf8, 0x22, 0x7b, 0x01, 0x7e, 0x00, 0x7f, 0x07, 0x02, 0x08, 0x95, 0xc3, 0xef,
|
||||
0x9b, 0xff, 0xee, 0x9a, 0xfe, 0xed, 0x94, 0x00, 0xfd, 0xec, 0x94, 0x00, 0xfc, 0x02, 0x0c, 0x17,
|
||||
0x24, 0x01, 0xf8, 0xe2, 0x2f, 0xf5, 0x26, 0x18, 0xe2, 0x3e, 0xf5, 0x25, 0x22, 0x7e, 0x00, 0x7f,
|
||||
0x06, 0x7d, 0x00, 0x7b, 0x01, 0x02, 0x0c, 0xb2, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0x25, 0x29, 0xf5,
|
||||
0x29, 0xee, 0x35, 0x28, 0xf5, 0x28, 0xeb, 0x25, 0xe0, 0x22, 0xe5, 0x24, 0x25, 0x26, 0xff, 0xe5,
|
||||
0x23, 0x35, 0x25, 0xfe, 0xe5, 0x28, 0x2f, 0xff, 0xe5, 0x27, 0x3e, 0x22, 0x85, 0x1e, 0x82, 0x85,
|
||||
0x1d, 0x83, 0x74, 0x6c, 0x93, 0xfe, 0x74, 0x6d, 0x93, 0x78, 0x06, 0x22, 0xf8, 0xe2, 0xfe, 0x08,
|
||||
0xe2, 0xff, 0x22, 0xd3, 0xe5, 0x24, 0x95, 0x26, 0xe5, 0x23, 0x95, 0x25, 0x22, 0xe5, 0x22, 0x75,
|
||||
0xf0, 0x0a, 0xa4, 0x24, 0xa3, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0xf5, 0x83, 0x22, 0xf8, 0xe2, 0xfe,
|
||||
0x08, 0xe2, 0x25, 0x27, 0xf5, 0x27, 0xee, 0x35, 0x26, 0xf5, 0x26, 0x22, 0xa3, 0xa3, 0xe0, 0xfc,
|
||||
0xa3, 0xe0, 0xc3, 0x9f, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0x02, 0x0a, 0x97,
|
||||
0xfc, 0xa8, 0x04, 0xa9, 0x05, 0xaa, 0x06, 0xab, 0x07, 0x22, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x02,
|
||||
0x09, 0x35, 0xf0, 0xe5, 0x20, 0x75, 0xf0, 0x27, 0xa4, 0x22, 0xee, 0xf2, 0x08, 0xef, 0xf2, 0x78,
|
||||
0xb3, 0xe6, 0x25, 0xe0, 0x25, 0xe0, 0x22, 0xce, 0xa2, 0xe7, 0x13, 0xce, 0x13, 0x22, 0xe0, 0xfc,
|
||||
0xa3, 0xe0, 0x2f, 0xff, 0xee, 0x3c, 0xfe, 0xef, 0x78, 0x02, 0x22, 0xe5, 0x82, 0x2d, 0xf5, 0x82,
|
||||
0xe5, 0x83, 0x3c, 0xf5, 0x83, 0xef, 0xf0, 0x22, 0x78, 0x81, 0x12, 0x0b, 0xee, 0x78, 0x7d, 0x12,
|
||||
0x0c, 0x0a, 0xeb, 0x2f, 0x22, 0x78, 0x7d, 0xe4, 0xfc, 0xfd, 0x02, 0x0c, 0x17, 0x35, 0x2c, 0xfe,
|
||||
0xe4, 0x35, 0x2b, 0xfd, 0xe4, 0x35, 0x2a, 0xfc, 0x22, 0x12, 0x0b, 0x22, 0x8f, 0x2d, 0x8e, 0x2c,
|
||||
0x8d, 0x2b, 0x8c, 0x2a, 0x22, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0xfd, 0xd3, 0x9f, 0xec, 0x9e, 0x22,
|
||||
0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x58, 0x22, 0x74, 0x24, 0x25, 0x23, 0xf8, 0xa6, 0x06, 0x78,
|
||||
0x83, 0xe6, 0x22, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0x22, 0xab, 0x4a, 0xaa, 0x4b, 0xa9, 0x4c,
|
||||
0x02, 0x09, 0xe8, 0xe2, 0x2f, 0xf5, 0x28, 0x18, 0xe2, 0x3e, 0xf5, 0x27, 0x22, 0xe4, 0xf5, 0x22,
|
||||
0xf5, 0x23, 0xf5, 0x24, 0xf5, 0x25, 0x90, 0x04, 0xa1, 0xf0, 0xa3, 0xf0, 0xe5, 0x5a, 0xb4, 0xff,
|
||||
0x09, 0xe5, 0x5b, 0xf4, 0x60, 0x04, 0xe5, 0x5b, 0x80, 0x0c, 0xe5, 0x5a, 0xf4, 0x60, 0x0c, 0xe5,
|
||||
0x5b, 0xb4, 0xff, 0x07, 0xe5, 0x5a, 0x25, 0xe0, 0xfb, 0x80, 0x21, 0xe5, 0x5a, 0xf4, 0x60, 0x10,
|
||||
0xe5, 0x5b, 0xf4, 0x60, 0x0b, 0x90, 0x04, 0x9c, 0xe0, 0xd3, 0x94, 0x30, 0x40, 0x02, 0x80, 0xfe,
|
||||
0xe4, 0x90, 0x04, 0x9c, 0xf0, 0x90, 0x04, 0x9b, 0x74, 0xff, 0xf0, 0x22, 0xeb, 0xc3, 0x13, 0xfa,
|
||||
0xeb, 0x25, 0xe0, 0x24, 0x00, 0xf8, 0xe2, 0xf5, 0x28, 0x08, 0xe2, 0xf5, 0x29, 0xeb, 0x25, 0xe0,
|
||||
0x24, 0x02, 0xf8, 0xe2, 0xf5, 0x26, 0x08, 0xe2, 0xf5, 0x27, 0xea, 0xd3, 0x94, 0x01, 0x40, 0x30,
|
||||
0x74, 0x50, 0x2b, 0xf8, 0xe2, 0xc3, 0x13, 0x20, 0xe0, 0x0a, 0x74, 0x51, 0x2b, 0xf8, 0xe2, 0xc3,
|
||||
0x13, 0x30, 0xe0, 0x1c, 0xeb, 0x25, 0xe0, 0x24, 0xfa, 0x12, 0x0e, 0xbc, 0xeb, 0x25, 0xe0, 0x24,
|
||||
0xf8, 0x12, 0x0f, 0x75, 0x40, 0x02, 0x80, 0x04, 0xae, 0x04, 0xaf, 0x05, 0x8e, 0x22, 0x8f, 0x23,
|
||||
0x78, 0xb3, 0xe6, 0xf9, 0x24, 0xfe, 0xff, 0xea, 0xc3, 0x9f, 0x50, 0x30, 0x74, 0x58, 0x2b, 0xf8,
|
||||
0xe2, 0xc3, 0x13, 0x20, 0xe0, 0x0a, 0x74, 0x59, 0x2b, 0xf8, 0xe2, 0xc3, 0x13, 0x30, 0xe0, 0x1c,
|
||||
0xeb, 0x25, 0xe0, 0x24, 0x0a, 0x12, 0x0e, 0xbc, 0xeb, 0x25, 0xe0, 0x24, 0x08, 0x12, 0x0f, 0x75,
|
||||
0x40, 0x02, 0x80, 0x04, 0xae, 0x04, 0xaf, 0x05, 0x8e, 0x24, 0x8f, 0x25, 0xea, 0xd3, 0x94, 0x00,
|
||||
0x50, 0x03, 0x02, 0x12, 0x02, 0xeb, 0x25, 0xe0, 0x24, 0xfc, 0x12, 0x0e, 0x88, 0x24, 0xfe, 0x12,
|
||||
0x0e, 0xdd, 0xe9, 0x14, 0xff, 0xea, 0xc3, 0x9f, 0x40, 0x03, 0x02, 0x12, 0x02, 0xeb, 0x25, 0xe0,
|
||||
0x24, 0x04, 0x12, 0x0e, 0x88, 0x24, 0x06, 0x12, 0x0e, 0xdd, 0xe5, 0x23, 0x25, 0x25, 0xff, 0xe5,
|
||||
0x22, 0x35, 0x24, 0xfe, 0x7c, 0x00, 0x7d, 0x07, 0x12, 0x09, 0x35, 0xef, 0x78, 0x02, 0xce, 0xc3,
|
||||
0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x90, 0x04, 0xa1, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xe4, 0xf5,
|
||||
0x2a, 0x90, 0x04, 0x9b, 0xe0, 0xb4, 0xff, 0x09, 0x75, 0x2a, 0x01, 0xe4, 0xa3, 0xf0, 0x02, 0x11,
|
||||
0xd9, 0x12, 0x0f, 0x93, 0x74, 0x06, 0x93, 0xf5, 0x2b, 0xff, 0x90, 0x04, 0xa0, 0xe0, 0x2f, 0xff,
|
||||
0x90, 0x04, 0x9f, 0xe0, 0x34, 0x00, 0xfe, 0xc3, 0xef, 0x95, 0x29, 0xee, 0x95, 0x28, 0x7f, 0x00,
|
||||
0x50, 0x02, 0x7f, 0x01, 0x8f, 0x2c, 0x90, 0x04, 0x9e, 0xe0, 0x25, 0x2b, 0xff, 0x90, 0x04, 0x9d,
|
||||
0xe0, 0x34, 0x00, 0xfe, 0xc3, 0xef, 0x95, 0x27, 0xee, 0x95, 0x26, 0x7f, 0x00, 0x50, 0x02, 0x7f,
|
||||
0x01, 0x8f, 0x2d, 0x7e, 0x00, 0xe5, 0x29, 0x25, 0x2b, 0xff, 0xee, 0x35, 0x28, 0xfe, 0xd3, 0x90,
|
||||
0x04, 0xa0, 0xe0, 0x9f, 0x90, 0x04, 0x9f, 0xe0, 0x9e, 0x7f, 0x00, 0x40, 0x02, 0x7f, 0x01, 0x8f,
|
||||
0x2e, 0x7e, 0x00, 0xe5, 0x27, 0x25, 0x2b, 0xff, 0xee, 0x35, 0x26, 0xfe, 0xd3, 0x90, 0x04, 0x9e,
|
||||
0xe0, 0x9f, 0x90, 0x04, 0x9d, 0xe0, 0x9e, 0x7f, 0x00, 0x40, 0x02, 0x7f, 0x01, 0x8f, 0x2f, 0xe5,
|
||||
0x2c, 0x60, 0x04, 0xe5, 0x2f, 0x70, 0x08, 0xe5, 0x2e, 0x60, 0x0d, 0xe5, 0x2d, 0x60, 0x09, 0x90,
|
||||
0x04, 0x9c, 0xe0, 0x60, 0x03, 0xc3, 0x13, 0xf0, 0x90, 0x04, 0x9b, 0xe0, 0x6a, 0x60, 0x0e, 0xe5,
|
||||
0x2e, 0x70, 0x0a, 0xe5, 0x2f, 0x70, 0x06, 0xa3, 0xe0, 0x60, 0x02, 0x14, 0xf0, 0xe5, 0x2e, 0x60,
|
||||
0x11, 0xe5, 0x2f, 0x60, 0x0d, 0x90, 0x04, 0x9c, 0xe0, 0xc3, 0x94, 0x80, 0x50, 0x04, 0xe0, 0x24,
|
||||
0x10, 0xf0, 0xe5, 0x2c, 0x60, 0x10, 0xe5, 0x2d, 0x60, 0x0c, 0x90, 0x04, 0x9c, 0xe0, 0xc3, 0x94,
|
||||
0x80, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0xe5, 0x2c, 0x70, 0x0c, 0xe5, 0x2d, 0x70, 0x08, 0xe5, 0x2e,
|
||||
0x70, 0x04, 0xe5, 0x2f, 0x60, 0x03, 0x75, 0x2a, 0x01, 0x90, 0x04, 0x9c, 0xe0, 0xff, 0x78, 0x4a,
|
||||
0xe4, 0xf2, 0x08, 0xef, 0xf2, 0x90, 0x04, 0x9b, 0xea, 0xf0, 0xe5, 0x2a, 0x60, 0x14, 0x90, 0x04,
|
||||
0x9f, 0xe5, 0x28, 0xf0, 0xa3, 0xe5, 0x29, 0xf0, 0x90, 0x04, 0x9d, 0xe5, 0x26, 0xf0, 0xa3, 0xe5,
|
||||
0x27, 0xf0, 0x22, 0x8b, 0x1d, 0x8a, 0x1e, 0x89, 0x1f, 0x7e, 0x00, 0x7f, 0x0c, 0x7d, 0x00, 0x12,
|
||||
0x0c, 0xb2, 0x7a, 0x04, 0x79, 0x4e, 0x12, 0x0e, 0x7d, 0x7a, 0x04, 0x79, 0x75, 0x12, 0x0e, 0x7d,
|
||||
0xe5, 0x5d, 0x14, 0x60, 0x3a, 0x04, 0x60, 0x03, 0x02, 0x13, 0xd9, 0xe4, 0xf5, 0x5c, 0xff, 0x12,
|
||||
0x2d, 0x8d, 0x12, 0x2d, 0xbd, 0xef, 0x64, 0x03, 0x60, 0x12, 0xe4, 0x90, 0x04, 0xd4, 0xf0, 0x12,
|
||||
0x13, 0xdd, 0x30, 0xe0, 0xed, 0x78, 0xab, 0xe6, 0x30, 0xe4, 0xe7, 0x22, 0x7e, 0x00, 0x7f, 0x4e,
|
||||
0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x04, 0x79, 0x4d, 0x12, 0x0c, 0xb2, 0x75, 0x5d, 0x01, 0x22, 0x12,
|
||||
0x13, 0xdd, 0x30, 0xe0, 0x09, 0x78, 0xab, 0xe6, 0x30, 0xe4, 0x03, 0x02, 0x13, 0xd9, 0x78, 0xab,
|
||||
0xe6, 0x20, 0xe3, 0x03, 0x02, 0x13, 0x66, 0x12, 0x0d, 0x8d, 0x74, 0x0e, 0x93, 0x24, 0x01, 0xf5,
|
||||
0x21, 0x74, 0x0d, 0x93, 0x34, 0x00, 0xf5, 0x20, 0x78, 0x00, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0xac,
|
||||
0x20, 0xad, 0x21, 0x12, 0x09, 0x35, 0x78, 0x00, 0xee, 0xf2, 0x08, 0xef, 0xf2, 0x08, 0x12, 0x0f,
|
||||
0x0a, 0x78, 0x02, 0x12, 0x0f, 0x1a, 0x24, 0xfe, 0xf8, 0xc0, 0x00, 0x12, 0x0f, 0x0a, 0xd0, 0x00,
|
||||
0x12, 0x0f, 0x1a, 0x24, 0xfc, 0xf8, 0xc0, 0x00, 0x12, 0x0f, 0x0a, 0xd0, 0x00, 0xee, 0xf2, 0x08,
|
||||
0xef, 0xf2, 0x12, 0x24, 0xd5, 0xaf, 0x5a, 0x12, 0x29, 0x54, 0x8f, 0x5a, 0xaf, 0x5b, 0x12, 0x29,
|
||||
0x54, 0x8f, 0x5b, 0x75, 0x25, 0xfe, 0x75, 0x26, 0x00, 0x75, 0x27, 0x00, 0x7b, 0x00, 0x7a, 0x00,
|
||||
0x79, 0x5a, 0x12, 0x34, 0x8e, 0xaf, 0x59, 0xef, 0xc3, 0x13, 0x30, 0xe0, 0x03, 0x12, 0x0f, 0xad,
|
||||
0xe4, 0xf5, 0x20, 0x74, 0x5a, 0x25, 0x20, 0xf8, 0xe6, 0xff, 0x12, 0x0d, 0xcb, 0xef, 0xf0, 0x12,
|
||||
0x0d, 0xcb, 0xe0, 0xf4, 0x60, 0x49, 0xaf, 0x20, 0x12, 0x17, 0x53, 0x12, 0x0f, 0x13, 0x24, 0x4e,
|
||||
0xf5, 0x82, 0xe4, 0x34, 0x04, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xaf, 0x20, 0x12, 0x21,
|
||||
0x60, 0x12, 0x0f, 0x13, 0x24, 0x50, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0xf5, 0x83, 0xee, 0xf0, 0xa3,
|
||||
0xef, 0x12, 0x0f, 0x12, 0x24, 0x52, 0xf5, 0x82, 0xe4, 0x34, 0x04, 0xf5, 0x83, 0x74, 0x01, 0x12,
|
||||
0x0f, 0x12, 0x24, 0x4e, 0xf9, 0x74, 0x04, 0x35, 0xf0, 0xfa, 0x7b, 0x01, 0x12, 0x00, 0x04, 0x05,
|
||||
0x20, 0xe5, 0x20, 0xc3, 0x94, 0x02, 0x40, 0x9b, 0x12, 0x15, 0xa5, 0x78, 0xab, 0xe6, 0x30, 0xe5,
|
||||
0x26, 0x75, 0x5c, 0x01, 0x80, 0x21, 0x90, 0x04, 0x9b, 0x74, 0xff, 0xf0, 0xe4, 0xa3, 0xf0, 0x90,
|
||||
0x04, 0xa1, 0xf0, 0xa3, 0xf0, 0x90, 0x04, 0x9f, 0xf0, 0xa3, 0xf0, 0x90, 0x04, 0x9d, 0xf0, 0xa3,
|
||||
0xf0, 0xe5, 0x5c, 0x60, 0x02, 0x80, 0x52, 0x75, 0x57, 0x04, 0x75, 0x58, 0x4d, 0xe4, 0xf5, 0x20,
|
||||
0xe5, 0x20, 0xc3, 0x94, 0x02, 0x50, 0x15, 0x12, 0x00, 0x24, 0x12, 0x28, 0xc9, 0x05, 0x20, 0x74,
|
||||
0x27, 0x25, 0x58, 0xf5, 0x58, 0xe4, 0x35, 0x57, 0xf5, 0x57, 0x80, 0xe4, 0xa8, 0x1f, 0xac, 0x1e,
|
||||
0xad, 0x1d, 0x7b, 0x01, 0x7a, 0x04, 0x79, 0x4e, 0x7e, 0x00, 0x7f, 0x06, 0x12, 0x08, 0x95, 0xe5,
|
||||
0x1f, 0x24, 0x06, 0xf9, 0xe4, 0x35, 0x1e, 0xa8, 0x01, 0xfc, 0xad, 0x1d, 0x7b, 0x01, 0x7a, 0x04,
|
||||
0x79, 0x75, 0x7e, 0x00, 0x7f, 0x06, 0x02, 0x08, 0x95, 0xe4, 0xf5, 0x5d, 0x22, 0x12, 0x20, 0x0d,
|
||||
0xaf, 0x59, 0xef, 0x13, 0x13, 0x54, 0x3f, 0x22, 0x8e, 0x1d, 0x8f, 0x1e, 0xe4, 0xf5, 0x5d, 0x8f,
|
||||
0x82, 0x8e, 0x83, 0x74, 0x63, 0x93, 0xff, 0x78, 0xb3, 0xf6, 0xe5, 0x1e, 0x24, 0x63, 0xf5, 0x5f,
|
||||
0xe4, 0x35, 0x1d, 0xf5, 0x5e, 0xe5, 0x59, 0x44, 0x01, 0xf5, 0x59, 0x54, 0xfd, 0xf5, 0x59, 0x44,
|
||||
0x04, 0xf5, 0x59, 0xe4, 0x90, 0x04, 0x56, 0xf0, 0x90, 0x04, 0x7d, 0xf0, 0x90, 0x04, 0x57, 0xf0,
|
||||
0x90, 0x04, 0x7e, 0xf0, 0xef, 0xd3, 0x94, 0x02, 0x50, 0x03, 0x02, 0x15, 0x68, 0x12, 0x0d, 0x7d,
|
||||
0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xfb, 0xaa, 0x06, 0x78, 0xb3, 0xe6, 0xfd, 0x7c, 0x00,
|
||||
0xaf, 0x03, 0x12, 0x09, 0x47, 0x8e, 0x20, 0x8f, 0x21, 0x12, 0x0e, 0xac, 0xc3, 0x33, 0xce, 0x33,
|
||||
0xce, 0xd8, 0xf9, 0x2b, 0xfd, 0xea, 0x3e, 0xfc, 0x85, 0x1e, 0x82, 0x85, 0x1d, 0x83, 0x74, 0x6e,
|
||||
0x93, 0xfe, 0x74, 0x6f, 0x93, 0x78, 0x06, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0x2d, 0xfd,
|
||||
0xec, 0x3e, 0xfc, 0xe5, 0x21, 0x25, 0xe0, 0xff, 0xe5, 0x20, 0x33, 0xfe, 0xc3, 0xed, 0x9f, 0xff,
|
||||
0xec, 0x9e, 0xfe, 0xe4, 0xfc, 0xfd, 0xc0, 0x06, 0xc0, 0x07, 0x78, 0xb3, 0xe6, 0x24, 0xfe, 0xff,
|
||||
0xe4, 0x34, 0xff, 0xab, 0x07, 0xfa, 0xe4, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0b, 0x22,
|
||||
0x8f, 0x25, 0x8e, 0x24, 0x8d, 0x23, 0x8c, 0x22, 0x85, 0x1e, 0x82, 0x85, 0x1d, 0x83, 0x74, 0x63,
|
||||
0x93, 0xd3, 0x94, 0x14, 0x40, 0x02, 0x80, 0xfe, 0x90, 0x03, 0xf5, 0x12, 0x0c, 0x48, 0x00, 0x00,
|
||||
0x00, 0x40, 0x90, 0x03, 0xf9, 0x12, 0x0c, 0x48, 0x00, 0x00, 0x00, 0x40, 0x12, 0x0e, 0x4e, 0xaf,
|
||||
0x25, 0xae, 0x24, 0xad, 0x23, 0xac, 0x22, 0x12, 0x0b, 0x22, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06,
|
||||
0xc0, 0x07, 0x12, 0x0e, 0xac, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xc3, 0xe5, 0x21,
|
||||
0x9f, 0xff, 0xe5, 0x20, 0x9e, 0xfe, 0xe4, 0xfc, 0xfd, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0,
|
||||
0x00, 0x12, 0x0d, 0xb0, 0x90, 0x03, 0xfd, 0x12, 0x0c, 0x23, 0x75, 0x1f, 0x03, 0xe5, 0x1f, 0xc3,
|
||||
0x78, 0xb3, 0x96, 0x50, 0x34, 0xe5, 0x1f, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0xf1, 0xf5, 0x82, 0xe4,
|
||||
0x34, 0x03, 0xf5, 0x83, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0x25, 0x25,
|
||||
0xff, 0xee, 0x35, 0x24, 0xfe, 0xed, 0x35, 0x23, 0xfd, 0xec, 0x35, 0x22, 0xfc, 0xe5, 0x1f, 0x12,
|
||||
0x0d, 0x9d, 0x12, 0x0c, 0x23, 0x05, 0x1f, 0x80, 0xc4, 0x12, 0x0d, 0x7d, 0xc3, 0x33, 0xce, 0x33,
|
||||
0xce, 0xd8, 0xf9, 0x12, 0x0d, 0x94, 0x12, 0x0c, 0x23, 0x12, 0x0d, 0x7d, 0xc3, 0x33, 0xce, 0x33,
|
||||
0xce, 0xd8, 0xf9, 0x12, 0x0d, 0x94, 0x80, 0x39, 0x78, 0xb3, 0xe6, 0xfb, 0xb4, 0x02, 0x1d, 0x90,
|
||||
0x03, 0xf5, 0x12, 0x0c, 0x48, 0x00, 0x00, 0x00, 0x40, 0x12, 0x0d, 0x7d, 0xc3, 0x33, 0xce, 0x33,
|
||||
0xce, 0xd8, 0xf9, 0xff, 0xe4, 0xfc, 0xfd, 0x90, 0x03, 0xf9, 0x80, 0x15, 0xeb, 0xb4, 0x01, 0x14,
|
||||
0x12, 0x0d, 0x7d, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4, 0xfc, 0xfd, 0x90, 0x03,
|
||||
0xf5, 0x12, 0x0c, 0x23, 0x22, 0x90, 0x04, 0x52, 0xe0, 0x60, 0x0e, 0x90, 0x04, 0x79, 0xe0, 0x7f,
|
||||
0x01, 0x60, 0x02, 0x7f, 0x02, 0x8f, 0x27, 0x80, 0x0c, 0x90, 0x04, 0x79, 0xe0, 0x7f, 0x00, 0x60,
|
||||
0x02, 0x7f, 0x01, 0x8f, 0x27, 0x90, 0x04, 0x72, 0xe0, 0xff, 0x60, 0x0e, 0x90, 0x04, 0x99, 0xe0,
|
||||
0x7e, 0x01, 0x60, 0x02, 0x7e, 0x02, 0x8e, 0x28, 0x80, 0x0c, 0x90, 0x04, 0x99, 0xe0, 0x7e, 0x00,
|
||||
0x60, 0x02, 0x7e, 0x01, 0x8e, 0x28, 0xe4, 0xf5, 0x22, 0xe5, 0x27, 0x64, 0x01, 0x70, 0x40, 0xe5,
|
||||
0x28, 0x70, 0x03, 0x02, 0x16, 0xd1, 0xe5, 0x28, 0xb4, 0x01, 0x12, 0xef, 0x60, 0x03, 0x02, 0x16,
|
||||
0xd1, 0x90, 0x04, 0x99, 0xe0, 0x70, 0x03, 0x02, 0x16, 0xd1, 0x02, 0x16, 0xce, 0xe5, 0x28, 0x64,
|
||||
0x02, 0x60, 0x03, 0x02, 0x16, 0xd1, 0x12, 0x16, 0xff, 0x8e, 0x23, 0x8f, 0x24, 0x12, 0x17, 0x18,
|
||||
0x8e, 0x25, 0x8f, 0x26, 0x12, 0x0e, 0xc3, 0x50, 0x03, 0x02, 0x16, 0xd1, 0x02, 0x16, 0xce, 0xe5,
|
||||
0x27, 0x64, 0x02, 0x60, 0x03, 0x02, 0x16, 0xd1, 0xe5, 0x28, 0x70, 0x03, 0x02, 0x16, 0xd1, 0xe5,
|
||||
0x28, 0x64, 0x01, 0x70, 0x42, 0x90, 0x04, 0x72, 0xe0, 0x60, 0x15, 0x12, 0x16, 0xff, 0x8e, 0x23,
|
||||
0x8f, 0x24, 0x12, 0x0e, 0x10, 0x90, 0x04, 0x78, 0xe0, 0x9f, 0xff, 0x90, 0x04, 0x77, 0x80, 0x16,
|
||||
0x12, 0x17, 0x31, 0x8e, 0x23, 0x8f, 0x24, 0x90, 0x04, 0x97, 0x12, 0x0e, 0x13, 0x90, 0x04, 0x51,
|
||||
0xe0, 0x9f, 0xff, 0x90, 0x04, 0x50, 0xe0, 0x9e, 0xfe, 0x12, 0x2d, 0xa5, 0x8e, 0x25, 0x8f, 0x26,
|
||||
0x12, 0x0e, 0xc3, 0x40, 0x4c, 0x80, 0x47, 0xe5, 0x28, 0x64, 0x02, 0x70, 0x44, 0x12, 0x17, 0x31,
|
||||
0xc0, 0x06, 0xc0, 0x07, 0x12, 0x0e, 0x10, 0x90, 0x04, 0x51, 0xe0, 0x90, 0x04, 0x50, 0x12, 0x17,
|
||||
0x4a, 0xd0, 0xe0, 0x2f, 0xf5, 0x24, 0xd0, 0xe0, 0x3e, 0xf5, 0x23, 0x12, 0x0e, 0x10, 0x90, 0x04,
|
||||
0x78, 0xe0, 0x90, 0x04, 0x77, 0x12, 0x17, 0x4a, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x17, 0x18, 0xd0,
|
||||
0xe0, 0x2f, 0xf5, 0x26, 0xd0, 0xe0, 0x3e, 0xf5, 0x25, 0x12, 0x0e, 0xc3, 0x40, 0x03, 0x75, 0x22,
|
||||
0x01, 0xe5, 0x22, 0x60, 0x29, 0x78, 0x7d, 0x7c, 0x00, 0x7d, 0x00, 0x7a, 0x04, 0x79, 0x4d, 0x12,
|
||||
0x0e, 0x55, 0x78, 0x4d, 0x7c, 0x04, 0x7d, 0x01, 0x7a, 0x04, 0x79, 0x74, 0x12, 0x0e, 0x55, 0x78,
|
||||
0x74, 0x7c, 0x04, 0x7d, 0x01, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7d, 0x12, 0x0e, 0x57, 0x22, 0x90,
|
||||
0x04, 0x70, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x04, 0x51, 0xe0, 0x9f, 0xff, 0x90, 0x04,
|
||||
0x50, 0xe0, 0x9e, 0xfe, 0x12, 0x2d, 0xa5, 0x22, 0x90, 0x04, 0x97, 0xe0, 0xfe, 0xa3, 0xe0, 0xff,
|
||||
0xc3, 0x90, 0x04, 0x51, 0xe0, 0x9f, 0xff, 0x90, 0x04, 0x50, 0xe0, 0x9e, 0xfe, 0x12, 0x2d, 0xa5,
|
||||
0x22, 0x90, 0x04, 0x97, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x04, 0x78, 0xe0, 0x9f, 0xff,
|
||||
0x90, 0x04, 0x77, 0xe0, 0x9e, 0xfe, 0x12, 0x2d, 0xa5, 0x22, 0x9f, 0xff, 0xe0, 0x9e, 0xfe, 0x12,
|
||||
0x2d, 0xa5, 0x22, 0xef, 0x12, 0x0d, 0xcd, 0xe0, 0xff, 0x70, 0x04, 0xf5, 0x22, 0x80, 0x18, 0x78,
|
||||
0xb3, 0xe6, 0xfe, 0x14, 0xb5, 0x07, 0x09, 0xee, 0x25, 0xe0, 0x24, 0xfa, 0xf5, 0x22, 0x80, 0x07,
|
||||
0xef, 0x25, 0xe0, 0x24, 0xfe, 0xf5, 0x22, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x04, 0x12, 0x0e, 0xbc,
|
||||
0xe5, 0x22, 0x12, 0x0d, 0xe9, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x09, 0x12, 0x0d, 0xed, 0x12, 0x0f,
|
||||
0x55, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x06, 0x12, 0x0e, 0xbc, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x03,
|
||||
0x12, 0x0d, 0xed, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x0b, 0x12, 0x0d, 0xed, 0x78, 0x81, 0x12, 0x0f,
|
||||
0x57, 0x78, 0x7d, 0x12, 0x0e, 0x27, 0xd3, 0x12, 0x0b, 0xca, 0x40, 0x3d, 0x78, 0x81, 0x12, 0x0e,
|
||||
0x27, 0xd3, 0x12, 0x0b, 0xca, 0x40, 0x32, 0x78, 0x7d, 0x12, 0x0b, 0xee, 0xc0, 0x06, 0xc0, 0x07,
|
||||
0x90, 0x04, 0xa1, 0xe0, 0xfe, 0xa3, 0xe0, 0xfb, 0xaa, 0x06, 0xd0, 0x07, 0xd0, 0x06, 0x78, 0x7d,
|
||||
0x12, 0x0e, 0x5e, 0x78, 0x81, 0x12, 0x0b, 0xee, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x04, 0xa1, 0xa3,
|
||||
0xd0, 0x07, 0xd0, 0x06, 0x78, 0x81, 0x12, 0x0e, 0x5e, 0x12, 0x0d, 0x8d, 0x74, 0x07, 0x93, 0xfe,
|
||||
0x74, 0x08, 0x78, 0x81, 0x12, 0x0e, 0x43, 0x12, 0x0a, 0x97, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06,
|
||||
0xc0, 0x07, 0x12, 0x0d, 0x8d, 0x78, 0x81, 0x12, 0x0d, 0xbd, 0x12, 0x0a, 0x97, 0xd0, 0x03, 0xd0,
|
||||
0x02, 0xd0, 0x01, 0xd0, 0x00, 0xef, 0x2b, 0xff, 0xee, 0x3a, 0x12, 0x0d, 0xb5, 0xc0, 0x04, 0xc0,
|
||||
0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x0d, 0x8d, 0x74, 0x05, 0x93, 0xfe, 0x74, 0x06, 0x78, 0x7d,
|
||||
0x12, 0x0e, 0x43, 0x12, 0x0a, 0x97, 0x12, 0x0f, 0x01, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0,
|
||||
0x04, 0xc3, 0xef, 0x9b, 0xff, 0xee, 0x9a, 0xfe, 0xed, 0x99, 0xfd, 0xec, 0x98, 0xfc, 0x78, 0x85,
|
||||
0x12, 0x0c, 0x17, 0x78, 0x85, 0x12, 0x0b, 0xee, 0xec, 0x33, 0x50, 0x0b, 0x78, 0x7d, 0x12, 0x0c,
|
||||
0x2f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x65, 0x12, 0x0f, 0x48, 0xff, 0xea, 0x3e, 0xfe, 0xe9, 0x3d,
|
||||
0xfd, 0xe8, 0x3c, 0xfc, 0x12, 0x0e, 0x4e, 0x12, 0x0b, 0x22, 0x78, 0x85, 0x12, 0x0c, 0x0a, 0xef,
|
||||
0x2b, 0xff, 0xee, 0x3a, 0x12, 0x0d, 0xb5, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12,
|
||||
0x0f, 0x48, 0xfb, 0xea, 0x3e, 0xfa, 0xe9, 0x3d, 0xf9, 0xe8, 0x3c, 0xf8, 0xd0, 0x07, 0xd0, 0x06,
|
||||
0xd0, 0x05, 0xd0, 0x04, 0x12, 0x0b, 0x22, 0x78, 0x7d, 0x12, 0x0c, 0x17, 0x12, 0x0d, 0x8d, 0x78,
|
||||
0x7d, 0x12, 0x0d, 0xbd, 0xd3, 0x12, 0x0b, 0xca, 0x40, 0x12, 0x12, 0x0d, 0x8d, 0x74, 0x02, 0x93,
|
||||
0x24, 0xff, 0xff, 0x74, 0x01, 0x93, 0x34, 0xff, 0xfe, 0x12, 0x0f, 0x55, 0x78, 0x7d, 0x12, 0x0b,
|
||||
0xee, 0x22, 0x8f, 0x20, 0x8d, 0x21, 0x43, 0xad, 0x04, 0x43, 0x95, 0x80, 0xe4, 0x90, 0xff, 0x41,
|
||||
0xf0, 0x90, 0xff, 0x87, 0x74, 0x03, 0xf0, 0xe4, 0x90, 0xff, 0x4b, 0xf0, 0x90, 0xff, 0x49, 0x04,
|
||||
0xf0, 0xe4, 0x90, 0xff, 0x4a, 0xf0, 0x90, 0xff, 0x42, 0x04, 0xf0, 0x90, 0xff, 0x55, 0x74, 0xc8,
|
||||
0xf0, 0x90, 0xff, 0x5d, 0xf0, 0xe4, 0x12, 0x2d, 0x0b, 0x74, 0x10, 0xf0, 0xe4, 0xf5, 0x23, 0xf5,
|
||||
0x24, 0xf5, 0x25, 0xf5, 0x26, 0xf5, 0x22, 0xe4, 0x90, 0xff, 0x50, 0xf0, 0x90, 0xff, 0x58, 0xf0,
|
||||
0xe5, 0x20, 0xf4, 0x60, 0x0e, 0xe4, 0xfd, 0xaf, 0x20, 0x12, 0x2b, 0xe8, 0x7d, 0x02, 0xaf, 0x20,
|
||||
0x12, 0x2a, 0xd9, 0xe5, 0x21, 0xf4, 0x60, 0x0e, 0xe4, 0xfd, 0xaf, 0x21, 0x12, 0x2b, 0xe8, 0x7d,
|
||||
0x02, 0xaf, 0x21, 0x12, 0x2a, 0xd9, 0xe4, 0xff, 0xe4, 0x90, 0x04, 0xd4, 0xf0, 0x0f, 0xbf, 0xc8,
|
||||
0xf7, 0x90, 0xff, 0x50, 0x74, 0x03, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0xe5, 0x20, 0xf4, 0x60, 0x0e,
|
||||
0xe4, 0xfd, 0xaf, 0x20, 0x12, 0x2c, 0x17, 0x7d, 0x07, 0xaf, 0x20, 0x12, 0x2a, 0xd9, 0xe5, 0x21,
|
||||
0xf4, 0x60, 0x0e, 0x7d, 0x01, 0xaf, 0x21, 0x12, 0x2c, 0x17, 0x7d, 0x07, 0xaf, 0x21, 0x12, 0x2a,
|
||||
0xd9, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0x90, 0xff, 0x50, 0x74, 0x07, 0xf0, 0x90, 0xff, 0x58,
|
||||
0xf0, 0x90, 0xff, 0x40, 0x74, 0x09, 0xf0, 0xe4, 0x90, 0x04, 0xd4, 0xf0, 0x90, 0xff, 0x43, 0xe0,
|
||||
0x30, 0xe4, 0xf9, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0x90, 0xff, 0x52, 0xe0, 0xfe, 0xa3, 0xe0,
|
||||
0x25, 0x24, 0xf5, 0x24, 0xee, 0x35, 0x23, 0xf5, 0x23, 0x90, 0xff, 0x5a, 0xe0, 0xfe, 0xa3, 0xe0,
|
||||
0x25, 0x26, 0xf5, 0x26, 0xee, 0x35, 0x25, 0xf5, 0x25, 0x05, 0x22, 0xe5, 0x22, 0xc3, 0x94, 0x10,
|
||||
0x50, 0x03, 0x02, 0x19, 0x27, 0xe5, 0x23, 0xc4, 0xf8, 0x54, 0xf0, 0xc8, 0x68, 0x90, 0x04, 0xcb,
|
||||
0xf0, 0xe5, 0x24, 0xc4, 0x54, 0x0f, 0x48, 0xa3, 0xf0, 0xe5, 0x25, 0xc4, 0xf8, 0x54, 0xf0, 0xc8,
|
||||
0x68, 0xa3, 0xf0, 0xe5, 0x26, 0xc4, 0x54, 0x0f, 0x48, 0xa3, 0xf0, 0x53, 0x95, 0x7f, 0xe4, 0x90,
|
||||
0xff, 0x41, 0xf0, 0x90, 0xff, 0x87, 0xf0, 0x90, 0xff, 0x4b, 0xf0, 0x90, 0xff, 0x49, 0xf0, 0x90,
|
||||
0xff, 0x4a, 0xf0, 0x90, 0xff, 0x50, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0x90, 0xff, 0x42, 0xf0, 0x90,
|
||||
0xff, 0x55, 0xf0, 0x90, 0xff, 0x5d, 0xf0, 0x12, 0x2d, 0x0b, 0xf0, 0xe5, 0x20, 0xf4, 0x60, 0x14,
|
||||
0x90, 0x04, 0xcb, 0x12, 0x2d, 0x17, 0x40, 0x09, 0xd3, 0xef, 0x94, 0xb8, 0xee, 0x94, 0x0b, 0x40,
|
||||
0x03, 0x7f, 0x01, 0x22, 0xe5, 0x21, 0xf4, 0x60, 0x14, 0x90, 0x04, 0xcd, 0x12, 0x2d, 0x17, 0x40,
|
||||
0x09, 0xd3, 0xef, 0x94, 0xb8, 0xee, 0x94, 0x0b, 0x40, 0x03, 0x7f, 0x01, 0x22, 0x7f, 0x00, 0x22,
|
||||
0x8b, 0x1d, 0x8a, 0x1e, 0x89, 0x1f, 0x43, 0xad, 0x04, 0x90, 0xff, 0x40, 0xe0, 0x20, 0xe0, 0xf9,
|
||||
0x43, 0x95, 0x80, 0x90, 0xff, 0x41, 0x74, 0x07, 0xf0, 0x90, 0xff, 0x87, 0x74, 0x03, 0xf0, 0xe4,
|
||||
0x90, 0xff, 0x4b, 0xf0, 0x90, 0xff, 0x49, 0x04, 0xf0, 0xe4, 0xf5, 0x26, 0xf5, 0x26, 0x12, 0x2c,
|
||||
0x81, 0xe5, 0x26, 0xc3, 0x9f, 0x50, 0x1a, 0xe9, 0x24, 0x0c, 0xf9, 0xe4, 0x3a, 0x12, 0x2c, 0x72,
|
||||
0xe4, 0xfd, 0x12, 0x2c, 0x17, 0x12, 0x2c, 0x68, 0x7d, 0x02, 0x12, 0x2a, 0xd9, 0x05, 0x26, 0x80,
|
||||
0xdd, 0xe4, 0x90, 0xff, 0x4a, 0xf0, 0x90, 0xff, 0x50, 0x74, 0x0f, 0xf0, 0xe4, 0x90, 0xff, 0x58,
|
||||
0xf0, 0x90, 0xff, 0x40, 0x74, 0x08, 0xf0, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0xab, 0x1d, 0xaa,
|
||||
0x1e, 0xa9, 0x1f, 0x12, 0x08, 0xbb, 0x90, 0xff, 0x48, 0xf0, 0x90, 0x00, 0x01, 0x12, 0x08, 0xd4,
|
||||
0x90, 0xff, 0x42, 0xf0, 0x90, 0x00, 0x02, 0x12, 0x08, 0xd4, 0x90, 0xff, 0x55, 0xf0, 0xe4, 0x90,
|
||||
0xff, 0x5d, 0xf0, 0x90, 0xff, 0x54, 0xf0, 0x90, 0xff, 0x5c, 0xf0, 0xf5, 0x26, 0x12, 0x2c, 0x81,
|
||||
0xe5, 0x26, 0xc3, 0x9f, 0x50, 0x5d, 0xe4, 0xf5, 0x27, 0x75, 0x28, 0x64, 0x90, 0xff, 0x50, 0xe0,
|
||||
0x20, 0xe7, 0x03, 0x43, 0x27, 0x01, 0xe5, 0x27, 0x64, 0x01, 0x60, 0x03, 0xd5, 0x28, 0xed, 0xe4,
|
||||
0x90, 0x04, 0xd4, 0xf0, 0x12, 0x2c, 0x68, 0x7d, 0x06, 0x12, 0x2a, 0xd9, 0x90, 0xff, 0x40, 0x74,
|
||||
0x09, 0xf0, 0x90, 0xff, 0x40, 0xe0, 0x20, 0xe0, 0xf9, 0x12, 0x2c, 0x68, 0x7d, 0x02, 0x12, 0x2a,
|
||||
0xd9, 0x90, 0xff, 0x52, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xab, 0x20, 0xe5, 0x22, 0xf9, 0x24, 0x02,
|
||||
0xf5, 0x22, 0xe5, 0x21, 0xfa, 0x34, 0x00, 0xf5, 0x21, 0xee, 0x8f, 0xf0, 0x12, 0x0a, 0x4b, 0x05,
|
||||
0x26, 0x80, 0x9a, 0xe4, 0xf5, 0x26, 0x75, 0x27, 0x01, 0x12, 0x2c, 0x68, 0x7d, 0x07, 0x12, 0x2a,
|
||||
0xd9, 0xe5, 0x27, 0x24, 0x02, 0x90, 0xff, 0x55, 0xf0, 0xe4, 0xf5, 0x28, 0xf5, 0x29, 0x05, 0x29,
|
||||
0xe5, 0x29, 0x70, 0x02, 0x05, 0x28, 0xb4, 0x20, 0xf5, 0xe5, 0x28, 0xb4, 0x03, 0xf0, 0x90, 0xff,
|
||||
0x50, 0xe0, 0x30, 0xe7, 0x09, 0x05, 0x27, 0xe5, 0x27, 0xc3, 0x94, 0x64, 0x40, 0xd3, 0xab, 0x23,
|
||||
0xaa, 0x24, 0xa9, 0x25, 0x85, 0x26, 0x82, 0x75, 0x83, 0x00, 0xe5, 0x27, 0x12, 0x09, 0x13, 0x12,
|
||||
0x2c, 0x68, 0x7d, 0x02, 0x12, 0x2a, 0xd9, 0xe4, 0x90, 0x04, 0xd4, 0xf0, 0x12, 0x2c, 0x81, 0x05,
|
||||
0x26, 0xe5, 0x26, 0xc3, 0x9f, 0x40, 0x9f, 0xe4, 0x90, 0xff, 0x50, 0xf0, 0xff, 0x22, 0x8f, 0x2a,
|
||||
0x8d, 0x2b, 0xe4, 0x90, 0x00, 0xa8, 0xf0, 0x78, 0xa0, 0xe6, 0xfd, 0x7c, 0x00, 0x12, 0x1e, 0xad,
|
||||
0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xff, 0xae, 0x02, 0x12, 0x09, 0x47, 0xc3, 0xeb, 0x9f, 0xfb, 0xea,
|
||||
0x9e, 0xfa, 0x78, 0xa0, 0xe6, 0xfd, 0x7c, 0x00, 0xe5, 0x2a, 0x12, 0x1f, 0x97, 0xe0, 0xfe, 0xa3,
|
||||
0xe0, 0xff, 0x12, 0x09, 0x47, 0xef, 0x2b, 0xf5, 0x2f, 0xee, 0x3a, 0xf5, 0x2e, 0xe5, 0x2a, 0xc3,
|
||||
0x94, 0x28, 0x40, 0x04, 0x78, 0xa8, 0x80, 0x02, 0x78, 0xa1, 0xe6, 0x75, 0x2c, 0x00, 0xf5, 0x2d,
|
||||
0xae, 0x2c, 0xaf, 0x2d, 0x7c, 0x00, 0x7d, 0xfc, 0x12, 0x09, 0x35, 0xd3, 0xe5, 0x2f, 0x9f, 0xe5,
|
||||
0x2e, 0x9e, 0x40, 0x0b, 0x78, 0xab, 0xe6, 0x44, 0x20, 0x12, 0x1f, 0x7e, 0x44, 0x10, 0xf2, 0x12,
|
||||
0x1e, 0xad, 0xe5, 0x2e, 0xf0, 0xa3, 0xe5, 0x2f, 0xf0, 0x12, 0x1f, 0x23, 0x74, 0x08, 0x93, 0x25,
|
||||
0xe0, 0xf5, 0x2f, 0x74, 0x07, 0x93, 0x33, 0xf5, 0x2e, 0x12, 0x1f, 0x7f, 0xfd, 0x30, 0xe0, 0x19,
|
||||
0xe5, 0x2f, 0xae, 0x2e, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0xc3, 0xe5,
|
||||
0x2f, 0x9f, 0xf5, 0x2f, 0xe5, 0x2e, 0x9e, 0xf5, 0x2e, 0xe5, 0x2e, 0xc3, 0x13, 0xfe, 0xe5, 0x2f,
|
||||
0x13, 0xff, 0x75, 0xf0, 0x0e, 0xe5, 0x2a, 0x12, 0x1e, 0xc3, 0xe0, 0xfa, 0xa3, 0xe0, 0x2f, 0xff,
|
||||
0xea, 0x12, 0x1e, 0xab, 0xe0, 0xfa, 0xa3, 0xe0, 0xd3, 0x9f, 0xea, 0x9e, 0x40, 0x4e, 0x74, 0x54,
|
||||
0x25, 0x2a, 0xf8, 0xed, 0x44, 0x02, 0xf2, 0x75, 0xf0, 0x0e, 0xe5, 0x2a, 0x12, 0x1e, 0xc3, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0x25, 0x2f, 0xff, 0xe5, 0x2e, 0x12, 0x1e, 0xab, 0xe0, 0xfc, 0xa3, 0xe0, 0xd3,
|
||||
0x9f, 0xec, 0x9e, 0x40, 0x1f, 0x78, 0xab, 0xe6, 0x44, 0x02, 0xf6, 0x44, 0x08, 0x12, 0x1f, 0x7e,
|
||||
0x44, 0x01, 0xf2, 0x12, 0x1f, 0xeb, 0xe5, 0x2a, 0xc3, 0x9f, 0x50, 0x16, 0x90, 0x00, 0xa8, 0xe0,
|
||||
0x04, 0xf0, 0x80, 0x0e, 0x12, 0x1f, 0x7f, 0x54, 0xfe, 0xf2, 0x80, 0x06, 0x12, 0x1f, 0x7f, 0x54,
|
||||
0xfd, 0xf2, 0x75, 0xf0, 0x0e, 0xe5, 0x2a, 0x12, 0x1e, 0xc3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12,
|
||||
0x1e, 0xad, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xd3, 0x9f, 0xec, 0x9e, 0x40, 0x13, 0xed, 0x9f, 0xff,
|
||||
0xec, 0x9e, 0xf8, 0xe5, 0x2a, 0x25, 0xe0, 0x24, 0x00, 0xc8, 0xf2, 0x08, 0xef, 0xf2, 0x80, 0x0b,
|
||||
0xe5, 0x2a, 0x25, 0xe0, 0x24, 0x00, 0xf8, 0xe4, 0xf2, 0x08, 0xf2, 0x05, 0x2a, 0x15, 0x2b, 0xe5,
|
||||
0x2b, 0x60, 0x03, 0x02, 0x1b, 0xe7, 0x22, 0x15, 0x68, 0x15, 0x68, 0x12, 0x1f, 0xfc, 0x30, 0xe5,
|
||||
0x06, 0x54, 0xdf, 0xf6, 0x02, 0x1d, 0xf0, 0x78, 0xa6, 0xe6, 0x7f, 0x02, 0x60, 0x02, 0x7f, 0x05,
|
||||
0xa8, 0x68, 0xa6, 0x07, 0xe5, 0x63, 0xc3, 0x94, 0x28, 0x40, 0x26, 0xa8, 0x68, 0x08, 0xe4, 0xf6,
|
||||
0x12, 0x1f, 0xeb, 0xa8, 0x68, 0x08, 0xe6, 0xfe, 0xc3, 0x9f, 0x50, 0x30, 0x12, 0x1e, 0xd2, 0x2e,
|
||||
0x12, 0x1f, 0x00, 0xff, 0xa8, 0x68, 0xe6, 0xfd, 0x12, 0x2a, 0x85, 0xa8, 0x68, 0x08, 0x06, 0x80,
|
||||
0xdf, 0x12, 0x1e, 0xd2, 0x12, 0x1e, 0xfe, 0xff, 0xa8, 0x68, 0xe6, 0xfd, 0x12, 0x1e, 0xcf, 0x25,
|
||||
0x60, 0x12, 0x1f, 0x00, 0xff, 0xa8, 0x68, 0xe6, 0xfd, 0x12, 0x2a, 0x85, 0x90, 0xff, 0x52, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x63, 0x12, 0x1f, 0x39, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0xff,
|
||||
0x5a, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x75, 0xf0, 0x0e, 0xe5, 0x60, 0x12, 0x1f, 0x3c, 0xee, 0xf0,
|
||||
0xa3, 0xef, 0xf0, 0x05, 0x63, 0x05, 0x63, 0x05, 0x60, 0x05, 0x60, 0x78, 0xad, 0x16, 0xe6, 0x70,
|
||||
0x0f, 0x90, 0xff, 0x4a, 0xf0, 0x90, 0xff, 0x50, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0x02, 0x1e, 0xa6,
|
||||
0x78, 0xad, 0xe6, 0x70, 0x03, 0x02, 0x1e, 0xa6, 0xa8, 0x68, 0x76, 0x64, 0xa8, 0x68, 0x08, 0xe4,
|
||||
0xf6, 0x12, 0x1f, 0xbc, 0x90, 0xff, 0x50, 0xe0, 0x20, 0xe7, 0x07, 0xa8, 0x68, 0x08, 0x74, 0x01,
|
||||
0x46, 0xf6, 0x90, 0xff, 0x58, 0xe0, 0x20, 0xe7, 0x07, 0xa8, 0x68, 0x08, 0x74, 0x02, 0x46, 0xf6,
|
||||
0xa8, 0x68, 0x08, 0xe6, 0x64, 0x03, 0x60, 0x06, 0xa8, 0x68, 0x16, 0xe6, 0x70, 0xd6, 0xe5, 0x63,
|
||||
0xc3, 0x94, 0x28, 0x40, 0x2f, 0xa8, 0x68, 0xe4, 0xf6, 0x12, 0x1f, 0xeb, 0xa8, 0x68, 0xe6, 0xfe,
|
||||
0xc3, 0x9f, 0x50, 0x12, 0x12, 0x1e, 0xd2, 0x2e, 0x12, 0x1f, 0x00, 0xff, 0x7d, 0x06, 0x12, 0x2a,
|
||||
0xd9, 0xa8, 0x68, 0x06, 0x80, 0xe3, 0x78, 0xa7, 0x12, 0x1f, 0xc8, 0x78, 0xa9, 0x12, 0x1f, 0x62,
|
||||
0x78, 0xa8, 0x80, 0x23, 0x12, 0x1e, 0xd2, 0x12, 0x1e, 0xfe, 0xff, 0x7d, 0x06, 0x12, 0x1e, 0xcf,
|
||||
0x25, 0x60, 0x12, 0x1f, 0x00, 0xff, 0x7d, 0x06, 0x12, 0x2a, 0x85, 0x78, 0xa2, 0x12, 0x1f, 0xc8,
|
||||
0x78, 0xa3, 0x12, 0x1f, 0x62, 0x78, 0xa1, 0xe6, 0x90, 0xff, 0x48, 0xf0, 0xe5, 0x63, 0x12, 0x1f,
|
||||
0x2a, 0xe0, 0x90, 0xff, 0x54, 0xf0, 0x75, 0xf0, 0x0e, 0xe5, 0x60, 0x12, 0x1f, 0x2d, 0xe0, 0x90,
|
||||
0xff, 0x5c, 0xf0, 0x12, 0x20, 0x06, 0x05, 0x68, 0x05, 0x68, 0x22, 0x3e, 0xfe, 0xe5, 0x2a, 0x75,
|
||||
0xf0, 0x0e, 0xa4, 0x24, 0xaa, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0xe5, 0x2a,
|
||||
0x75, 0xf0, 0x0e, 0xa4, 0x24, 0xac, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x12,
|
||||
0x2a, 0x85, 0xe5, 0x62, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe5, 0x82, 0x22,
|
||||
0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x75, 0xf0, 0x0e, 0xe5, 0x22, 0xa4, 0x24, 0xb3, 0xf5, 0x82, 0xe5,
|
||||
0xf0, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x75, 0xf0, 0x0e, 0x22, 0x25, 0x63,
|
||||
0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe4, 0x93, 0x22, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0xb5,
|
||||
0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x7e, 0x00, 0x7d, 0x00, 0x7b, 0xfe, 0x02,
|
||||
0x0c, 0xb2, 0xf6, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0x22, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0xa9,
|
||||
0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0xb1, 0xf5,
|
||||
0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x75, 0xf0, 0x0e, 0xe5, 0x2a, 0xa4, 0x24, 0xae,
|
||||
0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x93, 0xf6, 0x85, 0x1e, 0x82, 0x85, 0x1d,
|
||||
0x83, 0x22, 0xff, 0xe6, 0xfe, 0xef, 0x2e, 0x90, 0xff, 0x55, 0xf0, 0x74, 0x7e, 0x25, 0x60, 0xf8,
|
||||
0xe2, 0x2e, 0x90, 0xff, 0x5d, 0xf0, 0x22, 0x7e, 0x00, 0x7d, 0x00, 0x02, 0x0c, 0xb2, 0xf6, 0x74,
|
||||
0x54, 0x25, 0x2a, 0xf8, 0xe2, 0x22, 0x75, 0xf0, 0x0e, 0xe5, 0x2a, 0xa4, 0x24, 0xaf, 0xf5, 0x82,
|
||||
0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x75, 0xf0, 0x0e, 0xa4, 0x24, 0xb3, 0xf5, 0x82, 0xe5,
|
||||
0xf0, 0x34, 0x00, 0xf5, 0x83, 0x22, 0xe5, 0x2d, 0x94, 0x00, 0xe5, 0x2c, 0x64, 0x80, 0x94, 0x80,
|
||||
0x22, 0x7e, 0x02, 0x7b, 0x01, 0x7a, 0x00, 0x79, 0xa9, 0x02, 0x0c, 0xb2, 0x78, 0xa5, 0xe6, 0x90,
|
||||
0xff, 0x55, 0xf0, 0x90, 0xff, 0x5d, 0xf0, 0x22, 0xe6, 0x90, 0xff, 0x42, 0xf0, 0x74, 0x7e, 0x25,
|
||||
0x63, 0xf8, 0xe2, 0x22, 0x78, 0xab, 0xe6, 0x44, 0x10, 0xf6, 0x22, 0x78, 0xaf, 0xe6, 0xfd, 0xe4,
|
||||
0xff, 0x22, 0x7e, 0x00, 0x7d, 0x00, 0x7b, 0xfe, 0x02, 0x0c, 0xb2, 0x78, 0xaf, 0xe6, 0xc3, 0x13,
|
||||
0xff, 0x22, 0xc3, 0x74, 0x08, 0x93, 0x9f, 0x74, 0x07, 0x93, 0x9e, 0x22, 0x90, 0xff, 0x43, 0x74,
|
||||
0x9f, 0xf0, 0x78, 0xa4, 0xe6, 0x22, 0x90, 0xff, 0x40, 0x74, 0x09, 0xf0, 0x22, 0xe4, 0x78, 0xab,
|
||||
0xf6, 0x78, 0xa4, 0xe6, 0x30, 0xe0, 0x05, 0x12, 0x26, 0xc6, 0x80, 0x04, 0xe4, 0x78, 0xac, 0xf6,
|
||||
0x78, 0xaa, 0xe6, 0x70, 0x03, 0x02, 0x20, 0xb5, 0x14, 0x70, 0x03, 0x02, 0x21, 0x50, 0x14, 0x60,
|
||||
0x24, 0x14, 0x60, 0x03, 0x02, 0x21, 0x5b, 0x12, 0x2c, 0xee, 0x7f, 0xff, 0x12, 0x28, 0x35, 0x12,
|
||||
0x1f, 0xdb, 0x12, 0x1b, 0xde, 0x78, 0xab, 0xe6, 0x30, 0xe1, 0x04, 0x78, 0xae, 0x76, 0x28, 0x12,
|
||||
0x1f, 0xdb, 0x02, 0x22, 0x98, 0x12, 0x1f, 0x23, 0x74, 0x08, 0x93, 0x25, 0xe0, 0xf5, 0x24, 0x74,
|
||||
0x07, 0x93, 0x33, 0xf5, 0x23, 0x12, 0x2c, 0xee, 0x7f, 0xff, 0x12, 0x28, 0x35, 0x12, 0x2c, 0xee,
|
||||
0xe4, 0xf5, 0x22, 0xe5, 0x22, 0xc3, 0x78, 0xaf, 0x96, 0x50, 0x35, 0x12, 0x1e, 0xe5, 0xe5, 0x22,
|
||||
0x12, 0x1e, 0xb2, 0x12, 0x1e, 0xe0, 0xe5, 0x22, 0x12, 0x1e, 0xc3, 0x12, 0x1e, 0xe0, 0xe5, 0x22,
|
||||
0x12, 0x1f, 0x0d, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x22, 0x12, 0x1f, 0x0a, 0xe0, 0xfe, 0xa3,
|
||||
0xe0, 0xc3, 0x95, 0x24, 0xee, 0x95, 0x23, 0x50, 0x03, 0x12, 0x1f, 0xd4, 0x05, 0x22, 0x80, 0xc3,
|
||||
0x78, 0xaa, 0x76, 0x03, 0x22, 0xe4, 0x78, 0xae, 0xf6, 0x78, 0xab, 0xf6, 0x7f, 0x30, 0xfd, 0x12,
|
||||
0x1f, 0xb1, 0x7f, 0x50, 0x7b, 0xfe, 0x7a, 0x00, 0x79, 0x00, 0x12, 0x1f, 0x77, 0x7f, 0x28, 0x7a,
|
||||
0x00, 0x79, 0x54, 0x12, 0x1f, 0xe2, 0x12, 0x1f, 0x23, 0x74, 0x02, 0x93, 0x78, 0xaf, 0xf6, 0x78,
|
||||
0xa6, 0xe6, 0x30, 0xe0, 0x05, 0x75, 0x23, 0x05, 0x80, 0x03, 0x75, 0x23, 0x02, 0xe4, 0xf5, 0x24,
|
||||
0xe4, 0xf5, 0x22, 0xe5, 0x22, 0xc3, 0x78, 0xaf, 0x96, 0x50, 0x50, 0x12, 0x1e, 0xd2, 0x25, 0x22,
|
||||
0x12, 0x1f, 0x00, 0xf5, 0x25, 0xe5, 0x22, 0x24, 0x0a, 0xff, 0xe4, 0x33, 0xfe, 0xe5, 0x62, 0x2f,
|
||||
0xf5, 0x82, 0xe5, 0x61, 0x3e, 0xf5, 0x83, 0xe4, 0x93, 0xf5, 0x26, 0xe4, 0xfd, 0xaf, 0x25, 0x12,
|
||||
0x2c, 0x17, 0x7d, 0x01, 0xaf, 0x26, 0x12, 0x2c, 0x17, 0xad, 0x24, 0xaf, 0x25, 0x12, 0x2b, 0xe8,
|
||||
0xad, 0x24, 0xaf, 0x26, 0x12, 0x2b, 0xe8, 0xad, 0x23, 0xaf, 0x25, 0x12, 0x2a, 0xd9, 0xad, 0x23,
|
||||
0xaf, 0x26, 0x12, 0x2a, 0xd9, 0x05, 0x22, 0x05, 0x22, 0x80, 0xa8, 0x78, 0xaa, 0x76, 0x01, 0x22,
|
||||
0x12, 0x1f, 0xdb, 0x12, 0x2b, 0x2d, 0x78, 0xaa, 0x76, 0x02, 0x22, 0xe4, 0x78, 0xaa, 0xf6, 0x22,
|
||||
0xef, 0x12, 0x0d, 0xcd, 0xe0, 0xf5, 0x29, 0xe4, 0xf5, 0x2d, 0xf5, 0x2c, 0xf5, 0x2b, 0xf5, 0x2a,
|
||||
0xe5, 0x29, 0x70, 0x39, 0x78, 0x02, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x78, 0x01, 0x12, 0x0e, 0x73,
|
||||
0x78, 0x06, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x78, 0x05, 0x12, 0x0f, 0xa3, 0xd3, 0xe5, 0x26, 0x95,
|
||||
0x28, 0xe5, 0x25, 0x95, 0x27, 0x40, 0x0c, 0xe5, 0x26, 0x95, 0x28, 0xff, 0xe5, 0x25, 0x95, 0x27,
|
||||
0xfe, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x00, 0x8e, 0x23, 0x8f, 0x24, 0x80, 0x43, 0x78, 0xb3, 0xe6,
|
||||
0x14, 0x65, 0x29, 0x70, 0x27, 0x12, 0x0d, 0x20, 0x12, 0x0e, 0x70, 0xd3, 0xe5, 0x26, 0x95, 0x24,
|
||||
0xe5, 0x25, 0x95, 0x23, 0x40, 0x0c, 0xe5, 0x26, 0x95, 0x24, 0xff, 0xe5, 0x25, 0x95, 0x23, 0xfe,
|
||||
0x80, 0x04, 0x7e, 0x00, 0x7f, 0x00, 0x8e, 0x27, 0x8f, 0x28, 0x80, 0x14, 0x12, 0x0d, 0x20, 0x12,
|
||||
0x0e, 0x70, 0x12, 0x0d, 0x4e, 0x24, 0x06, 0x12, 0x0d, 0x48, 0x24, 0x05, 0xf8, 0x12, 0x0f, 0xa3,
|
||||
0xae, 0x25, 0xaf, 0x26, 0xe4, 0xfc, 0xfd, 0x12, 0x0d, 0x4e, 0x24, 0xf9, 0xf5, 0x82, 0xe4, 0x34,
|
||||
0x03, 0x12, 0x0d, 0xf6, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xae, 0x23, 0xaf, 0x24,
|
||||
0xe4, 0xfc, 0xfd, 0x12, 0x0d, 0x4e, 0x12, 0x0d, 0xa1, 0x12, 0x0d, 0xf8, 0xd0, 0x03, 0xd0, 0x02,
|
||||
0xd0, 0x01, 0xd0, 0x00, 0xef, 0x2b, 0xff, 0xee, 0x3a, 0x12, 0x0d, 0xb5, 0xc0, 0x04, 0xc0, 0x05,
|
||||
0xc0, 0x06, 0xc0, 0x07, 0xae, 0x27, 0xaf, 0x28, 0xe4, 0xfc, 0xfd, 0x12, 0x0d, 0x4e, 0x24, 0xfd,
|
||||
0xf5, 0x82, 0xe4, 0x34, 0x03, 0x12, 0x0d, 0xf6, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00,
|
||||
0xef, 0x2b, 0xf5, 0x2d, 0xee, 0x3a, 0xf5, 0x2c, 0xed, 0x39, 0xf5, 0x2b, 0xec, 0x38, 0xf5, 0x2a,
|
||||
0x12, 0x0e, 0x9a, 0xc3, 0x13, 0xfe, 0xef, 0x13, 0xff, 0xef, 0x25, 0x2d, 0xff, 0xee, 0x12, 0x0f,
|
||||
0x5d, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x0e, 0x9a, 0xab, 0x07, 0xfa, 0xe4, 0xf9, 0xf8, 0xd0, 0x07,
|
||||
0xd0, 0x06, 0x12, 0x0f, 0x69, 0xe5, 0x2d, 0x24, 0x20, 0xff, 0xe4, 0x12, 0x0f, 0x5d, 0xe4, 0x7b,
|
||||
0x40, 0xfa, 0xf9, 0xf8, 0x12, 0x0f, 0x69, 0x22, 0x8f, 0x2a, 0x8d, 0x2b, 0x78, 0xae, 0xe6, 0x60,
|
||||
0x01, 0x16, 0x12, 0x1e, 0xbe, 0x12, 0x1e, 0xf5, 0xe5, 0x2a, 0x12, 0x1e, 0xb2, 0xe0, 0xfc, 0xa3,
|
||||
0xe0, 0xc3, 0x9f, 0xf5, 0x2d, 0xec, 0x9e, 0xf5, 0x2c, 0x12, 0x1f, 0x86, 0xe0, 0xf5, 0x2e, 0x78,
|
||||
0xae, 0xe6, 0x60, 0x09, 0xd3, 0x12, 0x1f, 0xa6, 0x40, 0x03, 0x02, 0x23, 0xb2, 0xaf, 0x2d, 0xae,
|
||||
0x2c, 0x12, 0x2d, 0xa5, 0x12, 0x1f, 0x23, 0x12, 0x1f, 0xf2, 0x50, 0x0d, 0x12, 0x1f, 0xa6, 0x40,
|
||||
0x04, 0x05, 0x2e, 0x80, 0x57, 0x15, 0x2e, 0x80, 0x53, 0x12, 0x1f, 0x48, 0xe0, 0xff, 0x33, 0x95,
|
||||
0xe0, 0xfe, 0xef, 0x25, 0x2d, 0xf5, 0x2d, 0xee, 0x35, 0x2c, 0xf5, 0x2c, 0xd3, 0xe5, 0x2d, 0x94,
|
||||
0x78, 0x12, 0x1f, 0xaa, 0x40, 0x09, 0x12, 0x1e, 0xbe, 0xe4, 0x75, 0xf0, 0x01, 0x80, 0x1a, 0xe5,
|
||||
0x2d, 0x24, 0x78, 0xe4, 0x35, 0x2c, 0xc3, 0x64, 0x80, 0x94, 0x80, 0x75, 0xf0, 0x0e, 0xe5, 0x2a,
|
||||
0x50, 0x11, 0x12, 0x1e, 0xc3, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x09, 0xd2, 0x12, 0x1f, 0x48, 0xe4,
|
||||
0xf0, 0x80, 0x06, 0x12, 0x1f, 0x4d, 0xe5, 0x2d, 0xf0, 0xe4, 0xf5, 0x2e, 0x12, 0x1f, 0x23, 0x74,
|
||||
0x04, 0x93, 0xff, 0xd3, 0x64, 0x80, 0xf8, 0xe5, 0x2e, 0x64, 0x80, 0x98, 0x50, 0x17, 0xef, 0x33,
|
||||
0x95, 0xe0, 0xfe, 0xad, 0x2e, 0xed, 0x33, 0x95, 0xe0, 0xfc, 0xed, 0x2f, 0xec, 0x3e, 0xc3, 0x64,
|
||||
0x80, 0x94, 0x80, 0x50, 0x18, 0xe4, 0xf5, 0x2e, 0x75, 0xf0, 0x0e, 0xe5, 0x2a, 0x12, 0x1e, 0xb2,
|
||||
0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x1e, 0xbe, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x1f, 0x86,
|
||||
0xe5, 0x2e, 0xf0, 0x78, 0xae, 0xe6, 0x70, 0x2a, 0x12, 0x1e, 0xbe, 0x12, 0x1e, 0xf5, 0xe5, 0x2a,
|
||||
0x12, 0x1f, 0x0d, 0xe0, 0xfc, 0xa3, 0xe0, 0xc3, 0x9f, 0xff, 0xec, 0x9e, 0xfe, 0x12, 0x2d, 0xa5,
|
||||
0x7c, 0x00, 0x7d, 0x02, 0x12, 0x09, 0x9c, 0x12, 0x1f, 0x23, 0x12, 0x1f, 0xf2, 0x50, 0x03, 0x12,
|
||||
0x1f, 0xd4, 0x05, 0x2a, 0x15, 0x2b, 0xe5, 0x2b, 0x60, 0x03, 0x02, 0x22, 0xa2, 0x22, 0x8b, 0x1d,
|
||||
0x8a, 0x1e, 0x89, 0x1f, 0xe4, 0xf5, 0x20, 0xf5, 0x21, 0xf5, 0x22, 0x85, 0x65, 0x82, 0x85, 0x64,
|
||||
0x83, 0xe4, 0x93, 0xff, 0xe5, 0x20, 0xc3, 0x9f, 0x40, 0x03, 0x02, 0x24, 0x9f, 0x12, 0x2d, 0x85,
|
||||
0x74, 0x01, 0x93, 0xf5, 0x23, 0x12, 0x2d, 0x7f, 0x74, 0x02, 0x93, 0xf5, 0x24, 0x12, 0x2d, 0x7f,
|
||||
0x74, 0x04, 0x93, 0xfc, 0x74, 0x05, 0x93, 0xfd, 0xe5, 0x23, 0x25, 0xe0, 0x24, 0x00, 0xf8, 0xe2,
|
||||
0xfe, 0x08, 0xe2, 0xff, 0xd3, 0x9d, 0xee, 0x9c, 0x40, 0x6f, 0x7c, 0x00, 0x7d, 0x05, 0x12, 0x09,
|
||||
0x35, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x01, 0xf8, 0xe2, 0x24, 0x01, 0xfd, 0x18, 0xe2, 0x34, 0x00,
|
||||
0xfc, 0x12, 0x09, 0x47, 0x8e, 0x25, 0x8f, 0x26, 0x12, 0x2d, 0x7f, 0x74, 0x03, 0x93, 0x30, 0xe7,
|
||||
0x2b, 0x54, 0x7f, 0xc3, 0x95, 0x26, 0xff, 0xe4, 0x95, 0x25, 0xfe, 0x12, 0x2d, 0xa5, 0xc3, 0x74,
|
||||
0x03, 0x9f, 0xee, 0x64, 0x80, 0xf8, 0x74, 0x80, 0x98, 0x40, 0x2e, 0xaf, 0x20, 0x74, 0x01, 0xa8,
|
||||
0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x21, 0x80, 0x1d, 0x12, 0x2d, 0x7f, 0x74,
|
||||
0x03, 0x93, 0xc3, 0x95, 0x26, 0xe4, 0x95, 0x25, 0x50, 0x0f, 0xaf, 0x20, 0x74, 0x01, 0xa8, 0x07,
|
||||
0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x21, 0x12, 0x2d, 0x7f, 0x74, 0x01, 0x93, 0x24,
|
||||
0x54, 0xf8, 0xe2, 0xc3, 0x13, 0x20, 0xe0, 0x0f, 0x12, 0x2d, 0x7f, 0x74, 0x02, 0x93, 0x24, 0x54,
|
||||
0xf8, 0xe2, 0xc3, 0x13, 0x30, 0xe0, 0x03, 0x75, 0x22, 0x01, 0x05, 0x20, 0x02, 0x23, 0xcb, 0x90,
|
||||
0x04, 0xd0, 0xe0, 0x65, 0x21, 0x60, 0x0a, 0xe5, 0x21, 0xf0, 0xe4, 0x90, 0x04, 0xcf, 0xf0, 0x80,
|
||||
0x14, 0x90, 0x04, 0xcf, 0xe0, 0x04, 0xf0, 0xc3, 0x94, 0x03, 0x40, 0x09, 0xe0, 0x14, 0xf0, 0x90,
|
||||
0x04, 0xd1, 0xe5, 0x21, 0xf0, 0x90, 0x04, 0xd1, 0xe0, 0xab, 0x1d, 0xaa, 0x1e, 0xa9, 0x1f, 0x12,
|
||||
0x09, 0x01, 0xaf, 0x22, 0x22, 0xe4, 0x78, 0x83, 0xf6, 0x08, 0xf6, 0x78, 0x7d, 0xf6, 0x08, 0xf6,
|
||||
0x08, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 0xf5, 0x22, 0xff, 0xf5, 0x23, 0x7e, 0xff, 0xe5,
|
||||
0x22, 0xc3, 0x78, 0xb3, 0x96, 0x40, 0x03, 0x02, 0x25, 0x81, 0xe5, 0x22, 0x25, 0xe0, 0x25, 0xe0,
|
||||
0x24, 0x02, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0xfd, 0xe5, 0x22, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x01,
|
||||
0xf8, 0xe2, 0x2d, 0xf5, 0x28, 0x18, 0xe2, 0x3c, 0xf5, 0x27, 0x12, 0x0f, 0x93, 0x78, 0x83, 0xe6,
|
||||
0xfc, 0x08, 0xe6, 0xfd, 0x74, 0x08, 0x93, 0x2d, 0xfb, 0x74, 0x07, 0x93, 0x3c, 0xfa, 0xd3, 0xe5,
|
||||
0x28, 0x9b, 0xe5, 0x27, 0x9a, 0x40, 0x05, 0x7f, 0x01, 0x18, 0x80, 0x39, 0x12, 0x0f, 0x93, 0x74,
|
||||
0x08, 0x93, 0x25, 0x28, 0xfb, 0x74, 0x07, 0x93, 0x35, 0x27, 0xfa, 0xd3, 0xed, 0x9b, 0xec, 0x9a,
|
||||
0x40, 0x2a, 0xef, 0x60, 0x1e, 0xe4, 0xff, 0x12, 0x0f, 0x88, 0xfc, 0x08, 0xe6, 0xfd, 0xe5, 0x23,
|
||||
0x25, 0xe0, 0x24, 0x7d, 0xf8, 0xa6, 0x04, 0x08, 0xa6, 0x05, 0x05, 0x23, 0xe5, 0x23, 0xc3, 0x94,
|
||||
0x03, 0x50, 0x0e, 0x78, 0x83, 0xa6, 0x27, 0x08, 0xa6, 0x28, 0xae, 0x22, 0x05, 0x22, 0x02, 0x24,
|
||||
0xef, 0xef, 0x60, 0x1c, 0xe5, 0x23, 0xc3, 0x94, 0x02, 0x50, 0x15, 0x12, 0x0f, 0x88, 0xfe, 0x08,
|
||||
0xe6, 0xff, 0xe5, 0x23, 0x25, 0xe0, 0x24, 0x7d, 0xf8, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0x05, 0x23,
|
||||
0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7d, 0x75, 0x2d, 0xff, 0x12, 0x25, 0xd9, 0xb4, 0xff, 0x04, 0x7f,
|
||||
0xff, 0x80, 0x07, 0x74, 0x24, 0x25, 0x22, 0xf8, 0xe6, 0xff, 0x8f, 0x5a, 0x7b, 0x00, 0x7a, 0x00,
|
||||
0x79, 0x7d, 0x85, 0x22, 0x2d, 0x12, 0x25, 0xd9, 0xb4, 0xff, 0x04, 0x7f, 0xff, 0x80, 0x07, 0x74,
|
||||
0x24, 0x25, 0x22, 0xf8, 0xe6, 0xff, 0x8f, 0x5b, 0x22, 0xad, 0x23, 0x12, 0x2b, 0xad, 0x8f, 0x22,
|
||||
0xe5, 0x22, 0x22, 0x8e, 0x1d, 0x8f, 0x1e, 0x12, 0x1f, 0x5b, 0xe4, 0x93, 0xff, 0x74, 0x01, 0x93,
|
||||
0xfd, 0x12, 0x18, 0xe2, 0xef, 0x64, 0x01, 0x60, 0xee, 0xe4, 0x78, 0xaa, 0xf6, 0x78, 0xac, 0xf6,
|
||||
0x85, 0x1d, 0x61, 0x85, 0x1e, 0x62, 0xe5, 0x1e, 0x24, 0x31, 0xff, 0xe4, 0x35, 0x1d, 0xfa, 0xa9,
|
||||
0x07, 0x7b, 0xff, 0x78, 0xa1, 0x7c, 0x00, 0x7d, 0x00, 0x7e, 0x00, 0x7f, 0x09, 0x12, 0x08, 0x95,
|
||||
0x7f, 0x2a, 0x7a, 0x00, 0x79, 0x7e, 0x12, 0x1f, 0xe2, 0x7f, 0x4c, 0x7d, 0x00, 0x12, 0x1f, 0xb1,
|
||||
0x12, 0x1f, 0x5b, 0x74, 0x31, 0x78, 0xa1, 0x12, 0x1f, 0x59, 0x74, 0x38, 0x78, 0xa8, 0x12, 0x1f,
|
||||
0x59, 0x74, 0x03, 0x93, 0x04, 0x78, 0xa0, 0x12, 0x1f, 0x22, 0x74, 0x05, 0x93, 0xff, 0x7e, 0x00,
|
||||
0x7c, 0x04, 0x7d, 0x00, 0x12, 0x0c, 0x85, 0xe4, 0x7b, 0xc8, 0xfa, 0xf9, 0xf8, 0x12, 0x0b, 0x22,
|
||||
0x78, 0x9e, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0xe4, 0x78, 0xad, 0xf6, 0x43, 0x95, 0x80, 0x90, 0xff,
|
||||
0x41, 0x74, 0x07, 0xf0, 0x90, 0xff, 0x87, 0x74, 0x03, 0xf0, 0xe4, 0x90, 0xff, 0x4b, 0xf0, 0x90,
|
||||
0xff, 0x49, 0x04, 0xf0, 0x12, 0x1f, 0x5b, 0xe4, 0x93, 0xf5, 0x1f, 0xf4, 0x60, 0x0c, 0xe4, 0xfd,
|
||||
0xaf, 0x1f, 0x12, 0x2b, 0xe8, 0xe4, 0xfd, 0x12, 0x26, 0xb2, 0x12, 0x1f, 0x5b, 0x74, 0x01, 0x93,
|
||||
0xf5, 0x1f, 0xf4, 0x60, 0x0c, 0xe4, 0xfd, 0xaf, 0x1f, 0x12, 0x2b, 0xe8, 0x7d, 0x01, 0x12, 0x26,
|
||||
0xb2, 0x22, 0xaf, 0x1f, 0x12, 0x2c, 0x17, 0x7d, 0x02, 0xaf, 0x1f, 0x12, 0x2a, 0xd9, 0x7d, 0x07,
|
||||
0xaf, 0x1f, 0x12, 0x2a, 0xd9, 0x22, 0x78, 0xac, 0xe6, 0x70, 0x03, 0x02, 0x27, 0x65, 0x14, 0x70,
|
||||
0x03, 0x02, 0x27, 0x87, 0x14, 0x60, 0x26, 0x14, 0x60, 0x03, 0x02, 0x27, 0x93, 0x12, 0x2c, 0xee,
|
||||
0x7f, 0x28, 0x12, 0x28, 0x35, 0x7d, 0x02, 0x7f, 0x28, 0x12, 0x1b, 0xde, 0x78, 0xab, 0xe6, 0x30,
|
||||
0xe1, 0x04, 0x78, 0xae, 0x76, 0x28, 0x7d, 0x02, 0x7f, 0x28, 0x02, 0x22, 0x98, 0x12, 0x1f, 0x23,
|
||||
0x74, 0x08, 0x93, 0x25, 0xe0, 0xf5, 0x29, 0x74, 0x07, 0x93, 0x33, 0xf5, 0x28, 0x12, 0x2c, 0xee,
|
||||
0x7f, 0x28, 0x12, 0x28, 0x35, 0x12, 0x2c, 0xee, 0x75, 0x27, 0x28, 0xe5, 0x27, 0x12, 0x1e, 0xaf,
|
||||
0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x27, 0x12, 0x1e, 0xc0, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x75,
|
||||
0xf0, 0x0e, 0xe5, 0x27, 0x12, 0x1e, 0xb2, 0x12, 0x1e, 0xf5, 0xe5, 0x27, 0x12, 0x1f, 0x0d, 0xee,
|
||||
0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x27, 0x12, 0x1f, 0x0a, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x95, 0x29,
|
||||
0xee, 0x95, 0x28, 0x50, 0x03, 0x12, 0x1f, 0xd4, 0x05, 0x27, 0xe5, 0x27, 0x64, 0x2a, 0x70, 0xbb,
|
||||
0x78, 0xac, 0x76, 0x03, 0x22, 0x7f, 0x1c, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0xd9, 0x12, 0x1f, 0x77,
|
||||
0x7f, 0x04, 0x7a, 0x00, 0x79, 0x50, 0x12, 0x1f, 0x19, 0x7f, 0x02, 0x7a, 0x00, 0x79, 0x7c, 0x12,
|
||||
0x1f, 0x19, 0x78, 0xac, 0x76, 0x01, 0x22, 0x7d, 0x02, 0x7f, 0x28, 0x12, 0x2b, 0x2d, 0x78, 0xac,
|
||||
0x76, 0x02, 0x22, 0xe4, 0x78, 0xac, 0xf6, 0x22, 0x78, 0xff, 0xe4, 0xf6, 0xd8, 0xfd, 0x90, 0x00,
|
||||
0x00, 0x7f, 0x00, 0x7e, 0x07, 0xe4, 0xf0, 0xa3, 0xdf, 0xfc, 0xde, 0xfa, 0x75, 0x81, 0xb3, 0x75,
|
||||
0xa0, 0x00, 0x02, 0x27, 0xf0, 0x02, 0x2e, 0xf6, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40,
|
||||
0x03, 0xf6, 0x80, 0x01, 0xf2, 0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07,
|
||||
0x24, 0x0c, 0xc8, 0xc3, 0x33, 0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56,
|
||||
0x80, 0x01, 0x46, 0xf6, 0xdf, 0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
|
||||
0x90, 0x2d, 0xb8, 0xe4, 0x7e, 0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09,
|
||||
0x54, 0x1f, 0xfe, 0xe4, 0x93, 0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8,
|
||||
0x40, 0xb8, 0xe4, 0x93, 0xa3, 0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82,
|
||||
0xc8, 0xca, 0xc5, 0x83, 0xca, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf,
|
||||
0xe9, 0xde, 0xe7, 0x80, 0xbe, 0xbf, 0xff, 0x10, 0xe4, 0xf5, 0x63, 0x75, 0x60, 0x01, 0x78, 0xaf,
|
||||
0xe6, 0xc3, 0x13, 0x78, 0xad, 0xf6, 0x80, 0x0a, 0x8f, 0x63, 0xef, 0x04, 0xf5, 0x60, 0x78, 0xad,
|
||||
0x76, 0x01, 0x78, 0xa6, 0xe6, 0x90, 0xff, 0x4a, 0xf0, 0x90, 0xff, 0x50, 0x74, 0x0f, 0xf0, 0x90,
|
||||
0xff, 0x58, 0xf0, 0x90, 0xff, 0x40, 0x74, 0x08, 0xf0, 0x12, 0x1f, 0xfc, 0x44, 0x20, 0x12, 0x1f,
|
||||
0x22, 0x74, 0x09, 0x93, 0xff, 0x7d, 0x06, 0x12, 0x2a, 0xd9, 0x12, 0x1f, 0x23, 0x74, 0x0a, 0x93,
|
||||
0xff, 0x7d, 0x06, 0x12, 0x2a, 0xd9, 0x78, 0xa2, 0xe6, 0x90, 0xff, 0x42, 0xf0, 0x12, 0x1f, 0xbc,
|
||||
0x90, 0xff, 0x48, 0x74, 0x02, 0xf0, 0xe4, 0x90, 0xff, 0x54, 0xf0, 0x90, 0xff, 0x5c, 0xf0, 0x18,
|
||||
0xe6, 0x30, 0xe7, 0x1e, 0x43, 0xad, 0x04, 0x12, 0x20, 0x06, 0x90, 0xff, 0x43, 0xe0, 0x20, 0xe4,
|
||||
0x08, 0x75, 0x91, 0x01, 0xe4, 0xf5, 0x91, 0x80, 0xf1, 0x12, 0x1d, 0x47, 0x78, 0xad, 0xe6, 0x70,
|
||||
0xe9, 0x22, 0x53, 0xad, 0xfb, 0x12, 0x20, 0x06, 0x22, 0xe5, 0x58, 0x24, 0x05, 0x12, 0x0d, 0x18,
|
||||
0xe0, 0x60, 0x12, 0xe5, 0x58, 0x24, 0x25, 0x12, 0x0d, 0x18, 0xe0, 0x7e, 0x01, 0x60, 0x02, 0x7e,
|
||||
0x03, 0xaf, 0x06, 0x80, 0x1e, 0xe5, 0x58, 0x24, 0x25, 0x12, 0x0d, 0x18, 0xe0, 0x60, 0x12, 0xe5,
|
||||
0x58, 0x24, 0x0a, 0x12, 0x0d, 0x18, 0xe0, 0x7e, 0x02, 0x60, 0x02, 0x7e, 0x03, 0xaf, 0x06, 0x80,
|
||||
0x02, 0xe4, 0xff, 0xe5, 0x58, 0x24, 0x06, 0x12, 0x0d, 0x18, 0xef, 0xf0, 0xe5, 0x58, 0x24, 0x05,
|
||||
0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xe5, 0x58, 0x24, 0x25, 0x12, 0x0d, 0x18, 0xee, 0x12, 0x0d, 0x59,
|
||||
0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xe5, 0x58, 0x24, 0x21, 0x12, 0x0d, 0x18, 0xec, 0xf0, 0xed, 0x12,
|
||||
0x0d, 0x58, 0xa3, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0x12, 0x0d, 0x14, 0xec, 0xf0, 0xa3, 0xed,
|
||||
0xf0, 0xe5, 0x58, 0x24, 0x06, 0x12, 0x0d, 0x18, 0xe0, 0xfe, 0xe5, 0x58, 0x24, 0x26, 0x12, 0x0d,
|
||||
0x18, 0xee, 0xf0, 0x22, 0xab, 0x07, 0xbb, 0xff, 0x03, 0x7f, 0xff, 0x22, 0xeb, 0x70, 0x0c, 0x12,
|
||||
0x0d, 0x8d, 0x74, 0x11, 0x93, 0xf5, 0x22, 0x74, 0x12, 0x80, 0x1d, 0x78, 0xb3, 0xe6, 0x14, 0xb5,
|
||||
0x03, 0x0c, 0x12, 0x0d, 0x8d, 0x74, 0x13, 0x93, 0xf5, 0x22, 0x74, 0x14, 0x80, 0x0a, 0x12, 0x0d,
|
||||
0x8d, 0x74, 0x0f, 0x93, 0xf5, 0x22, 0x74, 0x10, 0x93, 0xf5, 0x23, 0x90, 0x04, 0x73, 0xe0, 0x70,
|
||||
0x06, 0x90, 0x04, 0x9a, 0xe0, 0x60, 0x14, 0xe5, 0x23, 0x25, 0xe0, 0xff, 0xe5, 0x22, 0x33, 0xfe,
|
||||
0x7c, 0x00, 0x7d, 0x03, 0x12, 0x09, 0x47, 0x8e, 0x22, 0x8f, 0x23, 0xeb, 0x25, 0xe0, 0x25, 0xe0,
|
||||
0x24, 0x02, 0x12, 0x0e, 0xbc, 0xeb, 0x25, 0xe0, 0x12, 0x0d, 0xe9, 0xc3, 0xef, 0x95, 0x23, 0xee,
|
||||
0x95, 0x22, 0xaf, 0x03, 0x50, 0x02, 0x7f, 0xff, 0x22, 0xef, 0xb4, 0x09, 0x00, 0x50, 0x58, 0x90,
|
||||
0x29, 0xd6, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x29, 0xf1, 0x02, 0x29, 0xf7, 0x02, 0x29, 0xfd, 0x02,
|
||||
0x2a, 0x03, 0x02, 0x2a, 0x09, 0x02, 0x2a, 0x0f, 0x02, 0x2a, 0x15, 0x02, 0x2a, 0x1b, 0x02, 0x2a,
|
||||
0x21, 0x78, 0xa5, 0xa6, 0x05, 0x80, 0x33, 0x78, 0xa2, 0xa6, 0x05, 0x80, 0x2d, 0x78, 0xa4, 0xa6,
|
||||
0x05, 0x80, 0x27, 0x78, 0xa1, 0xa6, 0x05, 0x80, 0x21, 0x78, 0xa3, 0xa6, 0x05, 0x80, 0x1b, 0x78,
|
||||
0xa6, 0xa6, 0x05, 0x80, 0x15, 0x78, 0xa7, 0xa6, 0x05, 0x80, 0x0f, 0x78, 0xa8, 0xa6, 0x05, 0x80,
|
||||
0x09, 0x78, 0xa9, 0xa6, 0x05, 0x80, 0x03, 0x7f, 0x01, 0x22, 0x7f, 0x00, 0x22, 0xef, 0xb4, 0x09,
|
||||
0x00, 0x50, 0x4f, 0x90, 0x2a, 0x3a, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x2a, 0x55, 0x02, 0x2a, 0x5a,
|
||||
0x02, 0x2a, 0x5f, 0x02, 0x2a, 0x64, 0x02, 0x2a, 0x69, 0x02, 0x2a, 0x6e, 0x02, 0x2a, 0x73, 0x02,
|
||||
0x2a, 0x78, 0x02, 0x2a, 0x7d, 0x78, 0xa5, 0xe6, 0xff, 0x22, 0x78, 0xa2, 0xe6, 0xff, 0x22, 0x78,
|
||||
0xa4, 0xe6, 0xff, 0x22, 0x78, 0xa1, 0xe6, 0xff, 0x22, 0x78, 0xa3, 0xe6, 0xff, 0x22, 0x78, 0xa6,
|
||||
0xe6, 0xff, 0x22, 0x78, 0xa7, 0xe6, 0xff, 0x22, 0x78, 0xa8, 0xe6, 0xff, 0x22, 0x78, 0xa9, 0xe6,
|
||||
0xff, 0x22, 0x7f, 0x00, 0x22, 0xef, 0x54, 0x07, 0x90, 0x2e, 0xe6, 0x93, 0xfe, 0xf4, 0xfc, 0xef,
|
||||
0x54, 0xf0, 0xff, 0xc2, 0xaf, 0x75, 0xa0, 0xff, 0x64, 0x10, 0x70, 0x11, 0x78, 0x12, 0xed, 0x30,
|
||||
0xe2, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03, 0xe2, 0x5c, 0xf2, 0x18, 0x80, 0x0d, 0xef, 0x13, 0x13,
|
||||
0x54, 0x3f, 0x24, 0x11, 0xf8, 0xbd, 0x02, 0x02, 0xe4, 0xfd, 0xed, 0x30, 0xe1, 0x05, 0xe2, 0x4e,
|
||||
0xf2, 0x80, 0x03, 0xe2, 0x5c, 0xf2, 0x18, 0xed, 0x30, 0xe0, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03,
|
||||
0xe2, 0x5c, 0xf2, 0xe4, 0xf5, 0xa0, 0xd2, 0xaf, 0x22, 0xef, 0x54, 0x07, 0x90, 0x2e, 0xee, 0x93,
|
||||
0xfe, 0xf4, 0xfc, 0xef, 0x54, 0xf0, 0xff, 0xc2, 0xaf, 0x75, 0xa0, 0xff, 0x64, 0x10, 0x70, 0x11,
|
||||
0x78, 0x12, 0xed, 0x30, 0xe2, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03, 0xe2, 0x5c, 0xf2, 0x18, 0x80,
|
||||
0x0d, 0xef, 0x13, 0x13, 0x54, 0x3f, 0x24, 0x11, 0xf8, 0xbd, 0x02, 0x02, 0xe4, 0xfd, 0xed, 0x30,
|
||||
0xe1, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03, 0xe2, 0x5c, 0xf2, 0x18, 0xed, 0x30, 0xe0, 0x05, 0xe2,
|
||||
0x4e, 0xf2, 0x80, 0x03, 0xe2, 0x5c, 0xf2, 0xe4, 0xf5, 0xa0, 0xd2, 0xaf, 0x22, 0x8f, 0x2a, 0x8d,
|
||||
0x2b, 0x12, 0x2c, 0xee, 0x78, 0xa1, 0xe6, 0xff, 0x78, 0xa8, 0xe6, 0xfe, 0x78, 0xa1, 0x76, 0x04,
|
||||
0x78, 0xa8, 0x76, 0x04, 0xe5, 0x2a, 0x12, 0x1f, 0x2a, 0xe4, 0xf0, 0x75, 0xf0, 0x0e, 0xe5, 0x2a,
|
||||
0xa4, 0x24, 0xb7, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0xe4, 0xf0, 0x15, 0x2b, 0x15,
|
||||
0x2b, 0x05, 0x2a, 0x05, 0x2a, 0xe5, 0x2b, 0x70, 0xdb, 0x78, 0xa1, 0xa6, 0x07, 0x78, 0xa8, 0xa6,
|
||||
0x06, 0x22, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0,
|
||||
0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12,
|
||||
0x1d, 0x47, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01,
|
||||
0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0x8d, 0x2c, 0xe4,
|
||||
0xff, 0xf5, 0x2e, 0xf5, 0x2f, 0x7e, 0xff, 0xef, 0xc3, 0x95, 0x2c, 0x50, 0x28, 0xef, 0x65, 0x2d,
|
||||
0x60, 0x19, 0x12, 0x09, 0xe8, 0xfd, 0xac, 0xf0, 0xd3, 0x95, 0x2f, 0xec, 0x95, 0x2e, 0x40, 0x0b,
|
||||
0xed, 0x24, 0x20, 0xf5, 0x2f, 0xe4, 0x3c, 0xf5, 0x2e, 0xae, 0x07, 0x0f, 0x74, 0x02, 0x29, 0xf9,
|
||||
0xe4, 0x3a, 0xfa, 0x80, 0xd2, 0xaf, 0x06, 0x22, 0x12, 0x2d, 0x71, 0xc2, 0xaf, 0x75, 0xa0, 0xff,
|
||||
0xbf, 0x01, 0x04, 0x7e, 0x18, 0x80, 0x08, 0xef, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x12, 0xfe, 0xed,
|
||||
0xa8, 0x06, 0x60, 0x05, 0xe2, 0x4c, 0xf2, 0x80, 0x08, 0xe2, 0xff, 0xec, 0xf4, 0xfd, 0xef, 0x5d,
|
||||
0xf2, 0xe4, 0xf5, 0xa0, 0xd2, 0xaf, 0x22, 0x12, 0x2d, 0x71, 0x90, 0xff, 0x13, 0xd3, 0x94, 0x03,
|
||||
0x40, 0x0f, 0xef, 0x75, 0xf0, 0x04, 0xa4, 0x25, 0x82, 0xf5, 0x82, 0xe5, 0xf0, 0x35, 0x83, 0xf5,
|
||||
0x83, 0xed, 0x60, 0x04, 0xe0, 0x4c, 0xf0, 0x22, 0xe0, 0xff, 0xec, 0xf4, 0xfe, 0xef, 0x5e, 0xf0,
|
||||
0x22, 0x90, 0x04, 0xcc, 0xe0, 0x24, 0x01, 0xff, 0x90, 0x04, 0xcb, 0xe0, 0x34, 0x00, 0x8f, 0xf0,
|
||||
0x12, 0x0a, 0x4b, 0x90, 0x04, 0xce, 0xe0, 0x24, 0x02, 0xff, 0x90, 0x04, 0xcd, 0xe0, 0x34, 0x00,
|
||||
0x90, 0x00, 0x02, 0x8f, 0xf0, 0x02, 0x0a, 0x6a, 0xab, 0x1d, 0xe5, 0x1f, 0x24, 0x0c, 0xf9, 0xe4,
|
||||
0x35, 0x1e, 0xfa, 0x7e, 0x00, 0xe9, 0x25, 0x26, 0xf9, 0xee, 0x3a, 0xfa, 0x12, 0x08, 0xbb, 0xff,
|
||||
0x22, 0xab, 0x1d, 0xaa, 0x1e, 0xa9, 0x1f, 0x90, 0x00, 0x0b, 0x12, 0x08, 0xd4, 0xff, 0x22, 0x75,
|
||||
0xf0, 0x0e, 0xef, 0xa4, 0x24, 0xaa, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xfe,
|
||||
0xa3, 0xe0, 0xff, 0x22, 0x75, 0xf0, 0x0e, 0xef, 0xa4, 0x24, 0xa9, 0xf5, 0x82, 0xe5, 0xf0, 0x34,
|
||||
0x00, 0xf5, 0x83, 0x22, 0x53, 0xac, 0xfd, 0x75, 0x88, 0x08, 0xef, 0x75, 0xf0, 0x20, 0xa4, 0xff,
|
||||
0xe5, 0xf0, 0x44, 0x80, 0xf5, 0x8f, 0x8f, 0x8e, 0xe4, 0x90, 0x04, 0xd4, 0xf0, 0x75, 0x88, 0xa0,
|
||||
0x22, 0x8f, 0x18, 0xc2, 0xaf, 0x90, 0xff, 0x88, 0x74, 0x40, 0xf0, 0x74, 0xc0, 0xf0, 0x90, 0xff,
|
||||
0x01, 0x74, 0x0f, 0xf0, 0x74, 0x0d, 0xf0, 0x43, 0x95, 0x60, 0xe4, 0xf5, 0x96, 0x22, 0x78, 0xad,
|
||||
0xe6, 0x70, 0xfb, 0xff, 0xef, 0x12, 0x1f, 0x39, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xef, 0x12, 0x1f,
|
||||
0x97, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0x0f, 0xbf, 0x2a, 0xea, 0x22, 0x90, 0xff, 0x54, 0xf0, 0x90,
|
||||
0xff, 0x5c, 0xf0, 0x90, 0xff, 0x48, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x78, 0xee,
|
||||
0x94, 0x00, 0x22, 0xef, 0x24, 0x3a, 0xf5, 0x65, 0xe4, 0x3e, 0xf5, 0x64, 0x7e, 0x00, 0x7f, 0x03,
|
||||
0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x04, 0x79, 0xcf, 0x02, 0x0c, 0xb2, 0xef, 0x14, 0x60, 0x08, 0x04,
|
||||
0x70, 0x0a, 0x8d, 0x59, 0x7f, 0x00, 0x22, 0x8d, 0x5d, 0x7f, 0x00, 0x22, 0x7f, 0x01, 0x22, 0xef,
|
||||
0xc3, 0x94, 0x28, 0x50, 0x08, 0x12, 0x2c, 0xa4, 0xed, 0xf0, 0x7f, 0x00, 0x22, 0x7f, 0x01, 0x22,
|
||||
0x75, 0xf0, 0x0e, 0xef, 0xa4, 0x24, 0xac, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x00, 0x12, 0x2c, 0x9c,
|
||||
0x22, 0xef, 0x54, 0x07, 0x90, 0x2e, 0xee, 0x93, 0xfc, 0xef, 0xc4, 0x54, 0x0f, 0xff, 0x22, 0x85,
|
||||
0x65, 0x82, 0x85, 0x64, 0x83, 0x75, 0xf0, 0x05, 0xe5, 0x20, 0x02, 0x0c, 0x79, 0x78, 0xaa, 0xa6,
|
||||
0x07, 0xef, 0x70, 0x04, 0x78, 0xac, 0xa6, 0x07, 0x22, 0xef, 0x25, 0xe0, 0x24, 0x00, 0xf8, 0xe2,
|
||||
0xfe, 0x08, 0xe2, 0xff, 0x22, 0xee, 0x30, 0xe7, 0x07, 0xc3, 0xe4, 0x9f, 0xff, 0xe4, 0x9e, 0xfe,
|
||||
0x22, 0x74, 0x7e, 0x2f, 0xf8, 0xed, 0xf2, 0x22, 0x41, 0x04, 0xd2, 0x00, 0x00, 0x78, 0xaa, 0xe6,
|
||||
0xff, 0x22, 0x12, 0x2c, 0x8f, 0x22, 0x12, 0x2c, 0x8f, 0x22, 0x44, 0x54, 0x0e, 0x01, 0x0f, 0x78,
|
||||
0x0f, 0x00, 0x64, 0x43, 0x42, 0x41, 0x40, 0x61, 0x60, 0x77, 0x76, 0x75, 0x70, 0x57, 0x56, 0x55,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x14, 0x80, 0x64,
|
||||
0x40, 0x40, 0x40, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
|
||||
0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc8, 0x00, 0xc8,
|
||||
0x00, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x54,
|
||||
0x0a, 0x01, 0x0f, 0x78, 0x14, 0x00, 0x3c, 0x57, 0x42, 0x70, 0x41, 0x75, 0x40, 0x76, 0x61, 0x77,
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
|
||||
0x19, 0x28, 0x80, 0x78, 0x00, 0x40, 0x0e, 0x14, 0x00, 0x0a, 0x0a, 0x85, 0x00, 0x8c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x05, 0x00, 0xef, 0x00, 0xef, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xc8, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x01, 0x02,
|
||||
0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
|
||||
0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02,
|
||||
0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x7f, 0x02, 0x91, 0xd1, 0x7f, 0x0a, 0x91, 0xb4, 0xf1, 0x0a,
|
||||
0xd2, 0xaf, 0xe4, 0xf5, 0x8a, 0x12, 0x32, 0x76, 0x80, 0xf8, 0x75, 0x0a, 0x04, 0xe4, 0x90, 0x04,
|
||||
0xd3, 0xf0, 0x22, 0xf1, 0xd8, 0x7d, 0x03, 0x7f, 0x12, 0x51, 0xd9, 0x7c, 0x02, 0x7d, 0xf5, 0x7f,
|
||||
0x15, 0xf1, 0x8f, 0x7e, 0x01, 0x7f, 0x00, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0xf5, 0x12,
|
||||
0x0c, 0xb2, 0x90, 0x03, 0x9c, 0x74, 0x20, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0xf0, 0xe4, 0x90,
|
||||
0x03, 0xe1, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x06, 0xf0, 0x90,
|
||||
0x03, 0xef, 0x74, 0x71, 0xf0, 0xe4, 0x90, 0x03, 0xf2, 0xf0, 0x78, 0xb1, 0xf6, 0xf1, 0x64, 0xe4,
|
||||
0x78, 0xb0, 0xf6, 0x22, 0x90, 0x03, 0xf2, 0xe0, 0xff, 0x30, 0xe0, 0x05, 0x43, 0x90, 0x10, 0x80,
|
||||
0x03, 0x53, 0x90, 0xef, 0xef, 0x90, 0xff, 0x10, 0x30, 0xe1, 0x06, 0xe0, 0x54, 0xe7, 0xf0, 0x80,
|
||||
0x04, 0xe0, 0x44, 0x18, 0xf0, 0x90, 0x03, 0xf2, 0xe0, 0x30, 0xe2, 0x02, 0xf1, 0xe0, 0x22, 0xab,
|
||||
0x07, 0x8c, 0x66, 0x8d, 0x67, 0x12, 0x35, 0x7c, 0x54, 0xe7, 0xf0, 0x90, 0xff, 0x14, 0xe0, 0x44,
|
||||
0x18, 0xf0, 0x90, 0xff, 0x1b, 0xe0, 0x44, 0x18, 0xf0, 0xe4, 0x90, 0x04, 0xd5, 0xf0, 0x43, 0x90,
|
||||
0x10, 0x53, 0xac, 0xef, 0xf5, 0xa3, 0xeb, 0x44, 0x80, 0xf5, 0xa1, 0x75, 0xa6, 0x68, 0x75, 0xa2,
|
||||
0x81, 0x75, 0xd3, 0x00, 0x75, 0xd2, 0xff, 0xe0, 0x7c, 0x00, 0x25, 0x67, 0xff, 0xec, 0x35, 0x66,
|
||||
0xf5, 0xd7, 0x8f, 0xd6, 0x75, 0xd1, 0x1a, 0x22, 0x90, 0xff, 0x18, 0xe0, 0x44, 0x04, 0xf0, 0x22,
|
||||
0x90, 0xff, 0x19, 0xe0, 0x44, 0x04, 0xf0, 0x53, 0xac, 0xf7, 0x22, 0xac, 0x07, 0xe4, 0xfe, 0x90,
|
||||
0x03, 0xf2, 0xe0, 0x30, 0xe2, 0x0a, 0x90, 0xff, 0x19, 0xe0, 0x54, 0xfb, 0xf0, 0x43, 0xac, 0x08,
|
||||
0x90, 0xff, 0x18, 0xe0, 0x54, 0xfb, 0xf0, 0x0e, 0xee, 0xc3, 0x9c, 0x50, 0x1f, 0xe4, 0xf5, 0x27,
|
||||
0xf5, 0x28, 0xc3, 0xe5, 0x28, 0x94, 0x46, 0xe5, 0x27, 0x94, 0x00, 0x50, 0xea, 0xe4, 0x90, 0x04,
|
||||
0xd4, 0xf0, 0x05, 0x28, 0xe5, 0x28, 0x70, 0x02, 0x05, 0x27, 0x80, 0xe6, 0x12, 0x2f, 0xd8, 0x90,
|
||||
0x03, 0xf2, 0xe0, 0x30, 0xe2, 0x03, 0x12, 0x2f, 0xe0, 0x22, 0x8b, 0x1d, 0x8a, 0x1e, 0x89, 0x1f,
|
||||
0x8d, 0x20, 0x90, 0x03, 0xef, 0xe0, 0xf5, 0x21, 0xe4, 0xf5, 0x22, 0x85, 0x20, 0x20, 0x12, 0x2f,
|
||||
0xd8, 0x90, 0x03, 0x9a, 0xe0, 0x64, 0x03, 0x70, 0x3e, 0x91, 0x57, 0x93, 0xf5, 0x24, 0xe4, 0xf5,
|
||||
0x23, 0xe5, 0x23, 0xc3, 0x95, 0x24, 0x50, 0x22, 0xe5, 0x0c, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35,
|
||||
0x0b, 0xf5, 0x83, 0xe5, 0x82, 0x25, 0x23, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe4, 0x93,
|
||||
0xff, 0xe4, 0xfd, 0x12, 0x2a, 0xd9, 0x05, 0x23, 0x80, 0xd7, 0xe4, 0xfd, 0x7f, 0x12, 0x12, 0x2a,
|
||||
0xd9, 0xb1, 0x5a, 0x7f, 0x02, 0xa1, 0x76, 0x51, 0x46, 0xff, 0x7e, 0x00, 0x60, 0x02, 0x7e, 0x01,
|
||||
0x90, 0x02, 0xf7, 0xee, 0xf0, 0xef, 0x60, 0x15, 0x51, 0x62, 0x90, 0x02, 0xf8, 0x51, 0x6b, 0x51,
|
||||
0x35, 0x90, 0x02, 0xfa, 0x51, 0x6b, 0xa3, 0x74, 0x10, 0xf0, 0xe4, 0xa3, 0xf0, 0x75, 0x23, 0x09,
|
||||
0x74, 0xf5, 0x25, 0x23, 0x51, 0x25, 0x74, 0xff, 0xf0, 0x05, 0x23, 0xe5, 0x23, 0xb4, 0x20, 0xf0,
|
||||
0xe5, 0x20, 0x60, 0x04, 0x90, 0x02, 0xf6, 0xf0, 0x90, 0x02, 0xf7, 0xe0, 0xff, 0x78, 0xb1, 0xe6,
|
||||
0xfe, 0x6f, 0x60, 0x24, 0xa3, 0xe0, 0x54, 0x3f, 0xf0, 0xee, 0x60, 0x06, 0xe0, 0x44, 0x40, 0xf0,
|
||||
0x80, 0x0a, 0x90, 0x02, 0xf8, 0xe0, 0xf0, 0xe4, 0x90, 0x02, 0xf6, 0xf0, 0x90, 0x02, 0xf7, 0xe0,
|
||||
0x78, 0xb1, 0xf6, 0x75, 0x22, 0x01, 0x80, 0x0d, 0xee, 0x60, 0x0a, 0x90, 0x02, 0xf8, 0xe0, 0x54,
|
||||
0x3f, 0xf0, 0x44, 0x80, 0xf0, 0xe5, 0x21, 0x20, 0xe7, 0x19, 0x30, 0xe6, 0x04, 0x51, 0x46, 0x70,
|
||||
0x12, 0xe5, 0x21, 0x30, 0xe5, 0x04, 0xe5, 0x22, 0x70, 0x09, 0xe5, 0x21, 0x30, 0xe4, 0x0c, 0xe5,
|
||||
0x20, 0x60, 0x08, 0x90, 0x03, 0xe2, 0xe0, 0xff, 0x12, 0x2f, 0xeb, 0x90, 0x03, 0xf2, 0xe0, 0x78,
|
||||
0xb0, 0x66, 0x60, 0x08, 0x12, 0x2f, 0x64, 0x90, 0x03, 0xf2, 0xe0, 0xf6, 0x75, 0x24, 0x30, 0x51,
|
||||
0x2d, 0x51, 0x25, 0x74, 0x30, 0xf0, 0x74, 0xf5, 0x25, 0x24, 0x51, 0x25, 0xe5, 0x20, 0xf0, 0x05,
|
||||
0x24, 0x51, 0x46, 0x7f, 0x00, 0x60, 0x02, 0x7f, 0x01, 0x74, 0xf5, 0x25, 0x24, 0x51, 0x25, 0xef,
|
||||
0xf0, 0x90, 0x00, 0x0a, 0x12, 0x08, 0xd4, 0x60, 0x09, 0x74, 0xf5, 0x25, 0x24, 0x51, 0x25, 0xe0,
|
||||
0x04, 0xf0, 0x05, 0x24, 0x51, 0x62, 0xfd, 0xac, 0xf0, 0xec, 0xff, 0x51, 0x1e, 0xef, 0xf0, 0xaf,
|
||||
0x05, 0x51, 0x1e, 0xef, 0xf0, 0x51, 0x35, 0xe5, 0xf0, 0xff, 0x51, 0x1e, 0xef, 0xf0, 0x51, 0x35,
|
||||
0xff, 0x51, 0x1e, 0x51, 0x52, 0xe5, 0xf0, 0xff, 0x51, 0x1e, 0x51, 0x52, 0xff, 0x51, 0x1e, 0x51,
|
||||
0x5a, 0xe5, 0xf0, 0xff, 0x51, 0x1e, 0x51, 0x5a, 0xff, 0x51, 0x1e, 0xef, 0xf0, 0x75, 0x24, 0x40,
|
||||
0x51, 0x2d, 0x51, 0x25, 0x74, 0x40, 0xf0, 0xe4, 0xf5, 0x23, 0xaf, 0x23, 0x12, 0x2d, 0xc2, 0x51,
|
||||
0x07, 0x51, 0x3b, 0x40, 0xf5, 0x75, 0x24, 0x60, 0x51, 0x2d, 0x51, 0x25, 0x74, 0x60, 0xf0, 0xe4,
|
||||
0xf5, 0x23, 0xaf, 0x23, 0x12, 0x2d, 0x99, 0x51, 0x07, 0x51, 0x3b, 0x40, 0xf5, 0x75, 0x24, 0x80,
|
||||
0x51, 0x2d, 0x51, 0x25, 0x74, 0x60, 0xf0, 0xe4, 0xf5, 0x23, 0xaf, 0x23, 0x12, 0x00, 0x09, 0x51,
|
||||
0x1e, 0xef, 0x51, 0x3d, 0x40, 0xf4, 0x22, 0x8e, 0x25, 0x8f, 0x26, 0xe5, 0x25, 0xff, 0xae, 0x24,
|
||||
0x05, 0x24, 0x74, 0xf5, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xef, 0xf0, 0xae, 0x24,
|
||||
0x05, 0x24, 0x74, 0xf5, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0xaf, 0x24, 0x05,
|
||||
0x24, 0x74, 0xf5, 0x2f, 0x22, 0x90, 0x00, 0x02, 0x02, 0x0a, 0x13, 0xe5, 0x26, 0xf0, 0x05, 0x23,
|
||||
0xe5, 0x23, 0xc3, 0x94, 0x10, 0x22, 0xab, 0x1d, 0xaa, 0x1e, 0xa9, 0x1f, 0x90, 0x00, 0x04, 0x02,
|
||||
0x08, 0xd4, 0xef, 0xf0, 0x90, 0x00, 0x06, 0x02, 0x0a, 0x13, 0xef, 0xf0, 0x90, 0x00, 0x08, 0x02,
|
||||
0x0a, 0x13, 0xab, 0x1d, 0xaa, 0x1e, 0xa9, 0x1f, 0x02, 0x09, 0xe8, 0xfd, 0xac, 0xf0, 0xec, 0xf0,
|
||||
0xaf, 0x05, 0xa3, 0xef, 0xf0, 0x22, 0xe4, 0xf5, 0x08, 0x90, 0x03, 0xf4, 0xe0, 0x64, 0x01, 0x70,
|
||||
0x75, 0x85, 0x0c, 0x82, 0x85, 0x0b, 0x83, 0x93, 0xff, 0x74, 0x01, 0x93, 0xfd, 0x12, 0x18, 0xe2,
|
||||
0x7b, 0x00, 0x7a, 0x00, 0x79, 0x69, 0x12, 0x2c, 0x41, 0x78, 0x69, 0xe6, 0xfc, 0x08, 0xe6, 0xfd,
|
||||
0xec, 0x90, 0x03, 0xa5, 0x51, 0x6f, 0x08, 0xe6, 0xfc, 0x08, 0xe6, 0xfd, 0xec, 0xa3, 0x51, 0x6f,
|
||||
0x91, 0x57, 0x93, 0xff, 0x90, 0x03, 0xc0, 0xf0, 0x7e, 0x00, 0xe5, 0x0c, 0x24, 0x09, 0xfd, 0xe4,
|
||||
0x35, 0x0b, 0xfa, 0xa9, 0x05, 0x7b, 0xff, 0x78, 0xc1, 0x7c, 0x03, 0x7d, 0x01, 0x12, 0x08, 0x95,
|
||||
0x75, 0x20, 0x01, 0x75, 0x21, 0x03, 0x75, 0x22, 0x35, 0x75, 0x23, 0x01, 0x75, 0x24, 0x03, 0x75,
|
||||
0x25, 0x15, 0x7b, 0x01, 0x7a, 0x03, 0x79, 0xb5, 0x12, 0x1a, 0x70, 0xe4, 0x90, 0x03, 0xf4, 0xf0,
|
||||
0x90, 0x04, 0xd4, 0xf0, 0x80, 0xda, 0x90, 0x04, 0xd3, 0xe0, 0x70, 0x02, 0x61, 0x96, 0x14, 0x70,
|
||||
0x02, 0x61, 0xbc, 0x14, 0x70, 0x02, 0x81, 0x2e, 0x24, 0xfe, 0x60, 0x02, 0x81, 0x33, 0xe4, 0xf5,
|
||||
0x1c, 0xf5, 0x1b, 0xf5, 0x1a, 0xf5, 0x19, 0x75, 0x0b, 0x2d, 0x75, 0x0c, 0xca, 0xaf, 0x0c, 0xae,
|
||||
0x0b, 0x12, 0x25, 0xe3, 0x91, 0x72, 0xe4, 0xfd, 0xff, 0x12, 0x2d, 0x3b, 0x91, 0x60, 0x91, 0x60,
|
||||
0xe4, 0xf5, 0x18, 0x91, 0x57, 0x93, 0xff, 0xe5, 0x18, 0xc3, 0x9f, 0x50, 0x39, 0xaf, 0x18, 0x12,
|
||||
0x2d, 0xc2, 0xe4, 0xfc, 0xfd, 0x7b, 0x98, 0x7a, 0x3a, 0xf9, 0xf8, 0xc3, 0x12, 0x0b, 0xb4, 0x50,
|
||||
0x21, 0xe4, 0x7f, 0x01, 0xfe, 0xfd, 0xfc, 0xa9, 0x18, 0xa8, 0x01, 0x12, 0x0b, 0xdb, 0xe5, 0x1c,
|
||||
0x4f, 0xf5, 0x1c, 0xe5, 0x1b, 0x4e, 0xf5, 0x1b, 0xe5, 0x1a, 0x4d, 0xf5, 0x1a, 0xe5, 0x19, 0x4c,
|
||||
0xf5, 0x19, 0x05, 0x18, 0x80, 0xbd, 0xaf, 0x1c, 0xae, 0x1b, 0xad, 0x1a, 0xac, 0x19, 0xb1, 0xa3,
|
||||
0x8f, 0x0a, 0x90, 0x03, 0xb6, 0xe5, 0x0a, 0xf0, 0x70, 0x02, 0x81, 0x38, 0x91, 0x79, 0xef, 0x4e,
|
||||
0x70, 0x02, 0x81, 0x38, 0x81, 0x33, 0xe4, 0xf5, 0x09, 0xaf, 0x0a, 0x91, 0x79, 0x12, 0x25, 0xe3,
|
||||
0x12, 0x2f, 0x13, 0x91, 0x72, 0xaf, 0x0c, 0xae, 0x0b, 0x12, 0x2d, 0x23, 0xe4, 0xfd, 0xff, 0x12,
|
||||
0x2d, 0x3b, 0xb1, 0x8f, 0x90, 0x04, 0xd3, 0x74, 0x01, 0xf0, 0x80, 0x7c, 0xe4, 0xf5, 0x18, 0xf5,
|
||||
0x19, 0x90, 0x03, 0xe3, 0xe0, 0xf5, 0x08, 0x91, 0x69, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x19, 0x12,
|
||||
0x23, 0xbe, 0x8f, 0x18, 0xe5, 0x19, 0x60, 0x10, 0x78, 0x71, 0x76, 0x00, 0x08, 0x76, 0x78, 0x08,
|
||||
0x76, 0x00, 0x08, 0x76, 0xfa, 0x08, 0x76, 0x01, 0x78, 0x72, 0xe6, 0x78, 0x6d, 0xf6, 0x78, 0x74,
|
||||
0xe6, 0x78, 0x6e, 0xf6, 0x78, 0x75, 0xe6, 0x7f, 0x00, 0x60, 0x02, 0x7f, 0x01, 0x78, 0x6f, 0xa6,
|
||||
0x07, 0x78, 0x1d, 0x7c, 0x00, 0x7d, 0x00, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x6d, 0x7e, 0x00, 0x7f,
|
||||
0x03, 0x12, 0x08, 0x95, 0x90, 0x03, 0xe4, 0xe0, 0xf5, 0x20, 0x75, 0x21, 0x0f, 0xd1, 0x47, 0x78,
|
||||
0x70, 0xef, 0xf6, 0xfd, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x71, 0x11, 0x3a, 0x80, 0x0a, 0x75, 0x08,
|
||||
0x0a, 0x80, 0x05, 0xe4, 0x90, 0x04, 0xd3, 0xf0, 0xe5, 0x08, 0x60, 0x1a, 0x90, 0x04, 0xd3, 0xe0,
|
||||
0xb4, 0x02, 0x0c, 0x75, 0x88, 0x08, 0x75, 0x89, 0x80, 0x75, 0x91, 0x03, 0xe4, 0xf5, 0x91, 0xe4,
|
||||
0x90, 0x04, 0xd4, 0xf0, 0x80, 0xe2, 0x22, 0x85, 0x0c, 0x82, 0x85, 0x0b, 0x83, 0x74, 0x02, 0x22,
|
||||
0x7b, 0x00, 0x7a, 0x00, 0x79, 0x71, 0x12, 0x12, 0x03, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x71, 0x02,
|
||||
0x12, 0x03, 0xaf, 0x0c, 0xae, 0x0b, 0x02, 0x13, 0xe8, 0x91, 0x80, 0x8e, 0x0b, 0x8f, 0x0c, 0x22,
|
||||
0xef, 0x24, 0xfc, 0x70, 0x05, 0x7e, 0x2e, 0x7f, 0x4e, 0x22, 0xe4, 0xfe, 0xff, 0x22, 0x8b, 0x22,
|
||||
0x8a, 0x23, 0x89, 0x24, 0xe4, 0xf5, 0x28, 0xf5, 0x29, 0x91, 0x57, 0x93, 0xff, 0xe5, 0x29, 0xc3,
|
||||
0x9f, 0x50, 0x59, 0xab, 0x25, 0xaa, 0x26, 0xa9, 0x27, 0xb1, 0x3d, 0xff, 0x85, 0x0c, 0x82, 0x85,
|
||||
0x0b, 0x83, 0xc3, 0x74, 0x08, 0x93, 0x9f, 0x74, 0x07, 0x93, 0x95, 0xf0, 0x50, 0x3a, 0xb1, 0x4b,
|
||||
0xb1, 0x33, 0xc3, 0x9f, 0xff, 0xe5, 0xf0, 0x9e, 0xfe, 0x12, 0x2d, 0xa5, 0xc0, 0x06, 0xc0, 0x07,
|
||||
0xb1, 0x4b, 0xab, 0x25, 0xaa, 0x26, 0xa9, 0x27, 0xb1, 0x33, 0x2f, 0xff, 0xe5, 0xf0, 0x3e, 0xfe,
|
||||
0xef, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0xd0, 0x05, 0xd0, 0x04, 0xc3,
|
||||
0xed, 0x9f, 0xec, 0x9e, 0x50, 0x02, 0x05, 0x28, 0x05, 0x29, 0x80, 0x9d, 0x91, 0x57, 0x93, 0x75,
|
||||
0xf0, 0x04, 0xa4, 0xff, 0xae, 0xf0, 0x7c, 0x00, 0x7d, 0x05, 0x12, 0x09, 0x47, 0xef, 0x14, 0xff,
|
||||
0xe5, 0x28, 0xc3, 0x9f, 0x40, 0x1c, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0x74, 0xff, 0x12, 0x09,
|
||||
0x01, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0x90, 0x00, 0x01, 0x12, 0x09, 0x13, 0xe4, 0x90, 0x04,
|
||||
0xd3, 0xf0, 0x22, 0x8f, 0x82, 0xf5, 0x83, 0x12, 0x0a, 0x13, 0xff, 0xae, 0xf0, 0x75, 0xf0, 0x02,
|
||||
0xe5, 0x29, 0xa4, 0xf5, 0x82, 0x85, 0xf0, 0x83, 0x02, 0x0a, 0x13, 0xe5, 0x29, 0x24, 0x01, 0xff,
|
||||
0xe4, 0x33, 0xfe, 0xef, 0x25, 0xe0, 0xff, 0xee, 0x33, 0x22, 0x43, 0xac, 0x10, 0xb1, 0x7c, 0x44,
|
||||
0x18, 0xf0, 0x90, 0xff, 0x14, 0xe0, 0x54, 0xf7, 0xf0, 0x90, 0xff, 0x1b, 0xe0, 0x54, 0xf7, 0xf0,
|
||||
0xe4, 0xf5, 0xa6, 0xf5, 0xa2, 0x22, 0x90, 0x04, 0xd3, 0xef, 0xf0, 0x22, 0x90, 0xff, 0x12, 0xe0,
|
||||
0x54, 0xe7, 0xf0, 0x90, 0xff, 0x11, 0xe0, 0x44, 0x18, 0xf0, 0x90, 0xff, 0x10, 0xe0, 0x22, 0x7e,
|
||||
0x00, 0x7f, 0x15, 0x7d, 0x00, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x89, 0x12, 0x0c, 0xb2, 0x78, 0x9c,
|
||||
0x76, 0xff, 0x22, 0x8f, 0x20, 0x8e, 0x1f, 0x8d, 0x1e, 0x8c, 0x1d, 0x75, 0x21, 0x01, 0xe5, 0x21,
|
||||
0x25, 0xe0, 0x25, 0xe0, 0x24, 0xd2, 0xf5, 0x82, 0xe4, 0x34, 0x2e, 0xf5, 0x83, 0x12, 0x0b, 0xfa,
|
||||
0xab, 0x20, 0xaa, 0x1f, 0xa9, 0x1e, 0xa8, 0x1d, 0xc3, 0x12, 0x0b, 0xca, 0x70, 0x03, 0xaf, 0x21,
|
||||
0x22, 0x05, 0x21, 0xe5, 0x21, 0xb4, 0x05, 0xd6, 0x7f, 0x00, 0x22, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0,
|
||||
0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03,
|
||||
0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x75, 0x89, 0x80, 0x90, 0x04, 0xd4, 0xe0, 0xc3,
|
||||
0x94, 0x14, 0x50, 0x06, 0xe0, 0x04, 0xf0, 0x75, 0x8a, 0x00, 0xe5, 0x08, 0x60, 0x02, 0x15, 0x08,
|
||||
0x12, 0x00, 0x03, 0xd1, 0x30, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0,
|
||||
0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32,
|
||||
0x78, 0x95, 0xe6, 0x60, 0x06, 0xc3, 0x94, 0xc8, 0x50, 0x01, 0x06, 0x78, 0x96, 0xe6, 0x60, 0x06,
|
||||
0xc3, 0x94, 0xc8, 0x50, 0x01, 0x06, 0x22, 0xe4, 0xf5, 0x22, 0xe5, 0x1d, 0x60, 0x07, 0xe5, 0x1e,
|
||||
0x70, 0x03, 0x02, 0x38, 0x74, 0xe5, 0x1e, 0x60, 0x07, 0xe5, 0x1d, 0x70, 0x03, 0x02, 0x38, 0x74,
|
||||
0xe5, 0x1d, 0x70, 0x03, 0x02, 0x38, 0x0b, 0xe5, 0x1e, 0x70, 0x03, 0x02, 0x38, 0x0b, 0xe5, 0x1f,
|
||||
0xd3, 0x94, 0x01, 0x40, 0x0a, 0x78, 0x9b, 0xe6, 0x94, 0x64, 0x50, 0x0c, 0x06, 0x80, 0x09, 0x78,
|
||||
0x9a, 0xe6, 0xc3, 0x94, 0x64, 0x50, 0x01, 0x06, 0x78, 0x97, 0xe6, 0x65, 0x1f, 0x60, 0x12, 0xe4,
|
||||
0x78, 0x95, 0xf6, 0x78, 0x8b, 0x12, 0x38, 0x8e, 0x78, 0x89, 0xf6, 0x08, 0xf6, 0x78, 0x97, 0xa6,
|
||||
0x1f, 0x78, 0x89, 0xe6, 0xff, 0x60, 0x17, 0xc3, 0xe5, 0x1d, 0x12, 0x39, 0x27, 0x50, 0x0f, 0x78,
|
||||
0x89, 0xe6, 0xff, 0xc3, 0xe5, 0x1d, 0x9f, 0xff, 0xe4, 0x78, 0x8c, 0x12, 0x39, 0x69, 0x78, 0x89,
|
||||
0xa6, 0x1d, 0x08, 0xe6, 0xff, 0x60, 0x17, 0xc3, 0xe5, 0x1e, 0x12, 0x39, 0x27, 0x50, 0x0f, 0x78,
|
||||
0x8a, 0xe6, 0xff, 0xc3, 0xe5, 0x1e, 0x9f, 0xff, 0xe4, 0x78, 0x8e, 0x12, 0x39, 0x69, 0x78, 0x8a,
|
||||
0xa6, 0x1e, 0x78, 0x8f, 0x12, 0x39, 0x1f, 0xc0, 0x06, 0xc0, 0x07, 0x78, 0x8b, 0x12, 0x39, 0x1f,
|
||||
0xd0, 0x05, 0xd0, 0x04, 0x12, 0x39, 0x52, 0x40, 0x04, 0x78, 0x8b, 0x80, 0x02, 0x78, 0x8f, 0xe6,
|
||||
0xfe, 0x08, 0xe6, 0xff, 0x78, 0x8f, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0x08, 0x12, 0x39, 0x1f, 0xc0,
|
||||
0x06, 0xc0, 0x07, 0x12, 0x39, 0x1d, 0xd0, 0x05, 0xd0, 0x04, 0x12, 0x39, 0x52, 0x40, 0x04, 0x78,
|
||||
0x8d, 0x80, 0x02, 0x78, 0x91, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x78, 0x91, 0xa6, 0x06, 0x08, 0xa6,
|
||||
0x07, 0xe4, 0x78, 0x96, 0xf6, 0x78, 0x9c, 0xe6, 0x54, 0x3c, 0x60, 0x77, 0x78, 0x8b, 0x12, 0x39,
|
||||
0x1f, 0xd3, 0x12, 0x39, 0x49, 0x50, 0x09, 0x12, 0x39, 0x1d, 0xd3, 0x12, 0x39, 0x49, 0x40, 0x63,
|
||||
0x78, 0x8d, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x7c, 0x00, 0x7d, 0x0a, 0x12, 0x09, 0x35, 0x78, 0x8c,
|
||||
0xe6, 0x24, 0x01, 0xfd, 0x18, 0xe4, 0x36, 0xfc, 0x12, 0x09, 0x9c, 0x8e, 0x23, 0x8f, 0x24, 0x12,
|
||||
0x2d, 0xa5, 0xd3, 0xef, 0x95, 0x20, 0x74, 0x80, 0xf8, 0x6e, 0x98, 0x40, 0x14, 0x78, 0x9c, 0xe6,
|
||||
0x54, 0x0c, 0x60, 0x2f, 0x78, 0x8e, 0x12, 0x39, 0x5e, 0x7f, 0x02, 0x40, 0x02, 0x7f, 0x01, 0x80,
|
||||
0x12, 0x78, 0x9c, 0xe6, 0x54, 0x30, 0x60, 0x1b, 0x78, 0x8c, 0x12, 0x39, 0x5e, 0x7f, 0x03, 0x40,
|
||||
0x02, 0x7f, 0x04, 0x8f, 0x22, 0xe4, 0x78, 0x8d, 0xf6, 0x08, 0xf6, 0x78, 0x8b, 0xf6, 0x08, 0xf6,
|
||||
0x78, 0x9c, 0xf6, 0x78, 0x9c, 0xe6, 0x30, 0xe1, 0x49, 0x78, 0x8b, 0x12, 0x39, 0x1f, 0x12, 0x39,
|
||||
0x48, 0x50, 0x3f, 0x12, 0x39, 0x1d, 0x12, 0x39, 0x48, 0x50, 0x37, 0xe5, 0x1f, 0xb4, 0x01, 0x1c,
|
||||
0x78, 0x95, 0xe6, 0xd3, 0x94, 0x64, 0x40, 0x14, 0x75, 0x22, 0x0c, 0x90, 0x03, 0xef, 0xe0, 0x30,
|
||||
0xe0, 0x06, 0xe4, 0x78, 0x9c, 0xf6, 0x80, 0x04, 0x78, 0x9c, 0x76, 0x02, 0xe5, 0x1f, 0xd3, 0x94,
|
||||
0x01, 0x40, 0x0f, 0x78, 0x95, 0xe6, 0xd3, 0x94, 0x64, 0x40, 0x07, 0x75, 0x22, 0x1c, 0xe4, 0x78,
|
||||
0x9c, 0xf6, 0x78, 0x95, 0xe6, 0x70, 0x6d, 0x76, 0x01, 0x80, 0x69, 0x78, 0x95, 0xe6, 0xff, 0x60,
|
||||
0x4b, 0x78, 0x9c, 0xe6, 0x30, 0xe0, 0x23, 0xef, 0xd3, 0x94, 0x02, 0x40, 0x1d, 0x78, 0x95, 0xe6,
|
||||
0x94, 0x64, 0x50, 0x16, 0x79, 0x9a, 0xe7, 0x78, 0x9b, 0x96, 0x40, 0x08, 0xe4, 0x78, 0x99, 0xf6,
|
||||
0x18, 0x06, 0x80, 0x06, 0xe4, 0x78, 0x98, 0xf6, 0x08, 0x06, 0xe4, 0x78, 0x89, 0x11, 0x8e, 0x08,
|
||||
0x11, 0x8e, 0x08, 0xf6, 0x08, 0xf6, 0x78, 0x95, 0xf6, 0x78, 0x9a, 0xf6, 0x08, 0xf6, 0x78, 0x97,
|
||||
0xf6, 0x18, 0x76, 0x01, 0x78, 0x9c, 0xe6, 0x44, 0x3e, 0xf6, 0x80, 0x18, 0x78, 0x96, 0xe6, 0xff,
|
||||
0xd3, 0x94, 0x14, 0x40, 0x0f, 0xef, 0x94, 0x1e, 0x50, 0x0a, 0x78, 0x9c, 0x76, 0xff, 0xe4, 0x78,
|
||||
0x98, 0xf6, 0x08, 0xf6, 0x78, 0x9c, 0xe6, 0x30, 0xe0, 0x0d, 0x78, 0x98, 0xe6, 0xb4, 0x01, 0x07,
|
||||
0x75, 0x22, 0x05, 0xe4, 0xf6, 0x08, 0xf6, 0x78, 0x9d, 0xa6, 0x22, 0xaf, 0x22, 0x22, 0xf6, 0x08,
|
||||
0xf6, 0x08, 0xf6, 0x08, 0xf6, 0x22, 0x8c, 0x66, 0x8d, 0x67, 0x22, 0xc0, 0xe0, 0xc0, 0x83, 0xc0,
|
||||
0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x10, 0x85, 0xa3, 0x56, 0x75, 0xa3, 0x00, 0xe5, 0x56, 0x30, 0xe3,
|
||||
0x14, 0xe5, 0xa6, 0x20, 0xe0, 0x0f, 0x75, 0xd3, 0x00, 0x75, 0xd2, 0x01, 0x75, 0xd7, 0x04, 0x75,
|
||||
0xd6, 0xd5, 0x75, 0xd1, 0x15, 0xe5, 0x56, 0x54, 0xef, 0xff, 0x64, 0x01, 0x70, 0x26, 0x90, 0x04,
|
||||
0xd5, 0xe0, 0xfe, 0xc3, 0x94, 0xc0, 0x50, 0x15, 0xee, 0xb4, 0xa5, 0x08, 0x75, 0xd3, 0x00, 0x75,
|
||||
0xd2, 0xff, 0x80, 0x0b, 0x31, 0x05, 0x31, 0x0f, 0x75, 0xd1, 0x1a, 0x80, 0x07, 0x31, 0x05, 0x31,
|
||||
0x0f, 0x75, 0xd1, 0x15, 0xbf, 0x20, 0x05, 0x31, 0x05, 0x12, 0x2f, 0xc7, 0xd0, 0xd0, 0xd0, 0x82,
|
||||
0xd0, 0x83, 0xd0, 0xe0, 0x32, 0x75, 0xd3, 0x00, 0x75, 0xd2, 0xff, 0x90, 0x04, 0xd5, 0x22, 0xe0,
|
||||
0x7a, 0x00, 0x25, 0x67, 0xfd, 0xea, 0x35, 0x66, 0xf5, 0xd7, 0x8d, 0xd6, 0x22, 0x78, 0x8d, 0xe6,
|
||||
0xfe, 0x08, 0xe6, 0xff, 0x02, 0x2d, 0xa5, 0x9f, 0xff, 0xe4, 0x94, 0x00, 0xfe, 0x12, 0x2d, 0xa5,
|
||||
0xac, 0x06, 0xad, 0x07, 0xe5, 0x21, 0x75, 0xf0, 0x04, 0xa4, 0xff, 0xc3, 0xed, 0x9f, 0xe5, 0xf0,
|
||||
0x64, 0x80, 0xf8, 0xec, 0x64, 0x80, 0x98, 0x22, 0xc3, 0xef, 0x95, 0x21, 0x74, 0x80, 0xf8, 0x6e,
|
||||
0x98, 0x22, 0xd3, 0xef, 0x9d, 0xec, 0x64, 0x80, 0xf8, 0xee, 0x64, 0x80, 0x98, 0x22, 0xd3, 0xe6,
|
||||
0x94, 0x00, 0x18, 0xe6, 0x64, 0x80, 0x94, 0x80, 0x22, 0x94, 0x00, 0xfe, 0xef, 0x26, 0xf6, 0x18,
|
||||
0xee, 0x36, 0xf6, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xad
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
970
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst8xxT_fw.h
Normal file
970
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst8xxT_fw.h
Normal file
@@ -0,0 +1,970 @@
|
||||
#ifndef HYNITRON_FIRMWARE_H
|
||||
#define HYNITRON_FIRMWARE_H
|
||||
|
||||
static const unsigned char fw_bin[] = {
|
||||
0x00, 0x00, 0x00, 0x3c, 0xdc, 0x56,
|
||||
0x02, 0x2b, 0xae, 0x75, 0x91, 0xcc, 0x75, 0x91, 0x00, 0x32, 0x32, 0x22, 0x02, 0x00, 0x03, 0x02,
|
||||
0x2e, 0xfe, 0x74, 0xb7, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xff, 0x22, 0x22,
|
||||
0x00, 0x02, 0x32, 0x3f, 0xe4, 0x7b, 0x02, 0xfa, 0xf9, 0xf8, 0xaf, 0x00, 0xae, 0x00, 0xad, 0x00,
|
||||
0xac, 0x00, 0x12, 0x0f, 0x42, 0xef, 0x25, 0x00, 0xff, 0xee, 0x35, 0x00, 0xfe, 0xed, 0x35, 0x00,
|
||||
0xfd, 0xec, 0x35, 0x00, 0xfc, 0xab, 0x00, 0xaa, 0x00, 0xa9, 0x00, 0xa8, 0x00, 0x12, 0x0f, 0x42,
|
||||
0xef, 0x24, 0xe0, 0xfb, 0xee, 0x34, 0xff, 0xfa, 0xed, 0x34, 0xff, 0xf9, 0xec, 0x34, 0xff, 0xf8,
|
||||
0x85, 0x0f, 0x82, 0x85, 0x0e, 0x83, 0x22, 0x74, 0x1c, 0x93, 0x24, 0x64, 0xff, 0xe4, 0x33, 0xfe,
|
||||
0xe4, 0xfc, 0xfd, 0x12, 0x0e, 0xb7, 0xe4, 0x7b, 0x64, 0xfa, 0xf9, 0xf8, 0x12, 0x0f, 0x42, 0x8f,
|
||||
0x00, 0x8e, 0x00, 0x8d, 0x00, 0x8c, 0x00, 0xae, 0x00, 0xaf, 0x00, 0xab, 0x00, 0xaa, 0x00, 0xa9,
|
||||
0x00, 0xa8, 0x00, 0xe4, 0xfc, 0xfd, 0xc3, 0x02, 0x0f, 0xd4, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x0d,
|
||||
0xf8, 0xe4, 0xf2, 0xa8, 0x07, 0xe8, 0x24, 0x16, 0xf8, 0xe4, 0xf2, 0x08, 0xf2, 0xa8, 0x07, 0xe8,
|
||||
0x24, 0x18, 0xf8, 0xe4, 0xf2, 0x08, 0xf2, 0xef, 0x04, 0xf9, 0x7a, 0x00, 0x7b, 0xfe, 0xef, 0x24,
|
||||
0x2b, 0xf8, 0x7c, 0x00, 0x7d, 0xfe, 0x7e, 0x00, 0x7f, 0x04, 0x12, 0x0c, 0x68, 0x78, 0x66, 0xe6,
|
||||
0xff, 0x24, 0x05, 0xf8, 0xe4, 0xf2, 0xef, 0x04, 0xf9, 0x7a, 0x00, 0x7b, 0xfe, 0xef, 0x24, 0x07,
|
||||
0x7f, 0x06, 0xf8, 0x7c, 0x00, 0x7d, 0xfe, 0x7e, 0x00, 0x02, 0x0c, 0x68, 0xeb, 0x25, 0xe0, 0x25,
|
||||
0xe0, 0x24, 0x61, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x22, 0xe6, 0xff, 0x24, 0x2b, 0xf8, 0xe2,
|
||||
0xfc, 0x08, 0xe2, 0xfd, 0xa8, 0x07, 0xe8, 0x04, 0xf8, 0xec, 0xf2, 0x08, 0xed, 0xf2, 0x78, 0x66,
|
||||
0xe6, 0xff, 0x24, 0x2d, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0xfd, 0xa8, 0x07, 0xe8, 0x22, 0xab, 0x00,
|
||||
0xaa, 0x00, 0xa9, 0x00, 0xa8, 0x00, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0x12, 0x0e, 0xb7, 0xa8, 0x04,
|
||||
0xa9, 0x05, 0xaa, 0x06, 0xab, 0x07, 0x22, 0xab, 0x00, 0xaa, 0x00, 0xa9, 0x00, 0xe5, 0x00, 0x75,
|
||||
0xf0, 0x02, 0xa4, 0xf5, 0x82, 0x85, 0xf0, 0x83, 0x02, 0x0d, 0xe6, 0x74, 0x1d, 0x93, 0x24, 0x64,
|
||||
0xff, 0xe4, 0x33, 0xfe, 0xe4, 0xfc, 0xfd, 0x12, 0x0e, 0xb7, 0xe4, 0x7b, 0x64, 0xfa, 0xf9, 0xf8,
|
||||
0x12, 0x0f, 0x42, 0x8f, 0x00, 0x8e, 0x00, 0x8d, 0x00, 0x8c, 0x00, 0xae, 0x00, 0xaf, 0x00, 0xab,
|
||||
0x00, 0xaa, 0x00, 0xa9, 0x00, 0xa8, 0x00, 0xe4, 0xfc, 0xfd, 0xc3, 0x02, 0x0f, 0xd4, 0xaf, 0x00,
|
||||
0xef, 0x33, 0x95, 0xe0, 0xfe, 0xef, 0x25, 0xe0, 0xff, 0xee, 0x33, 0xfe, 0x74, 0xb5, 0x2f, 0xf5,
|
||||
0x82, 0x74, 0x00, 0x3e, 0xf5, 0x83, 0x22, 0x78, 0x68, 0xa6, 0x07, 0x78, 0x6b, 0xe6, 0x78, 0x69,
|
||||
0xf6, 0x90, 0x00, 0xb7, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x00, 0xb5, 0xcf, 0xf0, 0xa3, 0xef, 0xf0,
|
||||
0x08, 0x76, 0xff, 0x22, 0x7e, 0x00, 0x7d, 0x00, 0x7f, 0x04, 0x7b, 0x01, 0x7a, 0x00, 0x79, 0xb5,
|
||||
0x02, 0x10, 0x98, 0xef, 0x2b, 0xff, 0xee, 0x3a, 0xfe, 0xed, 0x39, 0xfd, 0xec, 0x38, 0xfc, 0x22,
|
||||
0xab, 0x00, 0xaa, 0x00, 0xa9, 0x00, 0x85, 0x00, 0x82, 0x75, 0x83, 0x00, 0xe5, 0x00, 0x12, 0x0c,
|
||||
0xe6, 0xe5, 0x00, 0x25, 0xe0, 0x24, 0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x00, 0xf5, 0x83, 0x22, 0x74,
|
||||
0x15, 0x93, 0x08, 0x26, 0x25, 0xe0, 0x24, 0x5f, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0xfd, 0xef, 0x25,
|
||||
0xe0, 0x24, 0x60, 0xf8, 0xe2, 0x2d, 0xff, 0x18, 0xe2, 0x3c, 0xc3, 0x13, 0xf5, 0x00, 0xef, 0x13,
|
||||
0xf5, 0x00, 0xd3, 0x74, 0x10, 0x93, 0x95, 0x00, 0x74, 0x0f, 0x93, 0x95, 0x00, 0x22, 0xe5, 0x00,
|
||||
0x25, 0xe0, 0xff, 0xe5, 0x00, 0x33, 0xfe, 0xef, 0x24, 0xff, 0xff, 0xee, 0x34, 0xff, 0xfe, 0xe4,
|
||||
0xfc, 0xfd, 0x22, 0xeb, 0x7b, 0x64, 0x2f, 0xff, 0xea, 0x3e, 0xfe, 0xe9, 0x3d, 0xfd, 0xe8, 0x3c,
|
||||
0xfc, 0xe4, 0xfa, 0xf9, 0xf8, 0x22, 0x74, 0x1c, 0x93, 0x24, 0x64, 0xff, 0xe4, 0x33, 0xfe, 0xe4,
|
||||
0xfc, 0xfd, 0x12, 0x0e, 0xb7, 0xe4, 0x7b, 0x64, 0xfa, 0xf9, 0xf8, 0x12, 0x0f, 0x42, 0x8f, 0x00,
|
||||
0x8e, 0x00, 0x8d, 0x00, 0x8c, 0x00, 0x22, 0xe5, 0x00, 0x25, 0xe0, 0x24, 0x68, 0xf8, 0xe6, 0xff,
|
||||
0x33, 0x95, 0xe0, 0xfe, 0xad, 0x00, 0xed, 0x33, 0x95, 0xe0, 0xfc, 0xc3, 0x22, 0x93, 0xfd, 0x12,
|
||||
0x0d, 0x08, 0x7c, 0x00, 0x7d, 0x32, 0x12, 0x0d, 0x1a, 0xe5, 0x28, 0x2f, 0xf5, 0x2e, 0xe5, 0x27,
|
||||
0x3e, 0xf5, 0x2d, 0xd3, 0xe5, 0x2e, 0x94, 0x00, 0xe5, 0x2d, 0x64, 0x80, 0x94, 0x80, 0x22, 0x7a,
|
||||
0x00, 0x79, 0x02, 0x7b, 0xfe, 0x7e, 0x00, 0x7f, 0x06, 0x02, 0x0c, 0x68, 0x75, 0xf0, 0x2f, 0xa4,
|
||||
0x24, 0x02, 0xf8, 0xee, 0xf2, 0x08, 0xef, 0xf2, 0x22, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x60,
|
||||
0xf8, 0xe2, 0x2f, 0xf5, 0x26, 0x18, 0xe2, 0x3e, 0xf5, 0x25, 0x22, 0x13, 0x2d, 0xff, 0xee, 0x3c,
|
||||
0xfe, 0x7c, 0x00, 0x7d, 0x03, 0x02, 0x0d, 0x08, 0x25, 0xe0, 0x24, 0x60, 0xf8, 0xe2, 0x2f, 0xff,
|
||||
0x18, 0xe2, 0x3e, 0xfe, 0x22, 0x7e, 0x00, 0x7f, 0x04, 0x7d, 0xff, 0x7b, 0x00, 0x7a, 0x00, 0x79,
|
||||
0x68, 0x02, 0x10, 0x98, 0x24, 0x09, 0xf8, 0xec, 0xf2, 0x08, 0xed, 0xf2, 0x78, 0x66, 0xe6, 0x24,
|
||||
0x0e, 0xf8, 0xe2, 0xc3, 0x22, 0x74, 0x01, 0x93, 0xfe, 0x74, 0x02, 0x93, 0xff, 0xe4, 0xfc, 0xfd,
|
||||
0x02, 0x10, 0x17, 0x74, 0x1a, 0x93, 0xff, 0x33, 0x95, 0xe0, 0xfe, 0xfd, 0xfc, 0xeb, 0x2f, 0x22,
|
||||
0xaf, 0x00, 0xef, 0x33, 0x95, 0xe0, 0xfe, 0xef, 0x25, 0xe0, 0xff, 0xee, 0x33, 0xab, 0x00, 0xaa,
|
||||
0x00, 0xa9, 0x00, 0x8f, 0x82, 0xf5, 0x83, 0x02, 0x0d, 0xe6, 0xae, 0x00, 0xaf, 0x00, 0xab, 0x07,
|
||||
0xaa, 0x06, 0xc3, 0xe5, 0x00, 0x9b, 0xfb, 0xe5, 0x00, 0x9a, 0xfa, 0xe5, 0x00, 0x94, 0x00, 0xf9,
|
||||
0xe5, 0x00, 0x94, 0x00, 0x22, 0x85, 0x0d, 0x82, 0x85, 0x0c, 0x83, 0x74, 0x04, 0x93, 0xfe, 0x74,
|
||||
0x05, 0x93, 0xff, 0x22, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x07, 0xf9, 0x7a, 0x00, 0x7b, 0xfe, 0xef,
|
||||
0x22, 0xeb, 0x25, 0xe0, 0x24, 0x68, 0xf8, 0xe6, 0x22, 0xae, 0x00, 0xaf, 0x00, 0xab, 0x00, 0xaa,
|
||||
0x00, 0xa9, 0x00, 0xa8, 0x00, 0x22, 0xe5, 0x00, 0x25, 0xe0, 0xff, 0xe5, 0x00, 0x33, 0xab, 0x07,
|
||||
0xfa, 0xe4, 0xf9, 0xf8, 0x22, 0xf8, 0x7c, 0x00, 0x7d, 0xfe, 0x7e, 0x00, 0x7f, 0x04, 0x02, 0x0c,
|
||||
0x68, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0xfd, 0xc3, 0xe5, 0x00, 0x9d, 0xf5, 0x00, 0xe5, 0x00, 0x9c,
|
||||
0xf5, 0x00, 0xa8, 0x07, 0xe8, 0x22, 0x2f, 0xff, 0xe0, 0x3e, 0xfe, 0xd3, 0xe5, 0x00, 0x9f, 0xe5,
|
||||
0x00, 0x9e, 0x22, 0xc3, 0xe5, 0x00, 0x95, 0x00, 0xff, 0xe5, 0x00, 0x95, 0x00, 0xfe, 0x22, 0xe4,
|
||||
0xfa, 0xf9, 0xf8, 0xee, 0x33, 0x95, 0xe0, 0xfd, 0xfc, 0x22, 0x74, 0x18, 0x93, 0xfb, 0x7c, 0x00,
|
||||
0x7d, 0x0a, 0x12, 0x0d, 0x1a, 0xad, 0x03, 0x7c, 0x00, 0x12, 0x10, 0x6b, 0xef, 0x22, 0xc3, 0xe5,
|
||||
0x00, 0x95, 0x00, 0xff, 0xe5, 0x00, 0x95, 0x00, 0xfe, 0xe4, 0x95, 0x00, 0xfd, 0xe4, 0x95, 0x00,
|
||||
0xfc, 0x22, 0xe4, 0x93, 0xfd, 0x7c, 0x00, 0x74, 0x03, 0x93, 0xfe, 0x74, 0x04, 0x93, 0xff, 0x22,
|
||||
0xc3, 0x74, 0x64, 0x95, 0x23, 0xff, 0xe4, 0x94, 0x00, 0xfe, 0xe4, 0xfc, 0xfd, 0x22, 0x9d, 0xfd,
|
||||
0xe4, 0x94, 0x00, 0xfc, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x22, 0x25, 0xe0, 0x24, 0x5f, 0xf8,
|
||||
0xe2, 0x22, 0xc3, 0xe5, 0x00, 0x95, 0x00, 0xfb, 0xe5, 0x00, 0x95, 0x00, 0xfa, 0xe4, 0x95, 0x00,
|
||||
0xf9, 0xe4, 0x95, 0x00, 0x22, 0xe5, 0x00, 0x25, 0x00, 0xff, 0xe5, 0x00, 0x35, 0x00, 0xfe, 0xe4,
|
||||
0x35, 0x00, 0xfd, 0xe4, 0x35, 0x00, 0xfc, 0x22, 0x7e, 0x00, 0x7f, 0x06, 0x7d, 0x00, 0x7b, 0xfe,
|
||||
0x02, 0x10, 0x98, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0x12, 0x10, 0x17, 0x12, 0x0e, 0xb7, 0xe4, 0x7b,
|
||||
0x02, 0xfa, 0xf9, 0xf8, 0x22, 0xf8, 0xe2, 0x2f, 0xf5, 0x28, 0x18, 0xe2, 0x3e, 0xf5, 0x27, 0x22,
|
||||
0xea, 0x33, 0x95, 0xe0, 0xf9, 0xf8, 0xe4, 0xfc, 0xfd, 0x02, 0x0e, 0xb7, 0x85, 0x0d, 0x82, 0x85,
|
||||
0x0c, 0x83, 0x74, 0x05, 0x93, 0x22, 0xff, 0xed, 0x33, 0x95, 0xe0, 0xfc, 0xef, 0x2d, 0xff, 0xe4,
|
||||
0x3c, 0xc3, 0x13, 0xef, 0x13, 0x22, 0x24, 0x03, 0xf8, 0xec, 0xf2, 0x08, 0xed, 0xf2, 0x22, 0xf5,
|
||||
0x83, 0xe5, 0x82, 0x2d, 0xf5, 0x82, 0xe5, 0x83, 0x3c, 0xf5, 0x83, 0xef, 0xf0, 0x22, 0xe5, 0x00,
|
||||
0x25, 0xe0, 0x24, 0x69, 0xf8, 0xe6, 0x22, 0xf5, 0x00, 0xea, 0x3e, 0xf5, 0x00, 0xe9, 0x3d, 0xf5,
|
||||
0x00, 0xe8, 0x3c, 0xf5, 0x00, 0x22, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x05, 0xf8, 0xe2, 0x22, 0x74,
|
||||
0x1e, 0x93, 0xfe, 0xa8, 0x07, 0xe8, 0x24, 0x0e, 0xf8, 0xe2, 0xc3, 0x9e, 0x22, 0x24, 0x02, 0xf8,
|
||||
0xc3, 0xe2, 0x9d, 0xf5, 0x29, 0x18, 0xe2, 0x9c, 0xf5, 0x28, 0x22, 0x24, 0x04, 0xf8, 0xc3, 0xe2,
|
||||
0x9d, 0xf5, 0x2b, 0x18, 0xe2, 0x9c, 0xf5, 0x2a, 0x22, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0x2f, 0xff,
|
||||
0xee, 0x3c, 0xfe, 0xef, 0x78, 0x02, 0x22, 0x75, 0xf0, 0x2f, 0xa4, 0x24, 0x04, 0x22, 0xff, 0xae,
|
||||
0xf0, 0xe4, 0xfc, 0xfd, 0x22, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x2b, 0x22, 0x78, 0x66, 0xe6, 0x24,
|
||||
0x0f, 0xf8, 0x22, 0xef, 0x2b, 0xff, 0xee, 0x3a, 0xfe, 0xe9, 0x3d, 0xfd, 0xe8, 0x3c, 0xfc, 0x22,
|
||||
0xef, 0x75, 0xf0, 0x2f, 0xa4, 0x24, 0x01, 0xf8, 0x22, 0xe4, 0x7f, 0x01, 0xfe, 0xfd, 0xfc, 0x22,
|
||||
0xab, 0x00, 0xaa, 0x00, 0xa9, 0x00, 0x22, 0xc3, 0xe5, 0x00, 0x9f, 0xf5, 0x00, 0xe5, 0x00, 0x9e,
|
||||
0xf5, 0x00, 0x22, 0x78, 0x53, 0x12, 0x10, 0x0b, 0x78, 0x4f, 0x12, 0x10, 0x17, 0xeb, 0x22, 0xe5,
|
||||
0x30, 0x25, 0x30, 0xf5, 0x30, 0xe5, 0x2f, 0x33, 0xf5, 0x2f, 0x22, 0xc3, 0xe5, 0x26, 0x95, 0x28,
|
||||
0xff, 0xe5, 0x25, 0x95, 0x27, 0xfe, 0x22, 0xe5, 0x00, 0xf0, 0xa3, 0xe5, 0x00, 0xf0, 0x22, 0xf9,
|
||||
0x7a, 0x00, 0x7b, 0xfe, 0x75, 0xf0, 0x02, 0xe5, 0x00, 0x22, 0x13, 0xfb, 0xaa, 0x06, 0xe4, 0xf9,
|
||||
0xf8, 0x22, 0xf8, 0xe4, 0xf2, 0x08, 0x74, 0x80, 0xf2, 0xa8, 0x07, 0xe8, 0x22, 0xe4, 0xfc, 0xfd,
|
||||
0xeb, 0x25, 0x00, 0xff, 0xea, 0x35, 0x00, 0x22, 0x75, 0xf0, 0x2f, 0xa4, 0x24, 0x02, 0x22, 0xce,
|
||||
0xa2, 0xe7, 0x13, 0xce, 0x13, 0x22, 0x78, 0x66, 0xe6, 0x24, 0x1a, 0xf8, 0x22, 0x78, 0x66, 0xe6,
|
||||
0x24, 0x0d, 0xf8, 0x22, 0xd3, 0xe5, 0x35, 0x95, 0x37, 0xe5, 0x34, 0x95, 0x36, 0x22, 0x33, 0xfe,
|
||||
0x7c, 0x00, 0x7d, 0x03, 0x02, 0x0d, 0x1a, 0x24, 0x40, 0xff, 0xe4, 0x3e, 0xfe, 0x22, 0xe5, 0x00,
|
||||
0x25, 0xe0, 0x24, 0x68, 0x22, 0xe5, 0x00, 0x25, 0xe0, 0x24, 0x69, 0x22, 0x8f, 0x22, 0x8d, 0x23,
|
||||
0x12, 0x04, 0xd6, 0x70, 0x03, 0x02, 0x0b, 0x41, 0x12, 0x00, 0x60, 0x12, 0x04, 0xdf, 0x50, 0x06,
|
||||
0x12, 0x00, 0x9a, 0x02, 0x07, 0x1f, 0x12, 0x05, 0xcd, 0xe2, 0x70, 0x50, 0x12, 0x05, 0x25, 0x12,
|
||||
0x01, 0x14, 0x12, 0x04, 0xed, 0x12, 0x01, 0x0e, 0x12, 0x04, 0xfb, 0x12, 0x00, 0x60, 0x74, 0x17,
|
||||
0x93, 0x75, 0x34, 0x00, 0xf5, 0x35, 0xaf, 0x2b, 0xae, 0x2a, 0x12, 0x39, 0xa3, 0xc0, 0x06, 0xc0,
|
||||
0x07, 0xaf, 0x29, 0xae, 0x28, 0x12, 0x39, 0xa3, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe,
|
||||
0xd3, 0xef, 0x95, 0x35, 0xee, 0x95, 0x34, 0x40, 0x08, 0x12, 0x05, 0xcd, 0x74, 0x01, 0xf2, 0x80,
|
||||
0x23, 0xe4, 0xf5, 0x28, 0xf5, 0x29, 0xf5, 0x2a, 0xf5, 0x2b, 0x80, 0x18, 0x78, 0x66, 0xe6, 0xff,
|
||||
0x24, 0x07, 0x12, 0x01, 0x14, 0x12, 0x04, 0xed, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x09, 0x12, 0x01,
|
||||
0x14, 0x12, 0x04, 0xfb, 0x12, 0x04, 0x10, 0xc0, 0x04, 0x12, 0x01, 0x30, 0x78, 0x66, 0xe6, 0x24,
|
||||
0x16, 0x12, 0x00, 0xf3, 0x12, 0x03, 0xd3, 0xd0, 0x00, 0x12, 0x0e, 0xb7, 0xc0, 0x04, 0xc0, 0x05,
|
||||
0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x23, 0xab, 0x07, 0xae, 0x28, 0xaf, 0x29, 0x12, 0x03, 0xcf, 0x12,
|
||||
0x0e, 0xb7, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x02, 0x33, 0x12, 0x33, 0x10,
|
||||
0x8e, 0x28, 0x8f, 0x29, 0x12, 0x04, 0x10, 0xc0, 0x04, 0x12, 0x01, 0x30, 0x78, 0x66, 0xe6, 0x24,
|
||||
0x18, 0x12, 0x00, 0xf3, 0x12, 0x03, 0xd3, 0xd0, 0x00, 0x12, 0x0e, 0xb7, 0xc0, 0x04, 0xc0, 0x05,
|
||||
0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x23, 0xab, 0x07, 0xae, 0x2a, 0xaf, 0x2b, 0x12, 0x03, 0xcf, 0x12,
|
||||
0x0e, 0xb7, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x02, 0x33, 0x12, 0x33, 0x10,
|
||||
0x8e, 0x2a, 0x8f, 0x2b, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x16, 0xf8, 0xe5, 0x28, 0xf2, 0x08, 0xe5,
|
||||
0x29, 0xf2, 0xa8, 0x07, 0xe8, 0x24, 0x18, 0xf8, 0xe5, 0x2a, 0xf2, 0x08, 0xe5, 0x2b, 0xf2, 0x12,
|
||||
0x00, 0x60, 0x74, 0x1e, 0x93, 0xff, 0x12, 0x02, 0xfc, 0x9f, 0x50, 0x03, 0x02, 0x0b, 0x1a, 0x78,
|
||||
0x66, 0xe6, 0xfb, 0x24, 0x07, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xfd, 0xac, 0x06, 0xe5, 0x28, 0xa2,
|
||||
0xe7, 0x13, 0xfe, 0xe5, 0x29, 0x12, 0x02, 0xcb, 0xa8, 0x03, 0xe8, 0x04, 0x12, 0x05, 0x09, 0x12,
|
||||
0x05, 0xbf, 0xd8, 0xfb, 0xff, 0x12, 0x00, 0x60, 0x74, 0x01, 0x93, 0xfc, 0x74, 0x02, 0x93, 0xfd,
|
||||
0x12, 0x35, 0x58, 0x8e, 0x24, 0x8f, 0x25, 0x78, 0x66, 0xe6, 0xfb, 0x24, 0x09, 0xf8, 0xe2, 0xfe,
|
||||
0x08, 0xe2, 0xfd, 0xac, 0x06, 0xe5, 0x2a, 0xa2, 0xe7, 0x13, 0xfe, 0xe5, 0x2b, 0x12, 0x02, 0xcb,
|
||||
0xa8, 0x03, 0xe8, 0x24, 0x03, 0x12, 0x05, 0x09, 0x12, 0x05, 0xbf, 0xd8, 0xfb, 0xff, 0x12, 0x00,
|
||||
0x60, 0x74, 0x03, 0x93, 0xfc, 0x74, 0x04, 0x93, 0xfd, 0x12, 0x35, 0x58, 0x8e, 0x26, 0x8f, 0x27,
|
||||
0x12, 0x00, 0x60, 0x74, 0x1e, 0x93, 0x24, 0x0a, 0xff, 0xe4, 0x33, 0xfe, 0x78, 0x66, 0xe6, 0xfd,
|
||||
0x24, 0x0e, 0xf8, 0xe2, 0xc3, 0x9f, 0xee, 0x64, 0x80, 0xf8, 0x74, 0x80, 0x98, 0x50, 0x59, 0xa8,
|
||||
0x05, 0xe8, 0x24, 0x16, 0x12, 0x00, 0xf3, 0x12, 0x39, 0xa3, 0x12, 0x00, 0x60, 0x74, 0x1e, 0x93,
|
||||
0xfd, 0x78, 0x66, 0xe6, 0xf9, 0x24, 0x0e, 0xf8, 0xe2, 0xc3, 0x12, 0x04, 0x1e, 0x24, 0x8d, 0xf5,
|
||||
0x82, 0xe4, 0x34, 0x00, 0x12, 0x04, 0xaf, 0xa8, 0x01, 0xe8, 0x24, 0x18, 0x12, 0x00, 0xf3, 0x12,
|
||||
0x39, 0xa3, 0x12, 0x00, 0x60, 0x74, 0x1e, 0x93, 0xfd, 0x12, 0x02, 0xfc, 0x12, 0x04, 0x1e, 0x24,
|
||||
0xa1, 0xf5, 0x82, 0xe4, 0x34, 0x00, 0x12, 0x04, 0xaf, 0x75, 0x38, 0x00, 0x75, 0x39, 0x80, 0x75,
|
||||
0x3a, 0x00, 0x75, 0x3b, 0x80, 0x02, 0x09, 0x89, 0x12, 0x04, 0x24, 0x24, 0x96, 0xf9, 0x74, 0x00,
|
||||
0x35, 0xf0, 0xfa, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0x78, 0x66, 0xe6, 0x24, 0x16,
|
||||
0x12, 0x00, 0xf3, 0x12, 0x39, 0xa3, 0xad, 0x07, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x12, 0x34,
|
||||
0x7a, 0x8e, 0x34, 0x8f, 0x35, 0x12, 0x04, 0x24, 0x24, 0xaa, 0xf9, 0x74, 0x00, 0x35, 0xf0, 0xfa,
|
||||
0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0x78, 0x66, 0xe6, 0x24, 0x18, 0x12, 0x00, 0xf3,
|
||||
0x12, 0x39, 0xa3, 0xad, 0x07, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x12, 0x34, 0x7a, 0x8e, 0x36,
|
||||
0x8f, 0x37, 0x12, 0x05, 0xd4, 0x40, 0x18, 0xe5, 0x35, 0xae, 0x34, 0x78, 0x03, 0xc3, 0x33, 0xce,
|
||||
0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe5, 0x37, 0x24, 0x01, 0xfd, 0xe4, 0x35, 0x36, 0x80, 0x16, 0xe5,
|
||||
0x37, 0xae, 0x36, 0x78, 0x03, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe5, 0x35, 0x24,
|
||||
0x01, 0xfd, 0xe4, 0x35, 0x34, 0xfc, 0x12, 0x0d, 0x1a, 0xab, 0x07, 0xaa, 0x06, 0x78, 0x66, 0xe6,
|
||||
0xf9, 0x24, 0x10, 0x12, 0x00, 0xf3, 0x12, 0x02, 0xd1, 0xef, 0x2b, 0xff, 0xee, 0x3a, 0xfe, 0xef,
|
||||
0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xfb, 0xaa, 0x06, 0xc3, 0x94, 0x28, 0xea,
|
||||
0x94, 0x00, 0x50, 0x06, 0x7a, 0x00, 0x7b, 0x28, 0x80, 0x0d, 0xd3, 0xeb, 0x94, 0x46, 0xea, 0x94,
|
||||
0x00, 0x40, 0x04, 0x7a, 0x00, 0x7b, 0x46, 0x7c, 0x00, 0x7d, 0x0a, 0xaf, 0x03, 0xae, 0x02, 0x12,
|
||||
0x0d, 0x08, 0xef, 0x24, 0xf0, 0xf5, 0x39, 0xee, 0x34, 0xfe, 0xf5, 0x38, 0xeb, 0x25, 0xe0, 0xff,
|
||||
0xea, 0x33, 0xfe, 0xc3, 0x74, 0xd0, 0x9f, 0xf5, 0x3b, 0xe4, 0x9e, 0xf5, 0x3a, 0x12, 0x05, 0xd4,
|
||||
0x40, 0x12, 0x85, 0x38, 0x34, 0x85, 0x39, 0x35, 0x85, 0x3a, 0x38, 0x85, 0x3b, 0x39, 0x85, 0x34,
|
||||
0x3a, 0x85, 0x35, 0x3b, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x10, 0xf8, 0xea, 0xf2, 0x08, 0xeb, 0xf2,
|
||||
0xa8, 0x07, 0xe8, 0x24, 0x12, 0x12, 0x00, 0xf3, 0x12, 0x02, 0xd1, 0xe5, 0x39, 0x2f, 0xff, 0xe5,
|
||||
0x38, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xf5, 0x39, 0x8e,
|
||||
0x38, 0x78, 0x66, 0xe6, 0xfb, 0x24, 0x14, 0x12, 0x00, 0xf3, 0x12, 0x02, 0xd1, 0xe5, 0x3b, 0x2f,
|
||||
0xff, 0xe5, 0x3a, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xf5,
|
||||
0x3b, 0x8e, 0x3a, 0xeb, 0x24, 0x12, 0xf8, 0xe5, 0x38, 0xf2, 0x08, 0xe5, 0x39, 0xf2, 0xe9, 0x24,
|
||||
0x14, 0xf8, 0xe5, 0x3a, 0xf2, 0x08, 0xe5, 0x3b, 0xf2, 0x12, 0x0b, 0x70, 0x7c, 0x00, 0x7d, 0x02,
|
||||
0x12, 0x0d, 0x6f, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x0b, 0x84, 0xd0, 0xe0, 0x2f, 0xf5, 0x35, 0xd0,
|
||||
0xe0, 0x3e, 0xf5, 0x34, 0x12, 0x00, 0x60, 0xae, 0x34, 0xaf, 0x35, 0x12, 0x03, 0xda, 0x25, 0x35,
|
||||
0xf5, 0x35, 0xee, 0x35, 0x34, 0xf5, 0x34, 0xd3, 0xe5, 0x35, 0x95, 0x39, 0xe5, 0x34, 0x95, 0x38,
|
||||
0x40, 0x06, 0x85, 0x38, 0x34, 0x85, 0x39, 0x35, 0x78, 0x66, 0xe6, 0x24, 0x07, 0x12, 0x00, 0xf3,
|
||||
0xc3, 0xe5, 0x39, 0x95, 0x35, 0xfd, 0xe5, 0x38, 0x95, 0x34, 0xfc, 0x12, 0x10, 0x6b, 0x8f, 0x2f,
|
||||
0x8e, 0x2e, 0x8d, 0x2d, 0x8c, 0x2c, 0xae, 0x24, 0xaf, 0x25, 0xab, 0x07, 0xaa, 0x06, 0xae, 0x34,
|
||||
0xaf, 0x35, 0x12, 0x04, 0x80, 0xef, 0x25, 0x2f, 0xff, 0xee, 0x35, 0x2e, 0xfe, 0xed, 0x35, 0x2d,
|
||||
0xfd, 0xec, 0x35, 0x2c, 0xfc, 0xc0, 0x06, 0xc0, 0x07, 0xe5, 0x38, 0xc3, 0x13, 0xfe, 0xe5, 0x39,
|
||||
0x12, 0x05, 0x9a, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x05, 0x33, 0xc0, 0x06, 0xc0, 0x07, 0xae, 0x38,
|
||||
0xaf, 0x39, 0xab, 0x07, 0xaa, 0x06, 0xe4, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0f, 0x42, 0x8f, 0x2f,
|
||||
0x8e, 0x2e, 0x8d, 0x2d, 0x8c, 0x2c, 0x12, 0x0b, 0x84, 0x7c, 0x00, 0x7d, 0x02, 0x12, 0x0d, 0x6f,
|
||||
0xc0, 0x06, 0xc0, 0x07, 0x12, 0x0b, 0x70, 0xd0, 0xe0, 0x2f, 0xf5, 0x37, 0xd0, 0xe0, 0x3e, 0xf5,
|
||||
0x36, 0x12, 0x00, 0x60, 0xae, 0x36, 0xaf, 0x37, 0x12, 0x03, 0xda, 0x25, 0x37, 0xf5, 0x37, 0xee,
|
||||
0x35, 0x36, 0xf5, 0x36, 0xd3, 0xe5, 0x37, 0x95, 0x3b, 0xe5, 0x36, 0x95, 0x3a, 0x40, 0x06, 0x85,
|
||||
0x3a, 0x36, 0x85, 0x3b, 0x37, 0x78, 0x66, 0xe6, 0x24, 0x09, 0x12, 0x00, 0xf3, 0xc3, 0xe5, 0x3b,
|
||||
0x95, 0x37, 0xfd, 0xe5, 0x3a, 0x95, 0x36, 0xfc, 0x12, 0x10, 0x6b, 0x8f, 0x33, 0x8e, 0x32, 0x8d,
|
||||
0x31, 0x8c, 0x30, 0xae, 0x26, 0xaf, 0x27, 0xab, 0x07, 0xaa, 0x06, 0xae, 0x36, 0xaf, 0x37, 0x12,
|
||||
0x04, 0x80, 0xef, 0x25, 0x33, 0xff, 0xee, 0x35, 0x32, 0xfe, 0xed, 0x35, 0x31, 0xfd, 0xec, 0x35,
|
||||
0x30, 0xfc, 0xc0, 0x06, 0xc0, 0x07, 0xe5, 0x3a, 0xc3, 0x13, 0xfe, 0xe5, 0x3b, 0x12, 0x05, 0x9a,
|
||||
0xd0, 0x07, 0xd0, 0x06, 0x12, 0x05, 0x33, 0xc0, 0x06, 0xc0, 0x07, 0xae, 0x3a, 0xaf, 0x3b, 0xab,
|
||||
0x07, 0xaa, 0x06, 0xe4, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0f, 0x42, 0x8f, 0x33, 0x8e, 0x32, 0x8d,
|
||||
0x31, 0x8c, 0x30, 0x12, 0x00, 0x60, 0x74, 0x16, 0x93, 0xf4, 0x60, 0x2e, 0x78, 0x66, 0xe6, 0xff,
|
||||
0x24, 0x0d, 0xf8, 0xe2, 0xb4, 0x01, 0x1b, 0xa8, 0x07, 0xe8, 0x04, 0xf8, 0xe5, 0x2e, 0xf2, 0x08,
|
||||
0xe5, 0x2f, 0xf2, 0xa8, 0x07, 0xe8, 0x24, 0x03, 0xf8, 0xe5, 0x32, 0xf2, 0x08, 0xe5, 0x33, 0xf2,
|
||||
0x80, 0x08, 0x78, 0x66, 0x12, 0x00, 0xfa, 0x12, 0x04, 0xa6, 0x78, 0x66, 0xe6, 0xff, 0x04, 0x12,
|
||||
0x01, 0x14, 0x24, 0x07, 0x12, 0x04, 0xa8, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x03, 0x12, 0x01, 0x14,
|
||||
0x12, 0x02, 0xf4, 0x94, 0x14, 0x50, 0x03, 0xe2, 0x04, 0xf2, 0x12, 0x05, 0x2c, 0x74, 0x01, 0xf2,
|
||||
0x22, 0x12, 0x05, 0x2c, 0xe2, 0xd3, 0x94, 0x00, 0x40, 0x03, 0xe2, 0x14, 0xf2, 0xe2, 0x70, 0x1f,
|
||||
0x78, 0x66, 0xe6, 0xff, 0x24, 0x0e, 0xf8, 0xe4, 0xf2, 0xa8, 0x07, 0xe8, 0x24, 0x12, 0x12, 0x05,
|
||||
0xa2, 0x24, 0x14, 0x12, 0x05, 0xa2, 0x24, 0x10, 0xf8, 0xe4, 0xf2, 0x08, 0x74, 0x28, 0xf2, 0x22,
|
||||
0x78, 0x66, 0xe6, 0x24, 0x0a, 0xf8, 0xc3, 0xe2, 0x95, 0x27, 0xff, 0x18, 0xe2, 0x95, 0x26, 0xfe,
|
||||
0x12, 0x39, 0xa3, 0x22, 0x78, 0x66, 0xe6, 0x24, 0x08, 0xf8, 0xc3, 0xe2, 0x95, 0x25, 0xff, 0x18,
|
||||
0xe2, 0x95, 0x24, 0xfe, 0x12, 0x39, 0xa3, 0x22, 0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46,
|
||||
0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x3e, 0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3,
|
||||
0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08,
|
||||
0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 0x8c, 0x83, 0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64,
|
||||
0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83,
|
||||
0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x4c, 0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4,
|
||||
0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 0x80, 0x10, 0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8,
|
||||
0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 0x80, 0x33, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93,
|
||||
0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc,
|
||||
0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3,
|
||||
0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 0xa9, 0xf0, 0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec,
|
||||
0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82,
|
||||
0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xea, 0xde, 0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4,
|
||||
0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 0x80, 0xcc, 0x88, 0xf0, 0xef, 0x60, 0x01, 0x0e, 0x4e, 0x60,
|
||||
0xc3, 0x88, 0xf0, 0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xb9, 0xf5, 0x82, 0xeb, 0x24, 0x02,
|
||||
0xb4, 0x04, 0x00, 0x50, 0xaf, 0x23, 0x23, 0x45, 0x82, 0x23, 0x90, 0x0b, 0xe8, 0x73, 0xbb, 0x01,
|
||||
0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02, 0xe3, 0x22,
|
||||
0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x22, 0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5,
|
||||
0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe,
|
||||
0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x22, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5,
|
||||
0x83, 0xe4, 0x93, 0x22, 0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xf0, 0x22, 0x50, 0x02, 0xf7,
|
||||
0x22, 0xbb, 0xfe, 0x01, 0xf3, 0x22, 0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5,
|
||||
0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf0, 0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb,
|
||||
0xfe, 0x05, 0xe9, 0x25, 0x82, 0xc8, 0xf2, 0x22, 0xef, 0x8d, 0xf0, 0xa4, 0xa8, 0xf0, 0xcf, 0x8c,
|
||||
0xf0, 0xa4, 0x28, 0xce, 0x8d, 0xf0, 0xa4, 0x2e, 0xfe, 0x22, 0xbc, 0x00, 0x0b, 0xbe, 0x00, 0x29,
|
||||
0xef, 0x8d, 0xf0, 0x84, 0xff, 0xad, 0xf0, 0x22, 0xe4, 0xcc, 0xf8, 0x75, 0xf0, 0x08, 0xef, 0x2f,
|
||||
0xff, 0xee, 0x33, 0xfe, 0xec, 0x33, 0xfc, 0xee, 0x9d, 0xec, 0x98, 0x40, 0x05, 0xfc, 0xee, 0x9d,
|
||||
0xfe, 0x0f, 0xd5, 0xf0, 0xe9, 0xe4, 0xce, 0xfd, 0x22, 0xed, 0xf8, 0xf5, 0xf0, 0xee, 0x84, 0x20,
|
||||
0xd2, 0x1c, 0xfe, 0xad, 0xf0, 0x75, 0xf0, 0x08, 0xef, 0x2f, 0xff, 0xed, 0x33, 0xfd, 0x40, 0x07,
|
||||
0x98, 0x50, 0x06, 0xd5, 0xf0, 0xf2, 0x22, 0xc3, 0x98, 0xfd, 0x0f, 0xd5, 0xf0, 0xea, 0x22, 0xc2,
|
||||
0xd5, 0xec, 0x30, 0xe7, 0x09, 0xb2, 0xd5, 0xe4, 0xc3, 0x9d, 0xfd, 0xe4, 0x9c, 0xfc, 0xee, 0x30,
|
||||
0xe7, 0x15, 0xb2, 0xd5, 0xe4, 0xc3, 0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0x12, 0x0d, 0x1a, 0xc3, 0xe4,
|
||||
0x9d, 0xfd, 0xe4, 0x9c, 0xfc, 0x80, 0x03, 0x12, 0x0d, 0x1a, 0x30, 0xd5, 0x07, 0xc3, 0xe4, 0x9f,
|
||||
0xff, 0xe4, 0x9e, 0xfe, 0x22, 0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5,
|
||||
0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xe0, 0x38, 0xf0, 0x22, 0xbb, 0x01, 0x0a, 0x89, 0x82,
|
||||
0x8a, 0x83, 0xe0, 0xf5, 0xf0, 0xa3, 0xe0, 0x22, 0x50, 0x06, 0x87, 0xf0, 0x09, 0xe7, 0x19, 0x22,
|
||||
0xbb, 0xfe, 0x07, 0xe3, 0xf5, 0xf0, 0x09, 0xe3, 0x19, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93,
|
||||
0xf5, 0xf0, 0x74, 0x01, 0x93, 0x22, 0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83,
|
||||
0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0, 0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86,
|
||||
0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe, 0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2,
|
||||
0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83, 0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22, 0xbb, 0x01,
|
||||
0x0d, 0xc5, 0x82, 0x29, 0xc5, 0x82, 0xc5, 0x83, 0x3a, 0xc5, 0x83, 0x02, 0x0d, 0xa5, 0x50, 0x11,
|
||||
0xc5, 0x82, 0x29, 0xf8, 0x08, 0xe5, 0xf0, 0x26, 0xf6, 0x18, 0xf5, 0xf0, 0xe5, 0x82, 0x36, 0xf6,
|
||||
0x22, 0xbb, 0xfe, 0x11, 0xc5, 0x82, 0x29, 0xf8, 0x08, 0xe2, 0x25, 0xf0, 0xf5, 0xf0, 0xf2, 0x18,
|
||||
0xe2, 0x35, 0x82, 0xf2, 0x22, 0xf8, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x2a, 0xf5, 0x83,
|
||||
0x74, 0x01, 0x93, 0x25, 0xf0, 0xf5, 0xf0, 0xe4, 0x93, 0x38, 0x22, 0xbb, 0x01, 0x0a, 0x89, 0x82,
|
||||
0x8a, 0x83, 0xf0, 0xe5, 0xf0, 0xa3, 0xf0, 0x22, 0x50, 0x06, 0xf7, 0x09, 0xa7, 0xf0, 0x19, 0x22,
|
||||
0xbb, 0xfe, 0x06, 0xf3, 0xe5, 0xf0, 0x09, 0xf3, 0x19, 0x22, 0xf8, 0xbb, 0x01, 0x11, 0xe5, 0x82,
|
||||
0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf0, 0xe5, 0xf0, 0xa3, 0xf0, 0x22, 0x50,
|
||||
0x09, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x08, 0xa6, 0xf0, 0x22, 0xbb, 0xfe, 0x09, 0xe9, 0x25, 0x82,
|
||||
0xc8, 0xf2, 0xe5, 0xf0, 0x08, 0xf2, 0x22, 0xe8, 0x8f, 0xf0, 0xa4, 0xcc, 0x8b, 0xf0, 0xa4, 0x2c,
|
||||
0xfc, 0xe9, 0x8e, 0xf0, 0xa4, 0x2c, 0xfc, 0x8a, 0xf0, 0xed, 0xa4, 0x2c, 0xfc, 0xea, 0x8e, 0xf0,
|
||||
0xa4, 0xcd, 0xa8, 0xf0, 0x8b, 0xf0, 0xa4, 0x2d, 0xcc, 0x38, 0x25, 0xf0, 0xfd, 0xe9, 0x8f, 0xf0,
|
||||
0xa4, 0x2c, 0xcd, 0x35, 0xf0, 0xfc, 0xeb, 0x8e, 0xf0, 0xa4, 0xfe, 0xa9, 0xf0, 0xeb, 0x8f, 0xf0,
|
||||
0xa4, 0xcf, 0xc5, 0xf0, 0x2e, 0xcd, 0x39, 0xfe, 0xe4, 0x3c, 0xfc, 0xea, 0xa4, 0x2d, 0xce, 0x35,
|
||||
0xf0, 0xfd, 0xe4, 0x3c, 0xfc, 0x22, 0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee,
|
||||
0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcc, 0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a,
|
||||
0xec, 0x99, 0xe5, 0x82, 0x98, 0x40, 0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec,
|
||||
0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0xd6, 0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8,
|
||||
0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb9, 0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf,
|
||||
0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xcb, 0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed,
|
||||
0x33, 0xfd, 0xec, 0x33, 0xfc, 0xeb, 0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99,
|
||||
0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xf9, 0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe,
|
||||
0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40,
|
||||
0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9a, 0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb,
|
||||
0x22, 0x75, 0xf0, 0x10, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc,
|
||||
0xc8, 0x33, 0xc8, 0x10, 0xd7, 0x07, 0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd,
|
||||
0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xf8, 0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa,
|
||||
0xe4, 0xc8, 0xf9, 0x22, 0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0,
|
||||
0xe8, 0x9c, 0x45, 0xf0, 0x22, 0xe8, 0x60, 0x0f, 0xec, 0xc3, 0x13, 0xfc, 0xed, 0x13, 0xfd, 0xee,
|
||||
0x13, 0xfe, 0xef, 0x13, 0xff, 0xd8, 0xf1, 0x22, 0xe8, 0x60, 0x0f, 0xef, 0xc3, 0x33, 0xff, 0xee,
|
||||
0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xd8, 0xf1, 0x22, 0xe6, 0xfc, 0x08, 0xe6, 0xfd,
|
||||
0x08, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x22, 0xe6, 0xfb, 0x08, 0xe6, 0xf9, 0x08, 0xe6, 0xfa, 0x08,
|
||||
0xe6, 0xcb, 0xf8, 0x22, 0xe4, 0x93, 0xf8, 0x74, 0x01, 0x93, 0xf9, 0x74, 0x02, 0x93, 0xfa, 0x74,
|
||||
0x03, 0x93, 0xfb, 0x22, 0xec, 0xf6, 0x08, 0xed, 0xf6, 0x08, 0xee, 0xf6, 0x08, 0xef, 0xf6, 0x22,
|
||||
0xd0, 0x83, 0xd0, 0x82, 0xe4, 0x93, 0xf6, 0x08, 0x74, 0x01, 0x93, 0xf6, 0x08, 0x74, 0x02, 0x93,
|
||||
0xf6, 0x08, 0x74, 0x03, 0x93, 0xf6, 0x74, 0x04, 0x73, 0xa4, 0x25, 0x82, 0xf5, 0x82, 0xe5, 0xf0,
|
||||
0x35, 0x83, 0xf5, 0x83, 0x22, 0x8a, 0x83, 0x89, 0x82, 0xe4, 0x73, 0xec, 0x8e, 0xf0, 0xa4, 0xcc,
|
||||
0xc5, 0xf0, 0xcc, 0xcd, 0xf8, 0xef, 0xa4, 0xce, 0xc5, 0xf0, 0x2d, 0xfd, 0xe4, 0x3c, 0xfc, 0xe8,
|
||||
0xa4, 0x2e, 0xc8, 0xc5, 0xf0, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0xef, 0xa4, 0xff, 0xe5, 0xf0, 0x28,
|
||||
0xfe, 0xe4, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0x22, 0xef, 0x4e, 0x60, 0x12, 0xef, 0x60, 0x01, 0x0e,
|
||||
0xed, 0xbb, 0x01, 0x0b, 0x89, 0x82, 0x8a, 0x83, 0xf0, 0xa3, 0xdf, 0xfc, 0xde, 0xfa, 0x22, 0x89,
|
||||
0xf0, 0x50, 0x07, 0xf7, 0x09, 0xdf, 0xfc, 0xa9, 0xf0, 0x22, 0xbb, 0xfe, 0xfc, 0xf3, 0x09, 0xdf,
|
||||
0xfc, 0xa9, 0xf0, 0x22, 0x90, 0x36, 0x03, 0x7d, 0x1f, 0x12, 0x31, 0xda, 0xee, 0x44, 0x80, 0xf5,
|
||||
0x8f, 0x8f, 0x8e, 0x75, 0x8a, 0xa0, 0x75, 0x8a, 0x0a, 0xe4, 0x90, 0x00, 0xc3, 0xf0, 0x90, 0x00,
|
||||
0xc9, 0xe0, 0x70, 0x03, 0x02, 0x11, 0xd7, 0x14, 0x70, 0x03, 0x02, 0x12, 0x02, 0x24, 0xfc, 0x70,
|
||||
0x03, 0x02, 0x13, 0x49, 0x04, 0x60, 0x03, 0x02, 0x13, 0x82, 0xe4, 0xf5, 0x18, 0x78, 0x6e, 0xf6,
|
||||
0x90, 0x36, 0x12, 0x93, 0x70, 0x0e, 0x75, 0x0a, 0x36, 0x75, 0x0b, 0x2a, 0x12, 0x39, 0xb9, 0x8f,
|
||||
0x18, 0x02, 0x11, 0xc6, 0xe4, 0xf5, 0x1a, 0xf5, 0x1b, 0x75, 0x0a, 0x38, 0x75, 0x0b, 0x9e, 0x12,
|
||||
0x14, 0x75, 0x12, 0x31, 0xc7, 0x12, 0x20, 0x0b, 0xe4, 0xf5, 0x19, 0x12, 0x31, 0xac, 0xe4, 0x93,
|
||||
0xff, 0xe5, 0x19, 0xc3, 0x9f, 0x50, 0x33, 0xaf, 0x19, 0x12, 0x39, 0xc9, 0xac, 0x06, 0xad, 0x07,
|
||||
0x12, 0x31, 0xac, 0x74, 0x2c, 0x93, 0x75, 0xf0, 0xc8, 0xa4, 0xff, 0xd3, 0xed, 0x9f, 0xec, 0x95,
|
||||
0xf0, 0x40, 0x13, 0xe4, 0x7f, 0x01, 0xfe, 0xfd, 0xfc, 0xa9, 0x19, 0xa8, 0x01, 0x12, 0x0f, 0xf8,
|
||||
0xef, 0x42, 0x1b, 0xee, 0x42, 0x1a, 0x05, 0x19, 0x80, 0xc1, 0xe5, 0x1a, 0x90, 0x01, 0xab, 0xf0,
|
||||
0xa3, 0xe5, 0x1b, 0xf0, 0xe4, 0xf5, 0x19, 0xae, 0x1a, 0xaf, 0x1b, 0xe4, 0xfc, 0xfd, 0xe5, 0x19,
|
||||
0x25, 0xe0, 0x25, 0xe0, 0x24, 0x13, 0xf5, 0x82, 0xe4, 0x34, 0x36, 0xf5, 0x83, 0x12, 0x10, 0x24,
|
||||
0xc3, 0x12, 0x0f, 0xd4, 0x60, 0x07, 0x05, 0x19, 0xe5, 0x19, 0xb4, 0x04, 0xda, 0xe5, 0x19, 0xc3,
|
||||
0x94, 0x04, 0x50, 0x19, 0x85, 0x19, 0x18, 0x75, 0xf0, 0x9d, 0xe5, 0x19, 0xa4, 0x24, 0x2a, 0xf5,
|
||||
0x82, 0xe5, 0xf0, 0x34, 0x36, 0xaf, 0x82, 0xf5, 0x0a, 0x8f, 0x0b, 0x80, 0x09, 0xe4, 0xf5, 0x18,
|
||||
0x75, 0x0a, 0x36, 0x75, 0x0b, 0x2a, 0x90, 0x01, 0xaa, 0xe5, 0x18, 0xf0, 0x90, 0x01, 0xf0, 0x74,
|
||||
0x40, 0xf0, 0xa3, 0xf0, 0x02, 0x13, 0x82, 0xe4, 0x78, 0x6e, 0xf6, 0x12, 0x2f, 0xde, 0xef, 0x64,
|
||||
0x01, 0x60, 0xf8, 0x12, 0x14, 0x75, 0xaf, 0x0b, 0xae, 0x0a, 0x12, 0x00, 0x1f, 0xe5, 0x0b, 0x24,
|
||||
0x79, 0xff, 0xe4, 0x35, 0x0a, 0xfe, 0x12, 0x39, 0x3b, 0x12, 0x31, 0xe4, 0xa3, 0x04, 0xf0, 0x02,
|
||||
0x13, 0x87, 0xe4, 0xf5, 0x18, 0x78, 0x42, 0xf6, 0x90, 0x01, 0xff, 0xe0, 0xb4, 0x01, 0x09, 0x90,
|
||||
0x00, 0xc9, 0x74, 0x05, 0xf0, 0x02, 0x13, 0x87, 0x78, 0x6e, 0x76, 0x01, 0x12, 0x31, 0xc7, 0x12,
|
||||
0x20, 0x0b, 0x78, 0x42, 0xa6, 0x07, 0x12, 0x31, 0xac, 0x74, 0x63, 0x93, 0x70, 0x03, 0x74, 0x62,
|
||||
0x93, 0x60, 0x1b, 0x08, 0xe6, 0xf5, 0x19, 0x08, 0xe6, 0xf5, 0x1a, 0x08, 0xe6, 0xfe, 0x08, 0xe6,
|
||||
0xff, 0x78, 0x43, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0x08, 0xa6, 0x19, 0x08, 0xa6, 0x1a, 0x7f, 0x5f,
|
||||
0xe5, 0x0b, 0x24, 0x79, 0xfd, 0xe4, 0x35, 0x0a, 0xfc, 0x12, 0x2c, 0xe4, 0x8f, 0x18, 0x12, 0x31,
|
||||
0xc7, 0x75, 0x20, 0x36, 0x75, 0x21, 0x23, 0xad, 0x18, 0x12, 0x1b, 0x15, 0x8f, 0x18, 0xe4, 0x78,
|
||||
0x42, 0xf6, 0x78, 0x47, 0xe6, 0x70, 0x03, 0x02, 0x12, 0xfc, 0xe5, 0x18, 0x70, 0x12, 0x90, 0x01,
|
||||
0xea, 0xe0, 0x30, 0xe2, 0x0b, 0x78, 0x89, 0xe2, 0x24, 0x01, 0xf2, 0x18, 0xe2, 0x34, 0x00, 0xf2,
|
||||
0x78, 0x4d, 0xe6, 0x60, 0x07, 0x90, 0x01, 0xea, 0xe0, 0x20, 0xe0, 0x0c, 0xe5, 0x18, 0xb4, 0xaa,
|
||||
0x0f, 0x90, 0x01, 0xea, 0xe0, 0x30, 0xe1, 0x08, 0x90, 0x00, 0xc8, 0xe0, 0x04, 0xf0, 0x80, 0x08,
|
||||
0x90, 0x00, 0xc8, 0xe0, 0x60, 0x02, 0x14, 0xf0, 0x90, 0x36, 0x08, 0xe4, 0x93, 0x75, 0xf0, 0x64,
|
||||
0xa4, 0xff, 0xd3, 0x78, 0x89, 0xe2, 0x9f, 0x18, 0xe2, 0x95, 0xf0, 0x50, 0x1b, 0x12, 0x31, 0xac,
|
||||
0x74, 0x9c, 0x93, 0x24, 0x02, 0xff, 0xe4, 0x33, 0xfe, 0x90, 0x00, 0xc8, 0xe0, 0xd3, 0x9f, 0xee,
|
||||
0x64, 0x80, 0xf8, 0x74, 0x80, 0x98, 0x40, 0x14, 0x7f, 0x01, 0x12, 0x39, 0xc4, 0xe4, 0x78, 0x47,
|
||||
0xf6, 0x78, 0x4d, 0xf6, 0x78, 0x48, 0x76, 0x04, 0x78, 0x4e, 0x76, 0x04, 0x12, 0x31, 0xc7, 0x78,
|
||||
0x42, 0xe6, 0xf5, 0x20, 0xad, 0x18, 0x12, 0x18, 0xf2, 0x78, 0x47, 0xe6, 0x60, 0x19, 0x90, 0x36,
|
||||
0x06, 0x7d, 0x64, 0x12, 0x31, 0xda, 0xc3, 0x78, 0x70, 0xe6, 0x9f, 0x18, 0xe6, 0x9e, 0x50, 0x67,
|
||||
0xa6, 0x06, 0x08, 0xa6, 0x07, 0x80, 0x60, 0x90, 0x01, 0xfe, 0xe0, 0x70, 0x17, 0x78, 0x70, 0xe6,
|
||||
0x18, 0x46, 0x60, 0x09, 0x08, 0xe6, 0x16, 0x18, 0x70, 0x0a, 0x16, 0x80, 0x07, 0x78, 0x6f, 0x76,
|
||||
0x00, 0x08, 0x76, 0x14, 0x12, 0x31, 0xe4, 0x80, 0x3e, 0x12, 0x31, 0xac, 0xe4, 0x93, 0x90, 0x01,
|
||||
0xcb, 0xf0, 0x90, 0x01, 0xff, 0xe0, 0xb4, 0x01, 0x2e, 0x75, 0x1f, 0x01, 0x75, 0x20, 0x01, 0x75,
|
||||
0x21, 0x40, 0x75, 0x22, 0x01, 0x75, 0x23, 0x01, 0x75, 0x24, 0x80, 0x7b, 0x01, 0x7a, 0x01, 0x79,
|
||||
0xc0, 0x12, 0x1c, 0xd8, 0xe4, 0x90, 0x01, 0xff, 0xf0, 0x75, 0x8a, 0xa0, 0x90, 0x00, 0xc0, 0xf0,
|
||||
0x80, 0xd0, 0xe4, 0x90, 0x00, 0xc9, 0xf0, 0x90, 0x01, 0xe5, 0xe0, 0x64, 0x03, 0x60, 0x0b, 0x90,
|
||||
0x01, 0xb5, 0xe0, 0x64, 0x03, 0x60, 0x03, 0x02, 0x14, 0x20, 0x90, 0x36, 0x0e, 0xe4, 0x93, 0xf5,
|
||||
0x18, 0x7f, 0x01, 0x12, 0x35, 0x32, 0xe5, 0x18, 0x70, 0x05, 0x90, 0xff, 0x11, 0x80, 0x0d, 0xe5,
|
||||
0x18, 0xb4, 0x01, 0x0c, 0x90, 0xff, 0x10, 0xe0, 0x44, 0x18, 0xf0, 0xa3, 0xe0, 0x44, 0x18, 0xf0,
|
||||
0x90, 0x01, 0xb5, 0xe0, 0xb4, 0x03, 0x15, 0x90, 0xff, 0x12, 0xe0, 0x54, 0xe3, 0xf0, 0x90, 0xff,
|
||||
0x11, 0xe0, 0x54, 0xe3, 0xf0, 0x90, 0xff, 0x10, 0xe0, 0x54, 0xe3, 0xf0, 0x75, 0x8f, 0x87, 0x75,
|
||||
0x8e, 0xff, 0x75, 0x8d, 0x87, 0x75, 0x8c, 0xff, 0x12, 0x31, 0xbe, 0x75, 0x8a, 0xa0, 0xf0, 0xe5,
|
||||
0x89, 0x30, 0xe7, 0x08, 0x12, 0x31, 0xb3, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x75, 0x91, 0xc3, 0xe4,
|
||||
0xf5, 0x91, 0xe5, 0x89, 0x30, 0xe7, 0x08, 0x12, 0x31, 0xb3, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x12,
|
||||
0x31, 0xbe, 0x75, 0x8a, 0xa0, 0xf0, 0x75, 0x8a, 0xa0, 0xf0, 0x75, 0x8a, 0xa0, 0xf0, 0x80, 0xc8,
|
||||
0x75, 0x18, 0x27, 0x75, 0x19, 0x10, 0xe5, 0x89, 0x30, 0xe7, 0x08, 0x12, 0x31, 0xb3, 0x50, 0x03,
|
||||
0xe0, 0x04, 0xf0, 0x90, 0x00, 0xc3, 0xe0, 0xff, 0xc3, 0x78, 0x6e, 0x96, 0x50, 0x36, 0xe5, 0x19,
|
||||
0x15, 0x19, 0xac, 0x18, 0x70, 0x02, 0x15, 0x18, 0x4c, 0x60, 0x29, 0xe5, 0x89, 0x30, 0xe7, 0x0c,
|
||||
0x75, 0x89, 0x80, 0xef, 0xc3, 0x94, 0xff, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x75, 0x91, 0xc1, 0xe4,
|
||||
0xf5, 0x91, 0xe5, 0x89, 0x30, 0xe7, 0x08, 0x12, 0x31, 0xb3, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x12,
|
||||
0x31, 0xbe, 0x80, 0xbf, 0x22, 0xaf, 0x0b, 0xae, 0x0a, 0x12, 0x22, 0xe9, 0xaf, 0x0b, 0xae, 0x0a,
|
||||
0x12, 0x35, 0x7b, 0x22, 0x75, 0x89, 0x80, 0x90, 0x00, 0xc3, 0xe0, 0xc3, 0x94, 0xff, 0x22, 0x43,
|
||||
0xad, 0x04, 0x90, 0xff, 0x50, 0x74, 0x0f, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0x85, 0x0d, 0x82, 0x85,
|
||||
0x0c, 0x83, 0x74, 0x26, 0x93, 0x90, 0xff, 0x48, 0xf0, 0x85, 0x0d, 0x82, 0x85, 0x0c, 0x83, 0x74,
|
||||
0x27, 0x93, 0x90, 0xff, 0x42, 0xf0, 0x90, 0xff, 0x40, 0x74, 0x6c, 0xf0, 0x90, 0xff, 0x57, 0x74,
|
||||
0xff, 0xf0, 0x90, 0xff, 0x56, 0xe4, 0xf0, 0x90, 0xff, 0x5f, 0x74, 0xff, 0xf0, 0x90, 0xff, 0x5e,
|
||||
0xe4, 0xf0, 0x85, 0x0d, 0x82, 0x85, 0x0c, 0x83, 0x22, 0x78, 0x5c, 0xe6, 0xff, 0x78, 0x84, 0xe2,
|
||||
0xfc, 0x08, 0xe2, 0x2f, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0x22, 0xe5, 0x22, 0x75, 0xf0,
|
||||
0x0a, 0xa4, 0x24, 0x03, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0x90, 0xff, 0x54, 0xe0,
|
||||
0x90, 0x01, 0xf0, 0xf0, 0x90, 0xff, 0x5c, 0xe0, 0x90, 0x01, 0xf1, 0xf0, 0x75, 0x8a, 0xa0, 0xe4,
|
||||
0x90, 0x00, 0xc0, 0xf0, 0x8c, 0x8f, 0x8d, 0x8e, 0x75, 0x8a, 0xa0, 0xf0, 0x90, 0xff, 0x43, 0x74,
|
||||
0x5f, 0xf0, 0xe5, 0x89, 0x22, 0xe5, 0x27, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4,
|
||||
0x34, 0x02, 0xf5, 0x83, 0x22, 0x78, 0x5c, 0xe6, 0xff, 0x24, 0xb7, 0xf5, 0x82, 0xe4, 0x34, 0x02,
|
||||
0xf5, 0x83, 0xe0, 0x90, 0xff, 0x54, 0xf0, 0x18, 0xe6, 0x24, 0xb7, 0xf5, 0x82, 0xe4, 0x34, 0x02,
|
||||
0xf5, 0x83, 0xe0, 0x90, 0xff, 0x5c, 0xf0, 0xef, 0xc3, 0x13, 0xff, 0xe5, 0x0d, 0x24, 0x1a, 0xf5,
|
||||
0x82, 0xe4, 0x35, 0x0c, 0xf5, 0x83, 0xe5, 0x82, 0x2f, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83,
|
||||
0xe4, 0x93, 0x90, 0xff, 0x55, 0xf0, 0x22, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xef, 0x75, 0xf0, 0x0a,
|
||||
0xa4, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0xff, 0xa8, 0x3f, 0x08, 0x08,
|
||||
0xe6, 0xfa, 0x08, 0xe6, 0xf5, 0x82, 0x8a, 0x83, 0x22, 0x74, 0x28, 0x93, 0x90, 0xff, 0x55, 0xf0,
|
||||
0x90, 0x01, 0xf0, 0xe0, 0x90, 0xff, 0x54, 0xf0, 0x90, 0x01, 0xf1, 0xe0, 0x90, 0xff, 0x5c, 0xf0,
|
||||
0x90, 0xff, 0x48, 0xe0, 0xff, 0x7e, 0x00, 0xc3, 0x94, 0x07, 0xee, 0x94, 0x00, 0x22, 0x75, 0x91,
|
||||
0xc3, 0xe4, 0xf5, 0x91, 0xe5, 0x89, 0x22, 0xfd, 0x7c, 0x00, 0xe6, 0xfa, 0x08, 0xe6, 0xfb, 0xc3,
|
||||
0x9d, 0xff, 0xea, 0x9c, 0xfe, 0xef, 0x78, 0x03, 0x22, 0xce, 0xa2, 0xe7, 0x13, 0xce, 0x13, 0x22,
|
||||
0xad, 0x8e, 0xac, 0x8f, 0x75, 0x8a, 0xa0, 0xe4, 0x90, 0x00, 0xc0, 0x22, 0x90, 0xff, 0x52, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0xa6, 0x06, 0x08, 0xf6, 0x90, 0xff, 0x5a, 0xe0, 0xfe, 0xa3, 0xe0, 0x22, 0xe5,
|
||||
0x27, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0xd3,
|
||||
0xe5, 0x2a, 0x94, 0x00, 0xe5, 0x29, 0x64, 0x80, 0x94, 0x80, 0x22, 0x90, 0xff, 0x52, 0xe0, 0xfa,
|
||||
0xa3, 0xe0, 0xc3, 0x9f, 0xea, 0x9e, 0x22, 0x90, 0xff, 0x5f, 0xf0, 0xed, 0x2b, 0xff, 0xec, 0x3a,
|
||||
0xfe, 0xef, 0x78, 0x03, 0x22, 0x7f, 0xb4, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0x03, 0x02, 0x10, 0x98,
|
||||
0x90, 0xff, 0x5e, 0xf0, 0x90, 0xff, 0x56, 0xe0, 0xff, 0xa3, 0xe0, 0xd3, 0x9f, 0x22, 0x75, 0x91,
|
||||
0xc1, 0xe4, 0xf5, 0x91, 0xe5, 0x89, 0x22, 0x78, 0x84, 0xe2, 0xfc, 0x08, 0xe2, 0x22, 0x74, 0xb7,
|
||||
0x25, 0x22, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x26, 0x22, 0xe5, 0x27,
|
||||
0x75, 0xf0, 0x0a, 0xa4, 0x24, 0x08, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0xd3, 0x74,
|
||||
0x05, 0x93, 0x9f, 0x74, 0x04, 0x93, 0x9e, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0x0b, 0xf5, 0x82,
|
||||
0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0x22, 0x78, 0x83, 0xe2,
|
||||
0x90, 0xff, 0x40, 0xf0, 0x22, 0xe5, 0x0d, 0x24, 0x2b, 0xff, 0xe4, 0x35, 0x0c, 0xa9, 0x07, 0x22,
|
||||
0xef, 0x24, 0x01, 0xff, 0xee, 0x33, 0xfe, 0xef, 0x78, 0x07, 0x22, 0xe5, 0x22, 0xc3, 0x78, 0x65,
|
||||
0x96, 0x22, 0xe0, 0xfc, 0xa3, 0xe0, 0xc3, 0x9f, 0x22, 0x8f, 0x23, 0x12, 0x05, 0x40, 0xe2, 0xfb,
|
||||
0x12, 0x00, 0x60, 0x12, 0x04, 0x02, 0x12, 0x0d, 0x1a, 0x8e, 0x2f, 0x8f, 0x30, 0xeb, 0x70, 0x5f,
|
||||
0x75, 0x24, 0x01, 0x12, 0x05, 0x6f, 0xe4, 0xf5, 0x29, 0xf5, 0x2a, 0x78, 0x61, 0xe2, 0xfe, 0x08,
|
||||
0xe2, 0xff, 0x78, 0x60, 0x12, 0x02, 0xc1, 0x78, 0x65, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x78, 0x64,
|
||||
0x12, 0x04, 0x76, 0xc3, 0x74, 0x09, 0x93, 0x94, 0x00, 0x50, 0x05, 0x12, 0x05, 0x7b, 0x80, 0x04,
|
||||
0xae, 0x27, 0xaf, 0x28, 0x8e, 0x2d, 0x8f, 0x2e, 0x12, 0x00, 0x60, 0x74, 0x09, 0x93, 0xfc, 0x74,
|
||||
0x0a, 0x12, 0x02, 0x7d, 0x40, 0x06, 0xae, 0x2d, 0xaf, 0x2e, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x01,
|
||||
0x8e, 0x27, 0x8f, 0x28, 0x78, 0x69, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x78, 0x68, 0x80, 0x76, 0x78,
|
||||
0x67, 0xe6, 0x14, 0x6b, 0x70, 0x7a, 0xf5, 0x24, 0x12, 0x05, 0x6f, 0x12, 0x00, 0x60, 0x74, 0x03,
|
||||
0x93, 0xf5, 0x29, 0x74, 0x04, 0x93, 0xf5, 0x2a, 0x12, 0x00, 0xec, 0x12, 0x02, 0xb9, 0xeb, 0x25,
|
||||
0xe0, 0x25, 0xe0, 0x24, 0x5d, 0x12, 0x00, 0xf3, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x5c, 0x12,
|
||||
0x04, 0x75, 0xc3, 0x74, 0x0b, 0x93, 0x94, 0x00, 0x50, 0x05, 0x12, 0x05, 0x7b, 0x80, 0x04, 0xae,
|
||||
0x27, 0xaf, 0x28, 0x8e, 0x2d, 0x8f, 0x2e, 0x12, 0x00, 0x60, 0x74, 0x0b, 0x93, 0xfc, 0x74, 0x0c,
|
||||
0x12, 0x02, 0x7d, 0x40, 0x06, 0xae, 0x2d, 0xaf, 0x2e, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x01, 0x8e,
|
||||
0x27, 0x8f, 0x28, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x59, 0x12, 0x00, 0xf3, 0xeb, 0x25, 0xe0,
|
||||
0x25, 0xe0, 0x24, 0x58, 0xf8, 0xe2, 0x2f, 0xf5, 0x2c, 0x18, 0xe2, 0x3e, 0xf5, 0x2b, 0x80, 0x7d,
|
||||
0xeb, 0xfd, 0x7c, 0x00, 0xae, 0x2f, 0xaf, 0x30, 0x12, 0x0d, 0x08, 0xac, 0x06, 0xad, 0x07, 0xe5,
|
||||
0x2f, 0xc3, 0x13, 0xfe, 0xe5, 0x30, 0x13, 0x2d, 0xf5, 0x2a, 0xec, 0x3e, 0xf5, 0x29, 0xeb, 0x25,
|
||||
0xe0, 0x25, 0xe0, 0x24, 0x5d, 0x12, 0x00, 0xf3, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x5c, 0x12,
|
||||
0x02, 0xc0, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x65, 0x12, 0x00, 0xf3, 0xeb, 0x25, 0xe0, 0x25,
|
||||
0xe0, 0x24, 0x64, 0x12, 0x04, 0x75, 0xd3, 0xe5, 0x26, 0x95, 0x28, 0xe5, 0x27, 0x64, 0x80, 0xf8,
|
||||
0xe5, 0x25, 0x64, 0x80, 0x98, 0x40, 0x11, 0xe4, 0xf5, 0x24, 0x85, 0x27, 0x2b, 0x85, 0x28, 0x2c,
|
||||
0x85, 0x25, 0x27, 0x85, 0x26, 0x28, 0x80, 0x0f, 0x75, 0x24, 0x01, 0x85, 0x25, 0x2b, 0x85, 0x26,
|
||||
0x2c, 0x85, 0x27, 0x27, 0x85, 0x28, 0x28, 0x12, 0x00, 0xec, 0x12, 0x02, 0xb9, 0xc3, 0xe5, 0x26,
|
||||
0x95, 0x2c, 0xf5, 0x26, 0xe5, 0x25, 0x95, 0x2b, 0xf5, 0x25, 0xc3, 0x64, 0x80, 0x94, 0x80, 0x50,
|
||||
0x05, 0xe4, 0xf5, 0x25, 0xf5, 0x26, 0xc3, 0xe5, 0x28, 0x95, 0x2c, 0xf5, 0x28, 0xe5, 0x27, 0x95,
|
||||
0x2b, 0xf5, 0x27, 0xc3, 0x64, 0x80, 0x94, 0x80, 0x50, 0x05, 0xe4, 0xf5, 0x27, 0xf5, 0x28, 0x85,
|
||||
0x27, 0x2b, 0x85, 0x28, 0x2c, 0xae, 0x2b, 0xaf, 0x2c, 0x12, 0x03, 0xd3, 0xe4, 0x7b, 0x80, 0xfa,
|
||||
0xf9, 0xf8, 0x12, 0x01, 0x2b, 0xae, 0x2f, 0xaf, 0x30, 0x12, 0x04, 0x86, 0xc0, 0x06, 0xc0, 0x07,
|
||||
0xe5, 0x26, 0x25, 0x28, 0xcf, 0xe5, 0x25, 0x35, 0x27, 0xcf, 0x24, 0x01, 0xcf, 0x34, 0x00, 0xab,
|
||||
0x07, 0xfa, 0x33, 0x95, 0xe0, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0f, 0x42, 0xef, 0x12,
|
||||
0x05, 0xe7, 0xe4, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0xe4, 0x7b, 0x80, 0xfa, 0xf9, 0xf8, 0x12, 0x0f,
|
||||
0x42, 0x8e, 0x2b, 0x8f, 0x2c, 0xe5, 0x24, 0x60, 0x0e, 0xe5, 0x2a, 0x25, 0x2c, 0xf5, 0x2c, 0xe5,
|
||||
0x29, 0x35, 0x2b, 0xf5, 0x2b, 0x80, 0x0d, 0xc3, 0xe5, 0x2a, 0x95, 0x2c, 0xf5, 0x2c, 0xe5, 0x29,
|
||||
0x95, 0x2b, 0xf5, 0x2b, 0xe5, 0x23, 0x12, 0x05, 0x17, 0xf8, 0xe5, 0x2b, 0xf2, 0x08, 0xe5, 0x2c,
|
||||
0xf2, 0x22, 0x8b, 0x1c, 0x8a, 0x1d, 0x89, 0x1e, 0x8d, 0x1f, 0x90, 0x01, 0xfa, 0xe0, 0xf5, 0x21,
|
||||
0xe4, 0xf5, 0x22, 0x85, 0x20, 0x20, 0xe5, 0x1f, 0x60, 0x04, 0x90, 0x00, 0xcb, 0xf0, 0x7d, 0x01,
|
||||
0x7f, 0x12, 0x12, 0x32, 0xcc, 0x75, 0x23, 0x01, 0x75, 0x24, 0x00, 0x78, 0x73, 0xe6, 0xff, 0x70,
|
||||
0x0b, 0x74, 0x20, 0x25, 0x24, 0xf5, 0x24, 0xe4, 0x35, 0x23, 0xf5, 0x23, 0x74, 0x00, 0x2f, 0xf9,
|
||||
0xe4, 0x34, 0x01, 0xfa, 0x7b, 0x01, 0xa8, 0x24, 0xac, 0x23, 0x7d, 0x01, 0x7e, 0x00, 0x7f, 0x20,
|
||||
0x12, 0x0c, 0x68, 0x7e, 0x00, 0x7f, 0x0b, 0x7d, 0xff, 0xe5, 0x24, 0x24, 0x09, 0xfb, 0xe4, 0x35,
|
||||
0x23, 0xfa, 0xa9, 0x03, 0x7b, 0x01, 0x12, 0x10, 0x98, 0x05, 0x24, 0xe5, 0x24, 0xae, 0x23, 0x70,
|
||||
0x02, 0x05, 0x23, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x12, 0x2b, 0x91, 0x90, 0x00, 0x0a,
|
||||
0x12, 0x2b, 0x2a, 0xff, 0x90, 0x00, 0x04, 0x12, 0x0c, 0xa7, 0x2f, 0xf5, 0x22, 0x90, 0x00, 0x05,
|
||||
0x12, 0x0c, 0xa7, 0xb4, 0x04, 0x09, 0x12, 0x2b, 0x58, 0x70, 0x04, 0x90, 0x00, 0xca, 0xf0, 0x90,
|
||||
0x00, 0xca, 0xe0, 0x60, 0x4b, 0x14, 0xf0, 0xe0, 0xff, 0x7e, 0x04, 0x60, 0x02, 0x7e, 0x08, 0x12,
|
||||
0x2b, 0x72, 0x90, 0x00, 0x05, 0xee, 0x12, 0x0c, 0xe6, 0xef, 0x60, 0x08, 0x12, 0x2b, 0x9b, 0xff,
|
||||
0xae, 0xf0, 0x80, 0x10, 0x90, 0x00, 0xcb, 0xe0, 0xff, 0xb4, 0x05, 0x02, 0x80, 0x02, 0x7f, 0x00,
|
||||
0xef, 0x7f, 0x00, 0xfe, 0x12, 0x2b, 0x11, 0x12, 0x2b, 0x27, 0xc4, 0x54, 0xf0, 0xfe, 0x12, 0x2b,
|
||||
0x9b, 0xfd, 0xe5, 0xf0, 0x54, 0x0f, 0xfc, 0xe4, 0x2d, 0xff, 0xee, 0x3c, 0x8f, 0xf0, 0x80, 0x60,
|
||||
0x12, 0x2b, 0x27, 0x70, 0x09, 0x12, 0x2b, 0x58, 0x70, 0x04, 0xe5, 0x1f, 0x60, 0x57, 0x12, 0x2b,
|
||||
0x79, 0x12, 0x2b, 0x11, 0x12, 0x2b, 0x27, 0x60, 0x17, 0xc4, 0x54, 0xf0, 0xfe, 0x12, 0x0d, 0xbb,
|
||||
0x24, 0x00, 0xff, 0xee, 0x35, 0xf0, 0xfe, 0x12, 0x2a, 0xec, 0x12, 0x2b, 0x5e, 0x12, 0x0e, 0x6b,
|
||||
0x12, 0x2b, 0x52, 0x60, 0x35, 0xc4, 0x54, 0xf0, 0xfe, 0x90, 0x00, 0x06, 0x12, 0x0d, 0xe6, 0x24,
|
||||
0x00, 0xff, 0xee, 0x35, 0xf0, 0xfe, 0x12, 0x2b, 0x11, 0x12, 0x2b, 0x72, 0x90, 0x00, 0x08, 0x12,
|
||||
0x0d, 0xe6, 0x24, 0x00, 0xff, 0xe5, 0xf0, 0x34, 0x10, 0xfe, 0x12, 0x2b, 0x11, 0x12, 0x2b, 0x5e,
|
||||
0x12, 0x0e, 0x6b, 0x80, 0x05, 0xe4, 0x90, 0x00, 0xcb, 0xf0, 0x90, 0x01, 0xfe, 0xe0, 0xd3, 0x94,
|
||||
0xf0, 0x40, 0x70, 0x12, 0x2b, 0x91, 0x12, 0x2b, 0x79, 0x12, 0x2b, 0x11, 0x12, 0x2b, 0x72, 0x12,
|
||||
0x0d, 0xbb, 0xff, 0xae, 0xf0, 0x12, 0x2a, 0xec, 0x90, 0x00, 0x06, 0x12, 0x2b, 0x05, 0x12, 0x2b,
|
||||
0x72, 0x90, 0x00, 0x08, 0x12, 0x2b, 0x0b, 0x90, 0x01, 0x40, 0x74, 0x40, 0xf0, 0x90, 0x01, 0x60,
|
||||
0x74, 0x60, 0xf0, 0x75, 0x2b, 0x01, 0x75, 0x2c, 0x41, 0x12, 0x2b, 0xa4, 0xaf, 0x28, 0x12, 0x39,
|
||||
0xc9, 0xe5, 0x2c, 0xfd, 0x24, 0x02, 0xf5, 0x2c, 0xe5, 0x2b, 0xfc, 0x34, 0x00, 0xf5, 0x2b, 0x8d,
|
||||
0x82, 0x8c, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xaf, 0x28, 0x12, 0x00, 0x12, 0xef, 0xd3, 0x94,
|
||||
0x1c, 0x40, 0x06, 0x7e, 0x0f, 0x7f, 0xff, 0x80, 0x05, 0xaf, 0x28, 0x12, 0x39, 0x97, 0x12, 0x2b,
|
||||
0x33, 0x40, 0xc9, 0x12, 0x2b, 0xa4, 0xaf, 0x28, 0x12, 0x39, 0x97, 0x12, 0x2b, 0x33, 0x40, 0xf6,
|
||||
0x78, 0x73, 0xe6, 0x7f, 0x00, 0x70, 0x02, 0x7f, 0x20, 0x78, 0x73, 0xa6, 0x07, 0xe5, 0x21, 0x20,
|
||||
0xe7, 0x2a, 0x30, 0xe6, 0x0a, 0x12, 0x2b, 0x27, 0x70, 0x22, 0x12, 0x2b, 0x58, 0x70, 0x1d, 0xe5,
|
||||
0x21, 0x30, 0xe5, 0x0f, 0x12, 0x2b, 0x52, 0xff, 0x90, 0x00, 0x05, 0x12, 0x0c, 0xa7, 0x4f, 0x54,
|
||||
0x84, 0x70, 0x09, 0xe5, 0x21, 0x30, 0xe4, 0x0c, 0xe5, 0x1f, 0x60, 0x08, 0x90, 0x01, 0xed, 0xe0,
|
||||
0xff, 0x12, 0x31, 0x5d, 0x22, 0x8b, 0x1c, 0x8a, 0x1d, 0x89, 0x1e, 0x8d, 0x1f, 0xe4, 0xf5, 0x22,
|
||||
0x90, 0x00, 0x05, 0x12, 0x0c, 0xa7, 0xf5, 0x23, 0x90, 0x00, 0x0b, 0x12, 0x0c, 0xa7, 0x60, 0x08,
|
||||
0xe4, 0x78, 0x8a, 0xf2, 0x90, 0x00, 0xbf, 0xf0, 0xe5, 0x23, 0xb4, 0x80, 0x29, 0x78, 0x8a, 0x74,
|
||||
0xff, 0xf2, 0x12, 0x34, 0xe0, 0x90, 0x00, 0xb9, 0xe5, 0xf0, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x34,
|
||||
0xf1, 0x90, 0x00, 0xbb, 0xe5, 0xf0, 0xf0, 0xa3, 0xef, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3,
|
||||
0xe0, 0x04, 0xf0, 0x02, 0x1c, 0xa9, 0xe5, 0x23, 0x64, 0x08, 0x60, 0x03, 0x02, 0x1c, 0x56, 0x12,
|
||||
0x34, 0xe0, 0xc3, 0x90, 0x00, 0xba, 0xe0, 0x90, 0x00, 0xb9, 0x12, 0x1c, 0xce, 0x8e, 0x24, 0x8f,
|
||||
0x25, 0x12, 0x34, 0xeb, 0xc3, 0x90, 0x00, 0xbc, 0xe0, 0x90, 0x00, 0xbb, 0x12, 0x1c, 0xce, 0x12,
|
||||
0x34, 0xd9, 0x74, 0x01, 0x93, 0xfc, 0x74, 0x02, 0x12, 0x34, 0xf9, 0x40, 0x12, 0x90, 0x01, 0xec,
|
||||
0xe0, 0x30, 0xe0, 0x0b, 0x78, 0x8a, 0xe2, 0x54, 0xfe, 0xf2, 0xe4, 0x90, 0x00, 0xbf, 0xf0, 0xe5,
|
||||
0x25, 0x2f, 0xfd, 0xe5, 0x24, 0x3e, 0xfc, 0x12, 0x34, 0xd9, 0x74, 0x05, 0x93, 0xfb, 0xd3, 0xed,
|
||||
0x9b, 0xec, 0x94, 0x00, 0x40, 0x0b, 0x78, 0x8a, 0xe2, 0x54, 0xfc, 0xf2, 0xe4, 0x90, 0x00, 0xbf,
|
||||
0xf0, 0x12, 0x34, 0xd9, 0x74, 0x03, 0x93, 0xfc, 0x74, 0x04, 0x12, 0x34, 0xf9, 0x40, 0x13, 0x78,
|
||||
0x8a, 0xe2, 0x20, 0xe1, 0x04, 0xe5, 0x1f, 0x60, 0x09, 0x75, 0x22, 0x0c, 0xe4, 0x78, 0x8a, 0xf2,
|
||||
0xf5, 0x1f, 0x78, 0x8a, 0xe2, 0x54, 0x3c, 0x70, 0x03, 0x02, 0x1c, 0xa9, 0x12, 0x34, 0xd9, 0x74,
|
||||
0x06, 0x93, 0xfd, 0x7c, 0x00, 0xd3, 0xe5, 0x25, 0x9d, 0xe5, 0x24, 0x9c, 0x50, 0x09, 0xef, 0x9d,
|
||||
0xee, 0x9c, 0x50, 0x03, 0x02, 0x1c, 0xa9, 0xd3, 0xef, 0x95, 0x25, 0xee, 0x95, 0x24, 0x40, 0x17,
|
||||
0x12, 0x34, 0xeb, 0xd3, 0x90, 0x00, 0xbc, 0xe0, 0x9f, 0x90, 0x00, 0xbb, 0xe0, 0x95, 0xf0, 0x7f,
|
||||
0x02, 0x40, 0x02, 0x7f, 0x01, 0x80, 0x15, 0x12, 0x34, 0xe0, 0xd3, 0x90, 0x00, 0xba, 0xe0, 0x9f,
|
||||
0x90, 0x00, 0xb9, 0xe0, 0x95, 0xf0, 0x7f, 0x04, 0x40, 0x02, 0x7f, 0x03, 0x8f, 0x22, 0x78, 0x8a,
|
||||
0xe2, 0x54, 0xc3, 0xf2, 0x80, 0x53, 0xe5, 0x23, 0xb4, 0x04, 0x09, 0xe4, 0x90, 0x00, 0xbd, 0xf0,
|
||||
0xa3, 0xf0, 0x80, 0x45, 0x12, 0x34, 0xd9, 0x74, 0x01, 0x93, 0xfe, 0x74, 0x02, 0x93, 0xff, 0xd3,
|
||||
0x90, 0x00, 0xbe, 0xe0, 0x9f, 0x90, 0x00, 0xbd, 0xe0, 0x9e, 0x50, 0x07, 0x90, 0x01, 0xec, 0xe0,
|
||||
0x20, 0xe0, 0x26, 0x78, 0x8a, 0xe2, 0xff, 0x30, 0xe0, 0x1a, 0x90, 0x00, 0xbf, 0xe0, 0xfe, 0xd3,
|
||||
0x94, 0x02, 0x50, 0x0a, 0xee, 0x7e, 0x0b, 0xb4, 0x01, 0x02, 0x7e, 0x05, 0x8e, 0x22, 0xef, 0x54,
|
||||
0xfe, 0x78, 0x8a, 0xf2, 0xe4, 0x90, 0x00, 0xbf, 0xf0, 0xc3, 0x90, 0x00, 0xbd, 0xe0, 0x94, 0xff,
|
||||
0x50, 0x13, 0x12, 0x34, 0xd9, 0xe4, 0x93, 0xff, 0x90, 0x00, 0xbe, 0xe0, 0x2f, 0xf0, 0x90, 0x00,
|
||||
0xbd, 0xe0, 0x34, 0x00, 0xf0, 0xe5, 0x1f, 0xaf, 0x1f, 0x70, 0x02, 0xaf, 0x22, 0x22, 0x9f, 0xff,
|
||||
0xe0, 0x95, 0xf0, 0xfe, 0x12, 0x39, 0xa3, 0x22, 0x8b, 0x1c, 0x8a, 0x1d, 0x89, 0x1e, 0x43, 0xad,
|
||||
0x04, 0x90, 0xff, 0x40, 0xe0, 0x20, 0xe0, 0xf9, 0x43, 0x95, 0x80, 0x90, 0xff, 0x41, 0x74, 0x37,
|
||||
0xf0, 0x90, 0xff, 0x49, 0x74, 0x0d, 0xf0, 0xe4, 0xf5, 0x25, 0xf5, 0x25, 0x12, 0x33, 0x70, 0xe5,
|
||||
0x25, 0xc3, 0x9f, 0x50, 0x22, 0xe9, 0x24, 0x0c, 0xf9, 0xe4, 0x3a, 0x12, 0x33, 0x61, 0xe4, 0xfd,
|
||||
0x12, 0x34, 0xaa, 0x12, 0x33, 0x57, 0x7d, 0x08, 0x12, 0x30, 0xb1, 0x12, 0x33, 0x57, 0xe4, 0xfd,
|
||||
0x12, 0x32, 0xcc, 0x05, 0x25, 0x80, 0xd5, 0x90, 0xff, 0x4a, 0xe4, 0xf0, 0x90, 0xff, 0x50, 0x74,
|
||||
0x0f, 0xf0, 0x90, 0xff, 0x58, 0xe4, 0xf0, 0x90, 0xff, 0x40, 0x74, 0x08, 0xf0, 0x90, 0xff, 0x43,
|
||||
0x74, 0x9f, 0xf0, 0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e, 0x12, 0x0c, 0x8e, 0x90, 0xff, 0x48, 0xf0,
|
||||
0x90, 0x00, 0x01, 0x12, 0x0c, 0xa7, 0x90, 0xff, 0x42, 0xf0, 0x90, 0x00, 0x02, 0x12, 0x0c, 0xa7,
|
||||
0x90, 0xff, 0x55, 0xf0, 0x90, 0x00, 0x03, 0x12, 0x0c, 0xa7, 0x90, 0xff, 0x54, 0xf0, 0x90, 0xff,
|
||||
0x5c, 0xe4, 0xf0, 0xf5, 0x25, 0x12, 0x33, 0x70, 0xe5, 0x25, 0xc3, 0x9f, 0x50, 0x5b, 0xe4, 0xf5,
|
||||
0x26, 0x75, 0x27, 0x64, 0x90, 0xff, 0x50, 0xe0, 0x20, 0xe7, 0x03, 0x43, 0x26, 0x01, 0xe5, 0x26,
|
||||
0x64, 0x01, 0x60, 0x03, 0xd5, 0x27, 0xed, 0x12, 0x33, 0x7e, 0x12, 0x33, 0x57, 0x7d, 0x06, 0x12,
|
||||
0x30, 0xb1, 0x90, 0xff, 0x40, 0x74, 0x29, 0xf0, 0x90, 0xff, 0x40, 0xe0, 0x20, 0xe0, 0xf9, 0x12,
|
||||
0x33, 0x57, 0x7d, 0x08, 0x12, 0x30, 0xb1, 0x90, 0xff, 0x52, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xab,
|
||||
0x1f, 0xe5, 0x21, 0xf9, 0x24, 0x02, 0xf5, 0x21, 0xe5, 0x20, 0xfa, 0x34, 0x00, 0xf5, 0x20, 0xee,
|
||||
0x8f, 0xf0, 0x12, 0x0e, 0x6b, 0x05, 0x25, 0x80, 0x9c, 0xe4, 0xf5, 0x25, 0x90, 0xff, 0x54, 0xf0,
|
||||
0x75, 0x28, 0x01, 0x12, 0x33, 0x87, 0x74, 0xff, 0x12, 0x33, 0x54, 0x7d, 0x07, 0x12, 0x30, 0xb1,
|
||||
0x90, 0xff, 0x55, 0x74, 0x64, 0xf0, 0xe4, 0xf5, 0x26, 0xf5, 0x27, 0x90, 0xff, 0x50, 0xe0, 0x30,
|
||||
0xe7, 0x10, 0x05, 0x27, 0xe5, 0x27, 0x70, 0x02, 0x05, 0x26, 0xb4, 0xe8, 0xee, 0xe5, 0x26, 0xb4,
|
||||
0x03, 0xe9, 0xe5, 0x28, 0x24, 0x02, 0x90, 0xff, 0x55, 0xf0, 0xe4, 0xf5, 0x26, 0xf5, 0x27, 0x00,
|
||||
0x05, 0x27, 0xe5, 0x27, 0x70, 0x02, 0x05, 0x26, 0xb4, 0xe8, 0xf4, 0xe5, 0x26, 0xb4, 0x03, 0xef,
|
||||
0xe4, 0xf5, 0x29, 0xf5, 0x26, 0xf5, 0x27, 0x90, 0xff, 0x50, 0xe0, 0x30, 0xe7, 0x03, 0x00, 0x80,
|
||||
0x02, 0x05, 0x29, 0x05, 0x27, 0xe5, 0x27, 0x70, 0x02, 0x05, 0x26, 0x64, 0x64, 0x45, 0x26, 0x70,
|
||||
0xe6, 0xe5, 0x29, 0xd3, 0x94, 0x28, 0x50, 0x0c, 0x12, 0x33, 0x7e, 0x05, 0x28, 0xe5, 0x28, 0xc3,
|
||||
0x94, 0x64, 0x40, 0xae, 0x12, 0x33, 0x87, 0xe5, 0x28, 0x12, 0x33, 0x54, 0x7d, 0x08, 0x12, 0x30,
|
||||
0xb1, 0x12, 0x33, 0x7e, 0x12, 0x33, 0x70, 0x05, 0x25, 0xe5, 0x25, 0xc3, 0x9f, 0x50, 0x03, 0x02,
|
||||
0x1d, 0xe0, 0x90, 0xff, 0x50, 0xe4, 0xf0, 0xff, 0x22, 0xe4, 0x78, 0x62, 0xf6, 0x18, 0xe6, 0x14,
|
||||
0x70, 0x03, 0x02, 0x1f, 0x69, 0x14, 0x70, 0x03, 0x02, 0x1f, 0xda, 0x24, 0x02, 0x60, 0x03, 0x02,
|
||||
0x1f, 0xfc, 0x12, 0x14, 0xd2, 0xe4, 0x93, 0x78, 0x65, 0xf6, 0x78, 0x60, 0xe6, 0x30, 0xe0, 0x08,
|
||||
0x75, 0x23, 0x05, 0x75, 0x24, 0x01, 0x80, 0x06, 0x75, 0x23, 0x08, 0xe4, 0xf5, 0x24, 0xe4, 0xf5,
|
||||
0x22, 0x12, 0x16, 0xbb, 0x50, 0x3f, 0x12, 0x16, 0x57, 0x25, 0x22, 0x12, 0x14, 0xe4, 0xf5, 0x25,
|
||||
0xe5, 0x22, 0x54, 0x01, 0xfd, 0xaf, 0x25, 0x12, 0x34, 0xaa, 0xad, 0x24, 0xaf, 0x25, 0x12, 0x32,
|
||||
0xcc, 0xad, 0x23, 0xaf, 0x25, 0x12, 0x30, 0xb1, 0x78, 0x60, 0xe6, 0xb4, 0x03, 0x13, 0xe5, 0x22,
|
||||
0x30, 0xe0, 0x0e, 0xe4, 0xfd, 0xaf, 0x25, 0x12, 0x32, 0xcc, 0x7d, 0x08, 0xaf, 0x25, 0x12, 0x30,
|
||||
0xb1, 0x05, 0x22, 0x80, 0xbc, 0x78, 0x5d, 0xe6, 0xf5, 0x25, 0x75, 0x26, 0x10, 0x76, 0x40, 0x7e,
|
||||
0x00, 0x7f, 0x12, 0x7d, 0x10, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0xb7, 0x12, 0x10, 0x98, 0xe5, 0x26,
|
||||
0xd3, 0x94, 0x01, 0x40, 0x3c, 0x12, 0x20, 0x01, 0x12, 0x16, 0xbb, 0x50, 0x2c, 0x12, 0x14, 0xd2,
|
||||
0x74, 0x02, 0x93, 0x75, 0xf0, 0xa3, 0xa4, 0xff, 0xae, 0xf0, 0x12, 0x14, 0xec, 0x12, 0x16, 0xc2,
|
||||
0xec, 0x9e, 0x50, 0x08, 0x12, 0x16, 0x5e, 0xf4, 0xfe, 0xef, 0x5e, 0xf0, 0x12, 0x16, 0x5e, 0xc3,
|
||||
0x13, 0xfe, 0xef, 0x4e, 0xf0, 0x05, 0x22, 0x80, 0xcf, 0xe5, 0x26, 0xc3, 0x13, 0xf5, 0x26, 0x80,
|
||||
0xbd, 0x78, 0x5d, 0xa6, 0x25, 0x78, 0x61, 0x76, 0x01, 0x12, 0x14, 0xd2, 0x74, 0x05, 0x93, 0x25,
|
||||
0xe0, 0xf5, 0x25, 0x74, 0x04, 0x93, 0x33, 0xf5, 0x24, 0xe4, 0x78, 0x64, 0xf6, 0xfe, 0xfd, 0x12,
|
||||
0x16, 0x35, 0x7e, 0x00, 0x7f, 0x24, 0x7d, 0x00, 0x7b, 0xfe, 0x7a, 0x00, 0x79, 0x5f, 0x12, 0x10,
|
||||
0x98, 0x75, 0x23, 0x04, 0x12, 0x31, 0x0b, 0x12, 0x20, 0x01, 0x12, 0x16, 0xbb, 0x50, 0x34, 0x12,
|
||||
0x14, 0xec, 0xe0, 0xfe, 0xa3, 0xe0, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff,
|
||||
0xe5, 0x22, 0x12, 0x15, 0x27, 0xee, 0x8f, 0xf0, 0x12, 0x0d, 0xa5, 0xe5, 0x22, 0x12, 0x15, 0x27,
|
||||
0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x22, 0x12, 0x16, 0x88, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x05,
|
||||
0x22, 0x80, 0xc7, 0xd5, 0x23, 0xc1, 0x78, 0x61, 0x76, 0x02, 0x12, 0x31, 0x0b, 0x12, 0x26, 0xc2,
|
||||
0x78, 0x65, 0xe6, 0xfd, 0xe4, 0xff, 0x12, 0x2f, 0x6e, 0x78, 0x62, 0xe6, 0x30, 0xe1, 0x04, 0x78,
|
||||
0x64, 0x76, 0x28, 0x78, 0x65, 0xe6, 0xfd, 0xe4, 0xff, 0x02, 0x21, 0x82, 0xe4, 0x78, 0x61, 0xf6,
|
||||
0x22, 0x12, 0x26, 0xc2, 0x12, 0x31, 0x0b, 0xe4, 0xf5, 0x22, 0x22, 0x8b, 0x1c, 0x8a, 0x1d, 0x89,
|
||||
0x1e, 0xe4, 0xf5, 0x1f, 0xfe, 0x7f, 0x0c, 0xfd, 0x12, 0x10, 0x98, 0x7a, 0x00, 0x79, 0x02, 0x12,
|
||||
0x04, 0x58, 0x7a, 0x00, 0x79, 0x31, 0x12, 0x04, 0x58, 0x78, 0x6d, 0xe6, 0x14, 0x60, 0x30, 0x04,
|
||||
0x60, 0x03, 0x02, 0x21, 0x7b, 0xe4, 0x78, 0x6c, 0xf6, 0xff, 0x12, 0x39, 0xc4, 0x12, 0x1e, 0x89,
|
||||
0x78, 0x62, 0xe6, 0x30, 0xe4, 0x03, 0x02, 0x21, 0x7f, 0x7e, 0x00, 0x7f, 0x5e, 0x7d, 0x00, 0x7b,
|
||||
0xfe, 0x7a, 0x00, 0x79, 0x01, 0x12, 0x10, 0x98, 0x78, 0x6d, 0x76, 0x01, 0x02, 0x21, 0x73, 0x12,
|
||||
0x1e, 0x89, 0x78, 0x62, 0xe6, 0xff, 0x30, 0xe4, 0x03, 0x02, 0x21, 0x7b, 0xef, 0x20, 0xe3, 0x03,
|
||||
0x02, 0x21, 0x1f, 0x90, 0x00, 0x8b, 0xe0, 0x30, 0xe1, 0x39, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x21,
|
||||
0x12, 0x39, 0xcd, 0xef, 0x60, 0x2d, 0x90, 0x00, 0x8b, 0x74, 0x02, 0xf0, 0x78, 0x06, 0x14, 0xf2,
|
||||
0x78, 0x02, 0x14, 0xf2, 0x08, 0xe5, 0x21, 0xf2, 0x12, 0x00, 0x60, 0x74, 0x03, 0x93, 0xfc, 0x74,
|
||||
0x04, 0x93, 0xfd, 0xec, 0xc3, 0x13, 0xfe, 0xed, 0x13, 0xff, 0xed, 0x2f, 0x78, 0x05, 0xf2, 0xec,
|
||||
0x3e, 0x18, 0xf2, 0x90, 0x00, 0x8b, 0xe0, 0x30, 0xe0, 0x5b, 0x75, 0x25, 0x00, 0x75, 0x26, 0x00,
|
||||
0x75, 0x27, 0x68, 0x75, 0x28, 0x00, 0x75, 0x29, 0x00, 0x75, 0x2a, 0x6a, 0x7b, 0xfe, 0x7a, 0x00,
|
||||
0x79, 0x5f, 0x12, 0x29, 0x10, 0xe4, 0xf5, 0x20, 0xe5, 0x20, 0x12, 0x03, 0x72, 0xff, 0xe5, 0x20,
|
||||
0x12, 0x05, 0x41, 0xef, 0xf2, 0xf4, 0x60, 0x1b, 0xe5, 0x20, 0x12, 0x05, 0xb8, 0xf9, 0xe4, 0xfa,
|
||||
0x7b, 0xfe, 0xad, 0x20, 0x12, 0x39, 0x8b, 0xe5, 0x20, 0x75, 0xf0, 0x2f, 0xa4, 0x24, 0x06, 0xf8,
|
||||
0x74, 0x01, 0xf2, 0x05, 0x20, 0xe5, 0x20, 0xc3, 0x94, 0x02, 0x40, 0xcc, 0x12, 0x2a, 0x0e, 0x90,
|
||||
0x00, 0x8b, 0x74, 0x01, 0xf0, 0x78, 0x62, 0xe6, 0x30, 0xe5, 0x04, 0x78, 0x6c, 0x76, 0x01, 0x90,
|
||||
0x00, 0x8b, 0xe0, 0xf5, 0x1f, 0x78, 0x66, 0x76, 0x01, 0xe4, 0xf5, 0x20, 0xe5, 0x20, 0xc3, 0x94,
|
||||
0x02, 0x50, 0x19, 0x90, 0x00, 0x8b, 0xe0, 0x30, 0xe0, 0x05, 0xaf, 0x20, 0x12, 0x39, 0xaf, 0x12,
|
||||
0x30, 0x4c, 0x05, 0x20, 0x78, 0x66, 0x74, 0x2f, 0x26, 0xf6, 0x80, 0xe0, 0xa8, 0x1e, 0xac, 0x1d,
|
||||
0xad, 0x1c, 0x12, 0x02, 0x9f, 0xe5, 0x1e, 0x24, 0x06, 0xf9, 0xe4, 0x35, 0x1d, 0xa8, 0x01, 0xfc,
|
||||
0xad, 0x1c, 0x7a, 0x00, 0x79, 0x31, 0x12, 0x02, 0xa3, 0x78, 0x0d, 0xe2, 0x70, 0x11, 0x78, 0x3c,
|
||||
0xe2, 0x70, 0x0c, 0x90, 0x00, 0x8b, 0x74, 0x03, 0xf0, 0x80, 0x04, 0xe4, 0x78, 0x6d, 0xf6, 0xaf,
|
||||
0x1f, 0x22, 0x8f, 0x27, 0x8d, 0x28, 0x78, 0x64, 0xe6, 0x60, 0x01, 0x16, 0x12, 0x15, 0x25, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x27, 0x12, 0x14, 0xee, 0x12, 0x16, 0xc2, 0xf5, 0x2a, 0xec, 0x9e,
|
||||
0xf5, 0x29, 0x12, 0x16, 0x6e, 0xe0, 0xf5, 0x2b, 0xe4, 0xf5, 0x2c, 0x12, 0x16, 0x0f, 0x40, 0x06,
|
||||
0xae, 0x29, 0xaf, 0x2a, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x00, 0xe5, 0x27, 0x25, 0xe0, 0x24, 0x5f,
|
||||
0xf8, 0xee, 0xf2, 0x08, 0xef, 0xf2, 0x90, 0x36, 0x0b, 0xe4, 0x93, 0x60, 0x07, 0x78, 0x64, 0xe6,
|
||||
0xf5, 0x2c, 0x80, 0x0f, 0x12, 0x16, 0x0f, 0x7f, 0x00, 0x40, 0x02, 0x7f, 0x01, 0xef, 0x78, 0x64,
|
||||
0x56, 0xf5, 0x2c, 0xe5, 0x2c, 0x60, 0x03, 0x02, 0x22, 0x9e, 0xaf, 0x2a, 0xae, 0x29, 0x12, 0x39,
|
||||
0xa3, 0x12, 0x14, 0xd2, 0xc3, 0x12, 0x16, 0x7f, 0x50, 0x0d, 0x12, 0x16, 0x10, 0x40, 0x04, 0x05,
|
||||
0x2b, 0x80, 0x57, 0x15, 0x2b, 0x80, 0x53, 0x12, 0x15, 0xff, 0xe0, 0xff, 0x33, 0x95, 0xe0, 0xfe,
|
||||
0xef, 0x25, 0x2a, 0xf5, 0x2a, 0xee, 0x35, 0x29, 0xf5, 0x29, 0xd3, 0xe5, 0x2a, 0x94, 0x78, 0x12,
|
||||
0x16, 0x14, 0x40, 0x09, 0x12, 0x15, 0x25, 0xe4, 0x75, 0xf0, 0x01, 0x80, 0x1a, 0xe5, 0x2a, 0x24,
|
||||
0x78, 0xe4, 0x35, 0x29, 0xc3, 0x64, 0x80, 0x94, 0x80, 0xe5, 0x27, 0x75, 0xf0, 0x0a, 0x50, 0x11,
|
||||
0x12, 0x15, 0x2a, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x0d, 0xa5, 0x12, 0x15, 0xff, 0xe4, 0xf0, 0x80,
|
||||
0x06, 0x12, 0x16, 0x04, 0xe5, 0x2a, 0xf0, 0xe4, 0xf5, 0x2b, 0x12, 0x14, 0xd2, 0x74, 0x01, 0x93,
|
||||
0xff, 0xd3, 0x64, 0x80, 0xf8, 0xe5, 0x2b, 0x64, 0x80, 0x98, 0x50, 0x17, 0xef, 0x33, 0x95, 0xe0,
|
||||
0xfe, 0xad, 0x2b, 0xed, 0x33, 0x95, 0xe0, 0xfc, 0xed, 0x2f, 0xec, 0x3e, 0xc3, 0x64, 0x80, 0x94,
|
||||
0x80, 0x50, 0x15, 0xe4, 0xf5, 0x2b, 0xe5, 0x27, 0x12, 0x14, 0xee, 0xe0, 0xfe, 0xa3, 0xe0, 0xff,
|
||||
0x12, 0x15, 0x25, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x16, 0x6e, 0xe5, 0x2b, 0xf0, 0x78, 0x64,
|
||||
0xe6, 0x70, 0x3a, 0x12, 0x15, 0x25, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x27, 0x12, 0x16, 0x88,
|
||||
0x12, 0x16, 0xc2, 0xff, 0xec, 0x9e, 0xfe, 0x12, 0x39, 0xa3, 0xaa, 0x06, 0xab, 0x07, 0x12, 0x14,
|
||||
0xd2, 0x74, 0x04, 0x93, 0xfe, 0x74, 0x05, 0x93, 0xff, 0x7c, 0x00, 0x7d, 0x03, 0x12, 0x0d, 0x08,
|
||||
0xd3, 0xeb, 0x9f, 0xea, 0x9e, 0x40, 0x06, 0x78, 0x62, 0xe6, 0x44, 0x10, 0xf6, 0x05, 0x27, 0x15,
|
||||
0x28, 0xe5, 0x28, 0x60, 0x03, 0x02, 0x21, 0x8c, 0x22, 0x8e, 0x1c, 0x8f, 0x1d, 0xe4, 0x78, 0x61,
|
||||
0xf6, 0x85, 0x1c, 0x0c, 0x85, 0x1d, 0x0d, 0xe5, 0x1d, 0x24, 0x2c, 0xff, 0xe4, 0x35, 0x1c, 0xfa,
|
||||
0xa9, 0x07, 0x7b, 0xff, 0x78, 0x5d, 0x7c, 0x00, 0x7d, 0x00, 0x7e, 0x00, 0x7f, 0x04, 0x12, 0x0c,
|
||||
0x68, 0x78, 0x84, 0x74, 0x01, 0xf2, 0x08, 0x74, 0xcc, 0xf2, 0x85, 0x1d, 0x82, 0x85, 0x1c, 0x83,
|
||||
0xe4, 0x93, 0xff, 0x7e, 0x00, 0xe5, 0x1d, 0x24, 0x06, 0xfd, 0xe4, 0x35, 0x1c, 0xfa, 0xa9, 0x05,
|
||||
0x7b, 0xff, 0x18, 0xe2, 0xfc, 0x08, 0xe2, 0xf8, 0x7d, 0x01, 0x12, 0x0c, 0x68, 0x90, 0x01, 0xa7,
|
||||
0xe0, 0xff, 0x12, 0x34, 0x0d, 0x90, 0x00, 0xc1, 0xe0, 0x64, 0x80, 0x70, 0x04, 0xa3, 0xe0, 0x64,
|
||||
0x75, 0x70, 0x44, 0xff, 0x85, 0x1d, 0x82, 0x85, 0x1c, 0x83, 0xe4, 0x93, 0xfe, 0xef, 0xc3, 0x9e,
|
||||
0x50, 0x35, 0xe4, 0xf5, 0x1f, 0x12, 0x16, 0x57, 0xfd, 0x12, 0x14, 0xe3, 0xfe, 0xe5, 0x1f, 0x90,
|
||||
0x39, 0xd0, 0x93, 0xfb, 0xee, 0x6b, 0x60, 0x0b, 0xe5, 0x1f, 0xc3, 0x94, 0x0f, 0x50, 0x04, 0x05,
|
||||
0x1f, 0x80, 0xe2, 0xe5, 0x1f, 0x90, 0x39, 0xdf, 0x93, 0xfe, 0xed, 0x2f, 0xf5, 0x82, 0xe4, 0x3c,
|
||||
0xf5, 0x83, 0xee, 0xf0, 0x0f, 0x80, 0xbd, 0x7e, 0x00, 0x7d, 0x00, 0x12, 0x16, 0x35, 0x12, 0x14,
|
||||
0xd2, 0x74, 0x02, 0x93, 0xff, 0x7e, 0x00, 0x7c, 0x10, 0x7d, 0x00, 0x12, 0x10, 0x6b, 0xe4, 0x7b,
|
||||
0xc8, 0xfa, 0xf9, 0xf8, 0x12, 0x0f, 0x42, 0x90, 0x02, 0x00, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x78,
|
||||
0x83, 0x74, 0x09, 0xf2, 0x78, 0x5f, 0xe6, 0xff, 0x20, 0xe3, 0x06, 0x78, 0x83, 0xe2, 0x44, 0x04,
|
||||
0xf2, 0xef, 0x20, 0xe2, 0x06, 0x78, 0x83, 0xe2, 0x44, 0x20, 0xf2, 0xe4, 0x78, 0x63, 0xf6, 0x43,
|
||||
0x95, 0x80, 0x78, 0x5f, 0xe6, 0x7f, 0x00, 0x30, 0xe1, 0x02, 0x7f, 0x40, 0xef, 0x44, 0x37, 0x90,
|
||||
0xff, 0x41, 0xf0, 0x90, 0xff, 0x49, 0x74, 0x0d, 0xf0, 0x75, 0x1e, 0x11, 0xe5, 0x1e, 0xf4, 0x60,
|
||||
0x0c, 0xe4, 0xfd, 0xaf, 0x1e, 0x12, 0x32, 0xcc, 0xe4, 0xfd, 0x12, 0x24, 0x30, 0x75, 0x1e, 0x16,
|
||||
0xe5, 0x1e, 0xf4, 0x60, 0x0c, 0xe4, 0xfd, 0xaf, 0x1e, 0x12, 0x32, 0xcc, 0x7d, 0x01, 0x12, 0x24,
|
||||
0x30, 0x78, 0x60, 0xe6, 0x7f, 0x08, 0x30, 0xe0, 0x02, 0x7f, 0x05, 0x78, 0x87, 0xef, 0xf2, 0x22,
|
||||
0xaf, 0x1e, 0x12, 0x34, 0xaa, 0x7d, 0x08, 0xaf, 0x1e, 0x12, 0x30, 0xb1, 0x7d, 0x07, 0xaf, 0x1e,
|
||||
0x12, 0x30, 0xb1, 0x22, 0x8f, 0x23, 0x12, 0x05, 0x40, 0xe2, 0xff, 0x70, 0x04, 0xf5, 0x24, 0x80,
|
||||
0x18, 0x78, 0x67, 0xe6, 0xfe, 0x14, 0xb5, 0x07, 0x09, 0xee, 0x25, 0xe0, 0x24, 0xfa, 0xf5, 0x24,
|
||||
0x80, 0x07, 0xef, 0x25, 0xe0, 0x24, 0xfe, 0xf5, 0x24, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x63, 0x12,
|
||||
0x00, 0xf3, 0xe5, 0x24, 0x12, 0x02, 0xd8, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x68, 0x12, 0x02, 0xdc,
|
||||
0xe4, 0xfc, 0xfd, 0x78, 0x4f, 0x12, 0x10, 0x34, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x65, 0x12, 0x00,
|
||||
0xf3, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x62, 0x12, 0x02, 0xdc, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x6a,
|
||||
0x12, 0x02, 0xdc, 0xe4, 0xfc, 0xfd, 0x78, 0x53, 0x12, 0x10, 0x34, 0x12, 0x00, 0x60, 0x74, 0x07,
|
||||
0x93, 0xfe, 0x74, 0x08, 0x78, 0x53, 0x12, 0x04, 0x63, 0x12, 0x0e, 0xb7, 0xc0, 0x04, 0xc0, 0x05,
|
||||
0xc0, 0x06, 0xc0, 0x07, 0x12, 0x00, 0x60, 0x78, 0x53, 0x12, 0x03, 0x05, 0x12, 0x0e, 0xb7, 0xd0,
|
||||
0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0x12, 0x01, 0xc3, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06,
|
||||
0xc0, 0x07, 0x12, 0x00, 0x60, 0x74, 0x05, 0x93, 0xfe, 0x74, 0x06, 0x78, 0x4f, 0x12, 0x04, 0x63,
|
||||
0x12, 0x01, 0x2b, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xc3, 0xef, 0x9b, 0xff, 0xee,
|
||||
0x9a, 0xfe, 0xed, 0x99, 0xfd, 0xec, 0x98, 0xfc, 0x78, 0x57, 0x12, 0x10, 0x34, 0x78, 0x57, 0x12,
|
||||
0x10, 0x0b, 0xec, 0x33, 0x50, 0x0b, 0x78, 0x4f, 0x12, 0x10, 0x40, 0x00, 0x00, 0x00, 0x01, 0x80,
|
||||
0x5b, 0x12, 0x05, 0x63, 0x7b, 0x02, 0x12, 0x02, 0x36, 0x12, 0x0f, 0x42, 0x78, 0x57, 0x12, 0x10,
|
||||
0x17, 0x12, 0x01, 0xc3, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x05, 0x63, 0x2f,
|
||||
0xfb, 0xea, 0x3e, 0xfa, 0xe9, 0x3d, 0xf9, 0xe8, 0x3c, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05,
|
||||
0xd0, 0x04, 0x12, 0x0f, 0x42, 0x78, 0x4f, 0x12, 0x10, 0x34, 0x12, 0x00, 0x60, 0x78, 0x4f, 0x12,
|
||||
0x03, 0x05, 0xd3, 0x12, 0x0f, 0xd4, 0x40, 0x14, 0x12, 0x00, 0x60, 0x74, 0x02, 0x93, 0x24, 0xff,
|
||||
0xff, 0x74, 0x01, 0x93, 0x12, 0x02, 0x2c, 0x78, 0x4f, 0x12, 0x10, 0x34, 0x78, 0x4f, 0x12, 0x10,
|
||||
0x0b, 0xe5, 0x23, 0x12, 0x02, 0xac, 0x22, 0x8b, 0x1f, 0x8a, 0x20, 0x89, 0x21, 0x43, 0xad, 0x04,
|
||||
0x43, 0x95, 0x80, 0x90, 0xff, 0x41, 0x74, 0x80, 0xf0, 0x90, 0xff, 0x49, 0x74, 0x0d, 0xf0, 0xa3,
|
||||
0xe4, 0xf0, 0x90, 0xff, 0x42, 0x04, 0xf0, 0x90, 0xff, 0x55, 0x74, 0x7d, 0xf0, 0x90, 0xff, 0x54,
|
||||
0xe4, 0xf0, 0x90, 0xff, 0x5c, 0xf0, 0x90, 0xff, 0x48, 0x74, 0x10, 0xf0, 0xe4, 0xf5, 0x26, 0xf5,
|
||||
0x27, 0xf5, 0x28, 0xf5, 0x29, 0xf5, 0x25, 0xe4, 0x12, 0x35, 0xaa, 0xf4, 0x60, 0x0d, 0xe4, 0xfd,
|
||||
0x12, 0x32, 0xcc, 0x12, 0x35, 0xb2, 0x7d, 0x08, 0x12, 0x30, 0xb1, 0x12, 0x35, 0x9c, 0xf4, 0x60,
|
||||
0x0d, 0xe4, 0xfd, 0x12, 0x32, 0xcc, 0x12, 0x35, 0x9c, 0x7d, 0x08, 0x12, 0x30, 0xb1, 0xe4, 0xff,
|
||||
0x00, 0x0f, 0xbf, 0xc8, 0xfb, 0x74, 0x03, 0x12, 0x35, 0xaa, 0xf4, 0x60, 0x0d, 0xe4, 0xfd, 0x12,
|
||||
0x34, 0xaa, 0x12, 0x35, 0xb2, 0x7d, 0x07, 0x12, 0x30, 0xb1, 0x12, 0x35, 0x9c, 0xf4, 0x60, 0x0d,
|
||||
0x7d, 0x01, 0x12, 0x34, 0xaa, 0x12, 0x35, 0x9c, 0x7d, 0x07, 0x12, 0x30, 0xb1, 0x90, 0xff, 0x43,
|
||||
0x74, 0x9f, 0xf0, 0x90, 0xff, 0x50, 0x74, 0x07, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0x90, 0xff, 0x40,
|
||||
0x74, 0x09, 0xf0, 0x75, 0x8a, 0xa0, 0xe4, 0x90, 0x00, 0xc0, 0xf0, 0x90, 0xff, 0x43, 0xe0, 0x30,
|
||||
0xe4, 0xf9, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0x90, 0xff, 0x52, 0xe0, 0xfe, 0xa3, 0xe0, 0x25,
|
||||
0x27, 0xf5, 0x27, 0xee, 0x35, 0x26, 0xf5, 0x26, 0x90, 0xff, 0x5a, 0xe0, 0xfe, 0xa3, 0xe0, 0x25,
|
||||
0x29, 0xf5, 0x29, 0xee, 0x35, 0x28, 0xf5, 0x28, 0x05, 0x25, 0xe5, 0x25, 0xc3, 0x94, 0x04, 0x50,
|
||||
0x03, 0x02, 0x25, 0xc7, 0xe5, 0x27, 0xae, 0x26, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8,
|
||||
0xf9, 0xff, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0xee, 0x8f, 0xf0, 0x12, 0x0e, 0x6b, 0xe5, 0x29,
|
||||
0xae, 0x28, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0xab, 0x22, 0xaa, 0x23,
|
||||
0xa9, 0x24, 0x90, 0x00, 0x02, 0xee, 0x8f, 0xf0, 0x12, 0x0e, 0x8a, 0x12, 0x35, 0xb2, 0xf4, 0x60,
|
||||
0x05, 0xe4, 0xfd, 0x12, 0x30, 0xb1, 0x12, 0x35, 0x9c, 0xf4, 0x60, 0x05, 0xe4, 0xfd, 0x12, 0x30,
|
||||
0xb1, 0x22, 0xe4, 0xf5, 0x27, 0xe5, 0x27, 0xc3, 0x78, 0x65, 0x96, 0x50, 0x2b, 0x12, 0x16, 0x57,
|
||||
0x25, 0x27, 0x12, 0x14, 0xe4, 0xf5, 0x28, 0x78, 0x60, 0xe6, 0x54, 0x01, 0xfd, 0xaf, 0x28, 0x12,
|
||||
0x32, 0xcc, 0x78, 0x60, 0xe6, 0xb4, 0x03, 0x0c, 0xe5, 0x27, 0x30, 0xe0, 0x07, 0xe4, 0xfd, 0xaf,
|
||||
0x28, 0x12, 0x32, 0xcc, 0x05, 0x27, 0x80, 0xcd, 0x90, 0xff, 0x4a, 0x74, 0x71, 0xf0, 0x90, 0xff,
|
||||
0x50, 0x74, 0x0f, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0x90, 0xff, 0x40, 0xe4, 0xf0, 0x12, 0x16, 0x96,
|
||||
0x90, 0xff, 0x54, 0xe4, 0xf0, 0x90, 0xff, 0x5c, 0xf0, 0x78, 0x5e, 0xe6, 0x90, 0xff, 0x42, 0xf0,
|
||||
0x90, 0xff, 0x55, 0x74, 0x28, 0xf0, 0x90, 0xff, 0x48, 0x74, 0x02, 0xf0, 0x43, 0xad, 0x04, 0x12,
|
||||
0x16, 0x9d, 0x90, 0xff, 0x43, 0xe0, 0x20, 0xe4, 0x1d, 0xe5, 0x89, 0x30, 0xe7, 0x08, 0x12, 0x14,
|
||||
0x84, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x12, 0x16, 0x4e, 0x30, 0xe7, 0xe6, 0x12, 0x14, 0x84, 0x50,
|
||||
0xe1, 0xe0, 0x04, 0xf0, 0x80, 0xdc, 0x12, 0x16, 0x96, 0xe4, 0x78, 0x86, 0xf2, 0x78, 0x5c, 0xf6,
|
||||
0x18, 0x76, 0x01, 0x78, 0x65, 0xe6, 0xc3, 0x13, 0x78, 0x63, 0xf6, 0x78, 0x5e, 0xe6, 0x90, 0xff,
|
||||
0x42, 0xf0, 0x18, 0xe6, 0x90, 0xff, 0x48, 0xf0, 0x78, 0x5f, 0xe6, 0x7f, 0x00, 0x20, 0xe4, 0x02,
|
||||
0x7f, 0x01, 0x90, 0x02, 0x02, 0xef, 0xf0, 0x12, 0x15, 0x35, 0x08, 0x12, 0x14, 0xdb, 0xff, 0x7d,
|
||||
0x06, 0x12, 0x30, 0xb1, 0x78, 0x5b, 0x12, 0x14, 0xdb, 0xff, 0x7d, 0x06, 0x12, 0x30, 0xb1, 0x78,
|
||||
0x83, 0xe2, 0xff, 0x90, 0xff, 0x40, 0xf0, 0x78, 0x5f, 0xe6, 0x30, 0xe7, 0x3e, 0x43, 0xad, 0x04,
|
||||
0xef, 0xf0, 0x90, 0xff, 0x43, 0xe0, 0x20, 0xe4, 0x1d, 0xe5, 0x89, 0x30, 0xe7, 0x08, 0x12, 0x14,
|
||||
0x84, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x12, 0x16, 0x4e, 0x30, 0xe7, 0xe6, 0x12, 0x14, 0x84, 0x50,
|
||||
0xe1, 0xe0, 0x04, 0xf0, 0x80, 0xdc, 0x7b, 0xff, 0x7a, 0x30, 0x79, 0xb1, 0x12, 0x27, 0xf2, 0x12,
|
||||
0x15, 0xe4, 0xf0, 0x78, 0x63, 0xe6, 0x70, 0xca, 0x02, 0x31, 0x0b, 0x53, 0xad, 0xfb, 0x12, 0x16,
|
||||
0x9d, 0x22, 0x15, 0x3f, 0x15, 0x3f, 0x15, 0x3f, 0xa8, 0x3f, 0xa6, 0x03, 0x08, 0xa6, 0x02, 0x08,
|
||||
0xa6, 0x01, 0x15, 0x3f, 0x12, 0x16, 0x96, 0x78, 0x87, 0xe2, 0xa8, 0x3f, 0xf6, 0x12, 0x14, 0xd9,
|
||||
0xff, 0xa8, 0x3f, 0xe6, 0xfd, 0x12, 0x15, 0x8e, 0x12, 0x10, 0x69, 0x78, 0x60, 0xe6, 0x64, 0x03,
|
||||
0x78, 0x5b, 0x60, 0x0d, 0x12, 0x14, 0xdb, 0xff, 0xa8, 0x3f, 0xe6, 0xfd, 0x12, 0x15, 0x8e, 0x80,
|
||||
0x08, 0x12, 0x14, 0xdb, 0x12, 0x15, 0x8b, 0x7d, 0x08, 0x12, 0x10, 0x69, 0x90, 0xff, 0x52, 0xe0,
|
||||
0xfe, 0xa3, 0xe0, 0xff, 0x78, 0x5c, 0xe6, 0x12, 0x15, 0x7d, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12,
|
||||
0x15, 0xf7, 0xff, 0x18, 0xe6, 0x12, 0x15, 0x7d, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x02, 0x02,
|
||||
0xe0, 0x60, 0x2e, 0x08, 0xe6, 0xff, 0x12, 0x14, 0xee, 0x12, 0x15, 0x77, 0x12, 0x29, 0x02, 0x12,
|
||||
0x14, 0xd2, 0x12, 0x16, 0x7e, 0x40, 0x1a, 0x78, 0x5b, 0xe6, 0xff, 0x12, 0x14, 0xee, 0x12, 0x15,
|
||||
0x77, 0x12, 0x29, 0x02, 0x12, 0x14, 0xd2, 0x12, 0x16, 0x7e, 0x40, 0x05, 0xe4, 0x90, 0x02, 0x02,
|
||||
0xf0, 0x90, 0x02, 0x02, 0xe0, 0x70, 0x1b, 0x78, 0x5c, 0x06, 0x06, 0x18, 0x06, 0x06, 0x78, 0x63,
|
||||
0x16, 0x78, 0x5f, 0xe6, 0x7f, 0x00, 0x20, 0xe4, 0x02, 0x7f, 0x01, 0x90, 0x02, 0x02, 0xef, 0xf0,
|
||||
0x80, 0x05, 0xe4, 0x90, 0x02, 0x02, 0xf0, 0x78, 0x63, 0xe6, 0x70, 0x0a, 0x90, 0xff, 0x50, 0xf0,
|
||||
0x90, 0xff, 0x58, 0xf0, 0x80, 0x35, 0x12, 0x15, 0x35, 0xa8, 0x3f, 0x76, 0x64, 0x90, 0xff, 0x58,
|
||||
0xe0, 0xff, 0x90, 0xff, 0x50, 0xe0, 0x4f, 0x30, 0xe7, 0x06, 0xa8, 0x3f, 0x16, 0xe6, 0x70, 0xed,
|
||||
0x12, 0x14, 0xd9, 0x12, 0x15, 0x8b, 0x7d, 0x06, 0x12, 0x10, 0x69, 0x78, 0x5b, 0x12, 0x14, 0xdb,
|
||||
0x12, 0x15, 0x8b, 0x7d, 0x06, 0x12, 0x10, 0x69, 0x12, 0x16, 0x9d, 0xe5, 0x3f, 0x24, 0x04, 0xf5,
|
||||
0x3f, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x9d, 0xff, 0xee, 0x9c, 0xfe, 0x12, 0x39, 0xa3, 0x22,
|
||||
0x8b, 0x22, 0x8a, 0x23, 0x89, 0x24, 0x12, 0x2d, 0x79, 0x12, 0x2d, 0xfc, 0x12, 0x31, 0xac, 0x74,
|
||||
0x55, 0x93, 0xf5, 0x2b, 0xe4, 0xf5, 0x2c, 0x12, 0x31, 0xef, 0x12, 0x0c, 0x8e, 0x70, 0x21, 0x12,
|
||||
0x31, 0xac, 0x74, 0x74, 0x93, 0xf5, 0x2d, 0xc3, 0x64, 0x80, 0x94, 0x80, 0x7f, 0x00, 0x50, 0x02,
|
||||
0x7f, 0x01, 0x12, 0x29, 0xd6, 0xee, 0x8f, 0xf0, 0x12, 0x0e, 0x1e, 0x75, 0x2c, 0x03, 0x80, 0x3a,
|
||||
0x12, 0x31, 0xef, 0x12, 0x0c, 0x8e, 0xff, 0xe5, 0x2b, 0x14, 0x6f, 0x70, 0x2d, 0x12, 0x31, 0xac,
|
||||
0x74, 0x75, 0x93, 0xf5, 0x2d, 0xc3, 0x64, 0x80, 0x94, 0x80, 0xe5, 0x2b, 0x50, 0x06, 0x25, 0xe0,
|
||||
0x14, 0xff, 0x80, 0x05, 0x25, 0xe0, 0x24, 0xfe, 0xff, 0x12, 0x29, 0xd6, 0xee, 0x8f, 0xf0, 0x12,
|
||||
0x0e, 0x1e, 0xe5, 0x2b, 0x25, 0xe0, 0x24, 0xfd, 0xf5, 0x2c, 0xe5, 0x2c, 0x60, 0x47, 0x24, 0xff,
|
||||
0xff, 0xe4, 0x34, 0xff, 0xfe, 0xef, 0x25, 0xe0, 0xff, 0xee, 0x33, 0xab, 0x22, 0xaa, 0x23, 0xa9,
|
||||
0x24, 0x8f, 0x82, 0xf5, 0x83, 0x12, 0x0d, 0xe6, 0xff, 0xae, 0xf0, 0x75, 0xf0, 0x02, 0xe5, 0x2c,
|
||||
0xa4, 0xf5, 0x82, 0x85, 0xf0, 0x83, 0x12, 0x0d, 0xe6, 0x2f, 0xff, 0xee, 0x35, 0xf0, 0xfe, 0x12,
|
||||
0x31, 0xac, 0xd3, 0x74, 0x77, 0x93, 0x9f, 0x74, 0x76, 0x93, 0x9e, 0x40, 0x08, 0x12, 0x31, 0xef,
|
||||
0x74, 0xff, 0x12, 0x0c, 0xd4, 0x22, 0x8f, 0x2c, 0xaf, 0x2d, 0xef, 0x33, 0x95, 0xe0, 0xfe, 0x12,
|
||||
0x39, 0xa3, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0x75, 0xf0, 0x02, 0xe5, 0x2c, 0xa4, 0xf5, 0x82,
|
||||
0x85, 0xf0, 0x83, 0x12, 0x0d, 0xe6, 0xfd, 0xac, 0xf0, 0xcf, 0xcd, 0xcf, 0xce, 0xcc, 0xce, 0x12,
|
||||
0x0d, 0x1a, 0x75, 0xf0, 0x02, 0xe5, 0x2c, 0xa4, 0xf5, 0x82, 0x85, 0xf0, 0x83, 0x22, 0xe4, 0xf5,
|
||||
0x22, 0xf5, 0x23, 0xff, 0xfe, 0x78, 0x35, 0xe2, 0x25, 0xe0, 0xfd, 0x78, 0x06, 0xe2, 0x2d, 0xfd,
|
||||
0x78, 0x0c, 0xe2, 0xc4, 0x54, 0xf0, 0x2d, 0xfd, 0x78, 0x3b, 0xe2, 0xfc, 0xc4, 0x33, 0x54, 0xe0,
|
||||
0x2d, 0x24, 0xfe, 0x60, 0x25, 0x24, 0xf0, 0x60, 0x21, 0x14, 0x60, 0x26, 0x24, 0xf2, 0x60, 0x1a,
|
||||
0x24, 0xfe, 0x60, 0x2e, 0x24, 0xf1, 0x60, 0x0c, 0x14, 0x60, 0x3b, 0x24, 0x02, 0x70, 0x6c, 0xe4,
|
||||
0xfd, 0xff, 0x80, 0x22, 0x7d, 0x01, 0x7f, 0x01, 0x80, 0x0b, 0x75, 0x22, 0x00, 0x75, 0x23, 0x01,
|
||||
0x80, 0x59, 0xe4, 0xfd, 0xff, 0x12, 0x32, 0x86, 0x8e, 0x22, 0x8f, 0x23, 0xe4, 0xfd, 0x7f, 0x01,
|
||||
0x80, 0x0f, 0x7d, 0x01, 0x7f, 0x01, 0x12, 0x32, 0x86, 0x8e, 0x22, 0x8f, 0x23, 0x7d, 0x01, 0xe4,
|
||||
0xff, 0x12, 0x32, 0x86, 0x80, 0x35, 0x7d, 0x01, 0x7f, 0x01, 0x12, 0x32, 0x86, 0xc0, 0x06, 0xc0,
|
||||
0x07, 0xe4, 0xfd, 0xff, 0x12, 0x32, 0x86, 0xd0, 0xe0, 0x2f, 0xf5, 0x23, 0xd0, 0xe0, 0x3e, 0xf5,
|
||||
0x22, 0xe4, 0xfd, 0x7f, 0x01, 0x12, 0x32, 0x86, 0xc0, 0x06, 0xc0, 0x07, 0x7d, 0x01, 0xe4, 0xff,
|
||||
0x12, 0x32, 0x86, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0xd3, 0xe5, 0x23, 0x9f, 0xe5,
|
||||
0x22, 0x9e, 0x40, 0x27, 0x78, 0x24, 0x7c, 0x00, 0x7d, 0x00, 0x12, 0x02, 0x9f, 0x78, 0x02, 0x7c,
|
||||
0x00, 0x7d, 0xfe, 0x7b, 0xfe, 0x7a, 0x00, 0x79, 0x31, 0x12, 0x02, 0xa5, 0x78, 0x31, 0x7c, 0x00,
|
||||
0x7d, 0xfe, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x24, 0x12, 0x02, 0xa5, 0x22, 0xab, 0x25, 0xe5, 0x27,
|
||||
0xf9, 0x24, 0x02, 0xf5, 0x27, 0xe5, 0x26, 0xfa, 0x34, 0x00, 0xf5, 0x26, 0xee, 0x8f, 0xf0, 0x12,
|
||||
0x0e, 0x6b, 0x90, 0x00, 0x02, 0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e, 0x12, 0x0d, 0xe6, 0xff, 0xae,
|
||||
0xf0, 0xab, 0x25, 0xe5, 0x27, 0xf9, 0x24, 0x02, 0xf5, 0x27, 0xe5, 0x26, 0xfa, 0x34, 0x00, 0xf5,
|
||||
0x26, 0xee, 0x8f, 0xf0, 0x02, 0x0e, 0x6b, 0x90, 0x00, 0x05, 0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e,
|
||||
0x02, 0x0c, 0xa7, 0xe5, 0x2a, 0xfd, 0x24, 0x02, 0xf5, 0x2a, 0xe5, 0x29, 0xfc, 0x34, 0x00, 0xf5,
|
||||
0x29, 0x8d, 0x82, 0x8c, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x05, 0x28, 0xe5, 0x28, 0xc3, 0x94,
|
||||
0x10, 0x22, 0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e, 0x90, 0x00, 0x0b, 0x02, 0x0c, 0xa7, 0xab, 0x25,
|
||||
0xe5, 0x27, 0xf9, 0x24, 0x02, 0xf5, 0x27, 0xe5, 0x26, 0xfa, 0x34, 0x00, 0xf5, 0x26, 0xe4, 0xf5,
|
||||
0xf0, 0x22, 0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e, 0x22, 0xe5, 0x1f, 0xfe, 0x7c, 0x00, 0xe4, 0x25,
|
||||
0x22, 0xff, 0xec, 0x3e, 0xfe, 0x22, 0x75, 0x89, 0x80, 0x90, 0x00, 0xc3, 0xe0, 0xc3, 0x94, 0xff,
|
||||
0x22, 0x75, 0x25, 0x01, 0x85, 0x23, 0x26, 0x85, 0x24, 0x27, 0x22, 0xab, 0x25, 0xaa, 0x26, 0xa9,
|
||||
0x27, 0x02, 0x0d, 0xbb, 0x75, 0x29, 0x01, 0x75, 0x2a, 0x61, 0xe4, 0xf5, 0x28, 0x22, 0x78, 0xff,
|
||||
0xe4, 0xf6, 0xd8, 0xfd, 0x90, 0x00, 0x00, 0x7f, 0x00, 0x7e, 0x03, 0xe4, 0xf0, 0xa3, 0xdf, 0xfc,
|
||||
0xde, 0xfa, 0x75, 0x81, 0x74, 0x75, 0xa0, 0x00, 0x02, 0x2c, 0x06, 0x02, 0x33, 0xd3, 0xe4, 0x93,
|
||||
0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2, 0x08, 0xdf, 0xf4, 0x80, 0x29,
|
||||
0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x33, 0xc4, 0x54, 0x0f, 0x44, 0x20,
|
||||
0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf, 0xe4, 0x80, 0x0b, 0x01, 0x02,
|
||||
0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x39, 0xbf, 0xe4, 0x7e, 0x01, 0x93, 0x60, 0xbc, 0xa3,
|
||||
0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93, 0xa3, 0x60, 0x01, 0x0e, 0xcf,
|
||||
0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xa3, 0xfa, 0xe4, 0x93, 0xa3, 0xf8,
|
||||
0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xf0, 0xa3, 0xc8, 0xc5, 0x82,
|
||||
0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xbe, 0x90, 0x36, 0x0a, 0xe4, 0x93,
|
||||
0x70, 0x05, 0x43, 0x90, 0x10, 0x80, 0x03, 0x53, 0x90, 0xef, 0x90, 0x36, 0x0c, 0xe4, 0x93, 0xff,
|
||||
0x7c, 0x01, 0x7d, 0x00, 0x12, 0x33, 0x94, 0x90, 0x36, 0x0d, 0xe4, 0x93, 0xb4, 0x01, 0x07, 0x90,
|
||||
0xff, 0x10, 0xe0, 0x44, 0x18, 0xf0, 0x7e, 0x01, 0x7f, 0x00, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x01,
|
||||
0x79, 0x00, 0x12, 0x10, 0x98, 0x7d, 0x01, 0x7f, 0x12, 0x12, 0x32, 0xcc, 0x7d, 0x03, 0x7f, 0x12,
|
||||
0x12, 0x30, 0xb1, 0x90, 0xff, 0x1b, 0xe0, 0x54, 0xfb, 0xf0, 0x90, 0xff, 0x14, 0xe0, 0x44, 0x04,
|
||||
0xf0, 0x90, 0x36, 0x09, 0xe4, 0x93, 0x90, 0x01, 0xfa, 0xf0, 0x90, 0x36, 0x07, 0xe4, 0x93, 0x90,
|
||||
0x01, 0xea, 0xf0, 0x90, 0x36, 0x11, 0xe4, 0x93, 0x90, 0x01, 0xed, 0xf0, 0x78, 0xa7, 0x7c, 0x01,
|
||||
0x7d, 0x01, 0x7b, 0xff, 0x7a, 0x36, 0x79, 0x00, 0x7e, 0x00, 0x7f, 0x03, 0x12, 0x0c, 0x68, 0xe4,
|
||||
0x90, 0x01, 0xec, 0xf0, 0x90, 0x01, 0xfe, 0x04, 0xf0, 0xe4, 0x78, 0x73, 0xf6, 0x90, 0x00, 0xca,
|
||||
0xf0, 0xa3, 0xf0, 0x22, 0x8f, 0x1c, 0x8c, 0x1d, 0x8d, 0x1e, 0xe4, 0xff, 0x79, 0x01, 0xe4, 0xf5,
|
||||
0x1f, 0xfe, 0x12, 0x35, 0xf3, 0xe5, 0x82, 0x2e, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe4,
|
||||
0x93, 0x25, 0xe0, 0x25, 0x1c, 0xf8, 0xe2, 0xfc, 0x08, 0xe2, 0xfd, 0x12, 0x35, 0xf3, 0x74, 0x04,
|
||||
0x93, 0xfa, 0x74, 0x05, 0x93, 0xfb, 0xc3, 0xed, 0x9b, 0xec, 0x9a, 0x40, 0x02, 0x05, 0x1f, 0x0e,
|
||||
0xbe, 0x04, 0xcf, 0x12, 0x35, 0xf3, 0x74, 0x06, 0x93, 0xfd, 0xe5, 0x1f, 0xc3, 0x9d, 0x50, 0x04,
|
||||
0xe4, 0xf9, 0x80, 0x04, 0x0f, 0xbf, 0x05, 0xb6, 0x90, 0x00, 0xcd, 0xe0, 0xb5, 0x01, 0x07, 0xe4,
|
||||
0x90, 0x00, 0xcc, 0xf0, 0x80, 0x28, 0x90, 0x00, 0xcc, 0xe0, 0x04, 0xf0, 0x85, 0x1e, 0x82, 0x85,
|
||||
0x1d, 0x83, 0x74, 0x23, 0x93, 0xff, 0x90, 0x00, 0xcc, 0xe0, 0xfd, 0x33, 0x95, 0xe0, 0xfc, 0xd3,
|
||||
0xed, 0x9f, 0x74, 0x80, 0xf8, 0x6c, 0x98, 0x40, 0x05, 0xe4, 0xf0, 0xa3, 0xe9, 0xf0, 0x90, 0x00,
|
||||
0xcd, 0xe0, 0x7f, 0x00, 0x60, 0x02, 0x7f, 0xaa, 0x22, 0xe4, 0x78, 0x4f, 0xf6, 0x08, 0xf6, 0xfe,
|
||||
0xfd, 0x12, 0x01, 0xb8, 0x12, 0x02, 0xe5, 0xe4, 0xf9, 0xf5, 0x30, 0xf5, 0x2e, 0x75, 0x2f, 0xff,
|
||||
0x78, 0x67, 0xe6, 0xff, 0xe9, 0xc3, 0x9f, 0x50, 0x5b, 0xe9, 0x12, 0x00, 0xed, 0xe9, 0x25, 0xe0,
|
||||
0x25, 0xe0, 0x24, 0x60, 0xf8, 0xe2, 0x2f, 0xf5, 0x32, 0x18, 0xe2, 0x3e, 0xf5, 0x31, 0x12, 0x03,
|
||||
0x55, 0x78, 0x4f, 0xe6, 0xfc, 0x08, 0xe6, 0xfd, 0xef, 0x2d, 0xfb, 0xee, 0x3c, 0xfa, 0xd3, 0xe5,
|
||||
0x32, 0x9b, 0xe5, 0x31, 0x9a, 0x40, 0x06, 0x75, 0x30, 0x01, 0x18, 0x80, 0x1d, 0xe5, 0x32, 0x2f,
|
||||
0xff, 0xe5, 0x31, 0x3e, 0xfe, 0xd3, 0xed, 0x9f, 0xec, 0x9e, 0x40, 0x15, 0xe5, 0x30, 0x60, 0x08,
|
||||
0xe4, 0xf5, 0x30, 0x12, 0x31, 0xf6, 0x05, 0x2e, 0x78, 0x4f, 0xa6, 0x31, 0x08, 0xa6, 0x32, 0x89,
|
||||
0x2f, 0x09, 0x80, 0x9c, 0xe5, 0x30, 0x60, 0x03, 0x12, 0x31, 0xf6, 0x22, 0xe4, 0xfb, 0x12, 0x03,
|
||||
0x71, 0xfa, 0xf4, 0x60, 0x62, 0xea, 0x70, 0x0c, 0x12, 0x00, 0x60, 0x74, 0x11, 0x93, 0xf5, 0x2e,
|
||||
0x74, 0x12, 0x80, 0x1d, 0x78, 0x67, 0xe6, 0x14, 0xb5, 0x02, 0x0c, 0x12, 0x00, 0x60, 0x74, 0x13,
|
||||
0x93, 0xf5, 0x2e, 0x74, 0x14, 0x80, 0x0a, 0x12, 0x00, 0x60, 0x74, 0x0f, 0x93, 0xf5, 0x2e, 0x74,
|
||||
0x10, 0x93, 0xf5, 0x2f, 0x78, 0x0d, 0xe2, 0x70, 0x05, 0x78, 0x3c, 0xe2, 0x60, 0x0e, 0xe5, 0x2f,
|
||||
0x25, 0xe0, 0xff, 0xe5, 0x2e, 0x12, 0x05, 0xde, 0x8e, 0x2e, 0x8f, 0x2f, 0xea, 0x12, 0x00, 0xed,
|
||||
0xea, 0x25, 0xe0, 0x12, 0x02, 0xd8, 0xc3, 0xef, 0x95, 0x2f, 0xee, 0x95, 0x2e, 0x50, 0x08, 0xeb,
|
||||
0x25, 0xe0, 0x24, 0x68, 0xf8, 0x76, 0xff, 0x0b, 0xeb, 0x64, 0x02, 0x70, 0x91, 0x78, 0x68, 0xe6,
|
||||
0xb4, 0xff, 0x0a, 0x78, 0x6a, 0xe6, 0xff, 0xf4, 0x60, 0x03, 0x12, 0x01, 0x97, 0x22, 0xef, 0x54,
|
||||
0x07, 0xfe, 0x74, 0x01, 0xa8, 0x06, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf9, 0xf4, 0xfe,
|
||||
0xef, 0x54, 0xf0, 0xf5, 0x3e, 0x64, 0x10, 0x70, 0x1e, 0xbd, 0x08, 0x02, 0x7d, 0x02, 0x90, 0xff,
|
||||
0x12, 0xed, 0x30, 0xe2, 0x05, 0xe0, 0x49, 0xf0, 0x80, 0x03, 0xe0, 0x5e, 0xf0, 0xe5, 0x82, 0x15,
|
||||
0x82, 0x70, 0x14, 0x15, 0x83, 0x80, 0x10, 0xe5, 0x3e, 0x13, 0x13, 0x54, 0x3f, 0x24, 0x11, 0xfb,
|
||||
0xe4, 0x34, 0xff, 0xf5, 0x83, 0x8b, 0x82, 0xed, 0x24, 0xfb, 0x60, 0x14, 0x14, 0x60, 0x20, 0x24,
|
||||
0xfe, 0x70, 0x2a, 0xe0, 0x5e, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x1e, 0x15, 0x83, 0x80, 0x1a,
|
||||
0xe0, 0x5e, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xe0, 0x49, 0xf0, 0x22, 0xe0,
|
||||
0x49, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xe0, 0x5e, 0xf0, 0x22, 0xc0, 0xe0,
|
||||
0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x10, 0x78, 0x40, 0xa6, 0xa3, 0x08, 0xa6, 0xa6,
|
||||
0x75, 0xa3, 0x08, 0xe6, 0xff, 0x30, 0xe4, 0x07, 0x75, 0xd1, 0xdf, 0x78, 0x72, 0x76, 0x00, 0x78,
|
||||
0x40, 0xe6, 0x30, 0xe0, 0x40, 0xef, 0x20, 0xe0, 0x39, 0x78, 0x72, 0xe6, 0xff, 0x70, 0x18, 0x90,
|
||||
0x02, 0xf8, 0xe0, 0xfe, 0xf5, 0xd6, 0x18, 0xee, 0xf6, 0xc3, 0x94, 0x10, 0x50, 0x24, 0x78, 0x73,
|
||||
0xe6, 0x25, 0xd6, 0xf5, 0xd6, 0x80, 0x1b, 0x74, 0xf8, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5,
|
||||
0x83, 0xe0, 0xff, 0x78, 0x71, 0xe6, 0x06, 0x25, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x08, 0xf5, 0x83,
|
||||
0xef, 0xf0, 0x78, 0x72, 0x06, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32, 0xab, 0x07,
|
||||
0xaa, 0x05, 0xe4, 0x78, 0x62, 0xf6, 0xeb, 0x12, 0x14, 0xee, 0xe0, 0xf5, 0x29, 0xa3, 0xe0, 0xf5,
|
||||
0x2a, 0x78, 0x5d, 0xe6, 0x75, 0x27, 0x00, 0xf5, 0x28, 0xae, 0x27, 0xff, 0x7c, 0x00, 0x7d, 0xfc,
|
||||
0x12, 0x0d, 0x08, 0xd3, 0xe5, 0x2a, 0x9f, 0xe5, 0x29, 0x9e, 0x40, 0x06, 0x78, 0x62, 0xe6, 0x44,
|
||||
0x20, 0xf6, 0x12, 0x14, 0xd2, 0x74, 0x05, 0x93, 0x25, 0xe0, 0xf5, 0x2a, 0x74, 0x04, 0x93, 0x33,
|
||||
0xf5, 0x29, 0xeb, 0x12, 0x15, 0x27, 0xe0, 0xfe, 0xa3, 0xe0, 0x25, 0x2a, 0xff, 0xe5, 0x29, 0x3e,
|
||||
0xfe, 0xeb, 0x12, 0x14, 0xee, 0xe0, 0xfc, 0xa3, 0xe0, 0xd3, 0x9f, 0xec, 0x9e, 0x40, 0x09, 0x78,
|
||||
0x62, 0xe6, 0x44, 0x02, 0xf6, 0x44, 0x08, 0xf6, 0x0b, 0x1a, 0xea, 0x70, 0x99, 0x22, 0xe4, 0xf5,
|
||||
0x1c, 0x78, 0x1d, 0x7c, 0x00, 0xfd, 0x7b, 0xff, 0x7a, 0x39, 0x79, 0xf6, 0xfe, 0x7f, 0x02, 0x12,
|
||||
0x0c, 0x68, 0x75, 0x22, 0x01, 0x75, 0x23, 0x00, 0x75, 0x24, 0xc4, 0x7b, 0x00, 0x7a, 0x00, 0x79,
|
||||
0x1d, 0x12, 0x25, 0x87, 0xe5, 0x1d, 0xf4, 0x60, 0x14, 0x90, 0x00, 0xc4, 0x12, 0x31, 0xce, 0x40,
|
||||
0x09, 0xd3, 0xef, 0x94, 0xb8, 0xee, 0x94, 0x0b, 0x40, 0x03, 0x75, 0x1c, 0x01, 0xe5, 0x1e, 0xf4,
|
||||
0x60, 0x14, 0x90, 0x00, 0xc6, 0x12, 0x31, 0xce, 0x40, 0x09, 0xd3, 0xef, 0x94, 0xb8, 0xee, 0x94,
|
||||
0x0b, 0x40, 0x03, 0x75, 0x1c, 0x01, 0x78, 0xb0, 0x7c, 0x01, 0x7d, 0x01, 0x7b, 0x01, 0x7a, 0x00,
|
||||
0x79, 0xc4, 0x7e, 0x00, 0x7f, 0x04, 0x12, 0x0c, 0x68, 0xaf, 0x1c, 0x22, 0x12, 0x04, 0xd6, 0x60,
|
||||
0x11, 0xa8, 0x07, 0xe8, 0x24, 0x0b, 0xf8, 0xe2, 0x7f, 0x80, 0x60, 0x02, 0x7f, 0x08, 0x8f, 0x22,
|
||||
0x80, 0x1e, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x0b, 0xf8, 0xe2, 0x60, 0x11, 0xa8, 0x07, 0xe8, 0x24,
|
||||
0x0f, 0xf8, 0xe2, 0x7f, 0x04, 0x60, 0x02, 0x7f, 0x08, 0x8f, 0x22, 0x80, 0x03, 0xe4, 0xf5, 0x22,
|
||||
0xe5, 0x22, 0xb4, 0x04, 0x0f, 0x12, 0x03, 0x64, 0x04, 0x12, 0x00, 0xe0, 0x78, 0x66, 0xe6, 0x24,
|
||||
0x05, 0xf8, 0xe4, 0xf2, 0x78, 0x66, 0xe6, 0xff, 0x24, 0x06, 0xf8, 0xe5, 0x22, 0xf2, 0xef, 0x04,
|
||||
0x12, 0x03, 0x6a, 0x24, 0x07, 0xf8, 0x7c, 0x00, 0x7d, 0xfe, 0x7e, 0x00, 0x7f, 0x06, 0x02, 0x0c,
|
||||
0x68, 0xef, 0x54, 0x07, 0x90, 0x39, 0xee, 0x93, 0xfe, 0xf4, 0xf9, 0xef, 0x54, 0xf0, 0xff, 0x64,
|
||||
0x10, 0x60, 0x11, 0xef, 0x13, 0x13, 0x54, 0x3f, 0x24, 0x11, 0xf5, 0x82, 0xe4, 0x34, 0xff, 0xfa,
|
||||
0xab, 0x82, 0x80, 0x1a, 0xbd, 0x08, 0x02, 0x7d, 0x02, 0x7a, 0xff, 0x7b, 0x12, 0xed, 0x30, 0xe2,
|
||||
0x05, 0x12, 0x35, 0xcd, 0x80, 0x03, 0x12, 0x35, 0xd5, 0xeb, 0x1b, 0x70, 0x01, 0x1a, 0xed, 0x30,
|
||||
0xe1, 0x05, 0x12, 0x35, 0xcd, 0x80, 0x03, 0x12, 0x35, 0xd5, 0xeb, 0x1b, 0x70, 0x01, 0x1a, 0xed,
|
||||
0x30, 0xe0, 0x04, 0x12, 0x35, 0xcd, 0x22, 0x12, 0x35, 0xd5, 0x22, 0x78, 0x63, 0xe6, 0xff, 0x78,
|
||||
0x63, 0xe6, 0x60, 0x29, 0xe5, 0x89, 0x30, 0xe7, 0x08, 0x12, 0x14, 0x84, 0x50, 0x03, 0xe0, 0x04,
|
||||
0xf0, 0x12, 0x16, 0x4e, 0x30, 0xe7, 0x08, 0x12, 0x14, 0x84, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x78,
|
||||
0x63, 0xe6, 0x6f, 0x60, 0xda, 0xe6, 0xff, 0x12, 0x15, 0xe4, 0xf0, 0x80, 0xd2, 0xe4, 0xff, 0x78,
|
||||
0x65, 0xe6, 0xfe, 0xef, 0xc3, 0x9e, 0x50, 0x14, 0x12, 0x15, 0x7c, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd,
|
||||
0xef, 0x12, 0x14, 0xee, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0x0f, 0x80, 0xe3, 0x22, 0x8f, 0x2d, 0xe4,
|
||||
0xfd, 0x7f, 0x12, 0x12, 0x32, 0xcc, 0xaf, 0x2d, 0x15, 0x2d, 0xef, 0x60, 0x38, 0x75, 0xb1, 0x11,
|
||||
0x75, 0xb4, 0x63, 0x75, 0xb0, 0x0d, 0xe5, 0xb1, 0x20, 0xe0, 0x22, 0xe5, 0x89, 0x30, 0xe7, 0x08,
|
||||
0x12, 0x2b, 0x86, 0x50, 0x03, 0xe0, 0x04, 0xf0, 0x75, 0x91, 0xc1, 0xe4, 0xf5, 0x91, 0xe5, 0x89,
|
||||
0x30, 0xe7, 0xe3, 0x12, 0x2b, 0x86, 0x50, 0xde, 0xe0, 0x04, 0xf0, 0x80, 0xd9, 0xe4, 0xf5, 0xb0,
|
||||
0x75, 0xb1, 0x01, 0x80, 0xc1, 0x7d, 0x01, 0x7f, 0x12, 0x02, 0x32, 0xcc, 0x85, 0x0b, 0x82, 0x85,
|
||||
0x0a, 0x83, 0x22, 0x75, 0x89, 0x80, 0x90, 0x00, 0xc3, 0xe0, 0xc3, 0x94, 0xff, 0x22, 0x75, 0x8a,
|
||||
0xa0, 0xe4, 0x90, 0x00, 0xc0, 0xf0, 0x22, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x43, 0x22, 0xe0, 0xfe,
|
||||
0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x78, 0xee, 0x94, 0x00, 0x22, 0xe4, 0x93, 0xff, 0x7e, 0x00, 0x7c,
|
||||
0x00, 0x02, 0x0d, 0x08, 0xe4, 0x78, 0x88, 0xf2, 0x08, 0xf2, 0x90, 0x00, 0xc8, 0xf0, 0x22, 0xab,
|
||||
0x25, 0xaa, 0x26, 0xa9, 0x27, 0x22, 0x78, 0x4f, 0xe6, 0xfa, 0x08, 0xe6, 0xfb, 0xad, 0x2f, 0xaf,
|
||||
0x2e, 0xef, 0xc3, 0x94, 0x02, 0x50, 0x0e, 0xef, 0x25, 0xe0, 0x24, 0x68, 0xf8, 0xa6, 0x05, 0xef,
|
||||
0x12, 0x01, 0xe3, 0x80, 0x24, 0xc3, 0x90, 0x00, 0xb6, 0xe0, 0x9b, 0x90, 0x00, 0xb5, 0xe0, 0x9a,
|
||||
0x50, 0x06, 0x78, 0x68, 0xa6, 0x05, 0x80, 0x11, 0xc3, 0x90, 0x00, 0xb8, 0xe0, 0x9b, 0x90, 0x00,
|
||||
0xb7, 0xe0, 0x9a, 0x50, 0x09, 0x78, 0x6a, 0xa6, 0x05, 0xea, 0xf0, 0xa3, 0xeb, 0xf0, 0x22, 0xc0,
|
||||
0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x01,
|
||||
0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x16, 0x96, 0x12,
|
||||
0x00, 0x0a, 0x7b, 0xff, 0x7a, 0x2e, 0x79, 0x7e, 0x12, 0x27, 0xf2, 0xd0, 0x07, 0xd0, 0x06, 0xd0,
|
||||
0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0,
|
||||
0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0x8f, 0x2a, 0x8d, 0x2b, 0xe5, 0x2b, 0x75, 0xf0, 0x2f, 0xa4,
|
||||
0x24, 0x0a, 0x12, 0x00, 0xf3, 0xe5, 0x2a, 0x12, 0x05, 0x17, 0x12, 0x32, 0xbd, 0xc0, 0x06, 0xc0,
|
||||
0x07, 0xe5, 0x2b, 0x75, 0xf0, 0x2f, 0xa4, 0x24, 0x08, 0x12, 0x00, 0xf3, 0xe5, 0x2a, 0x12, 0x05,
|
||||
0xb8, 0x12, 0x32, 0xbd, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x22, 0xf8, 0xe2, 0xfc,
|
||||
0x08, 0xe2, 0xc3, 0x9f, 0xff, 0xec, 0x9e, 0xfe, 0x12, 0x39, 0xa3, 0x22, 0x12, 0x35, 0xbd, 0x60,
|
||||
0x3e, 0xee, 0x64, 0x01, 0x70, 0x18, 0xed, 0x60, 0x07, 0x78, 0x74, 0xe6, 0x4c, 0xf6, 0x80, 0x06,
|
||||
0xec, 0xf4, 0x78, 0x74, 0x56, 0xf6, 0x78, 0x74, 0xe6, 0x90, 0xff, 0x18, 0xf0, 0x22, 0xaf, 0x06,
|
||||
0xef, 0x75, 0xf0, 0x04, 0xa4, 0x24, 0x12, 0xff, 0xe5, 0xf0, 0x34, 0xff, 0x8f, 0x82, 0xf5, 0x83,
|
||||
0xed, 0x60, 0x04, 0xe0, 0x4c, 0xf0, 0x22, 0xe0, 0xff, 0xec, 0xf4, 0xfe, 0xef, 0x5e, 0xf0, 0x22,
|
||||
0xc2, 0xd5, 0xe8, 0x30, 0xe7, 0x0f, 0xb2, 0xd5, 0xe4, 0xc3, 0x9b, 0xfb, 0xe4, 0x9a, 0xfa, 0xe4,
|
||||
0x99, 0xf9, 0xe4, 0x98, 0xf8, 0xec, 0x30, 0xe7, 0x17, 0xb2, 0xd5, 0x12, 0x33, 0x46, 0x12, 0x0f,
|
||||
0x42, 0xe4, 0xc3, 0x9b, 0xfb, 0xe4, 0x9a, 0xfa, 0xe4, 0x99, 0xf9, 0xe4, 0x98, 0xf8, 0x80, 0x03,
|
||||
0x12, 0x0f, 0x42, 0x30, 0xd5, 0x0d, 0xe4, 0xc3, 0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0xe4, 0x9d, 0xfd,
|
||||
0xe4, 0x9c, 0xfc, 0x22, 0x12, 0x0c, 0xe6, 0xab, 0x1c, 0xe5, 0x1e, 0x24, 0x0c, 0xf9, 0xe4, 0x35,
|
||||
0x1d, 0xfa, 0x7e, 0x00, 0xe9, 0x25, 0x25, 0xf9, 0xee, 0x3a, 0xfa, 0x12, 0x0c, 0x8e, 0xff, 0x22,
|
||||
0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e, 0x90, 0x00, 0x0b, 0x12, 0x0c, 0xa7, 0xff, 0x22, 0x75, 0x8a,
|
||||
0xa0, 0xe4, 0x90, 0x00, 0xc0, 0xf0, 0x22, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0x85, 0x25, 0x82,
|
||||
0x75, 0x83, 0x00, 0x22, 0x8c, 0x08, 0x8d, 0x09, 0x12, 0x39, 0x5a, 0x44, 0x18, 0x12, 0x39, 0x51,
|
||||
0x90, 0xff, 0x14, 0xe0, 0x44, 0x18, 0xf0, 0x90, 0xff, 0x1b, 0xe0, 0x44, 0x18, 0xf0, 0x75, 0xa3,
|
||||
0x08, 0xef, 0x44, 0x80, 0xf5, 0xa1, 0x75, 0xa6, 0x28, 0x75, 0xa2, 0xc1, 0xaf, 0x09, 0x85, 0x08,
|
||||
0xd7, 0x8f, 0xd6, 0x75, 0xd5, 0x02, 0x75, 0xd4, 0xf8, 0x75, 0xd2, 0x01, 0x75, 0xd1, 0xdf, 0x53,
|
||||
0xac, 0xef, 0x22, 0xc2, 0xaf, 0x12, 0x35, 0x07, 0xe5, 0x9b, 0xb4, 0x5a, 0x16, 0xe5, 0x9a, 0xb4,
|
||||
0xa5, 0x11, 0xe5, 0x99, 0xb4, 0xf0, 0x0c, 0xe5, 0x98, 0xb4, 0x0f, 0x07, 0x90, 0xff, 0x85, 0xe0,
|
||||
0x44, 0x20, 0xf0, 0x75, 0x8a, 0x0a, 0xd2, 0xaf, 0x7f, 0x0a, 0x12, 0x34, 0x46, 0x12, 0x39, 0x7a,
|
||||
0x12, 0x10, 0xc4, 0x75, 0x8a, 0xa0, 0xe4, 0x90, 0x00, 0xc0, 0xf0, 0x80, 0xf3, 0xad, 0x07, 0x7f,
|
||||
0x3a, 0x12, 0x35, 0xdd, 0x90, 0x00, 0xc1, 0xe4, 0xf0, 0xa3, 0xef, 0xf0, 0x7f, 0x3b, 0x12, 0x35,
|
||||
0xdd, 0xef, 0xfb, 0x7a, 0x00, 0x90, 0x00, 0xc2, 0xe0, 0xfe, 0xe4, 0x2b, 0xff, 0xea, 0x3e, 0x90,
|
||||
0x00, 0xc1, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x00, 0xc1, 0xe0, 0xb4, 0x80, 0x08, 0xa3, 0xe0, 0xb4,
|
||||
0x67, 0x03, 0xbd, 0xb6, 0xf1, 0x22, 0xe4, 0x90, 0x00, 0xc0, 0xf0, 0x90, 0x00, 0xc3, 0xf0, 0xef,
|
||||
0x70, 0x0e, 0x75, 0x88, 0x08, 0xf5, 0x8d, 0xf5, 0x8c, 0xf5, 0x8f, 0xf5, 0x8e, 0xf5, 0x88, 0x22,
|
||||
0x75, 0x88, 0x08, 0xe4, 0xf5, 0x8d, 0xf5, 0x8c, 0xef, 0x75, 0xf0, 0x20, 0xa4, 0xff, 0xe5, 0xf0,
|
||||
0x44, 0x80, 0xf5, 0x8f, 0x8f, 0x8e, 0x75, 0x88, 0xa0, 0x22, 0xe4, 0xf5, 0x3c, 0xf5, 0x3d, 0xff,
|
||||
0x12, 0x0c, 0x8e, 0x25, 0x3d, 0xf5, 0x3d, 0xe4, 0x35, 0x3c, 0xf5, 0x3c, 0x90, 0xff, 0xff, 0x12,
|
||||
0x0c, 0xa7, 0x12, 0x0c, 0xd4, 0x74, 0xff, 0x29, 0xf9, 0x74, 0xff, 0x3a, 0xfa, 0x0f, 0xbf, 0x09,
|
||||
0xdf, 0xed, 0x12, 0x0c, 0xd4, 0xae, 0x3c, 0xaf, 0x3d, 0x22, 0x12, 0x35, 0xbd, 0x60, 0x29, 0x90,
|
||||
0xff, 0x13, 0xee, 0xd3, 0x94, 0x03, 0x40, 0x11, 0xaf, 0x06, 0xef, 0x75, 0xf0, 0x04, 0xa4, 0x25,
|
||||
0x82, 0xf5, 0x82, 0xe5, 0xf0, 0x35, 0x83, 0xf5, 0x83, 0xed, 0x60, 0x04, 0xe0, 0x4c, 0xf0, 0x22,
|
||||
0xe0, 0xff, 0xec, 0xf4, 0xfe, 0xef, 0x5e, 0xf0, 0x22, 0x85, 0x21, 0x82, 0x85, 0x20, 0x83, 0x22,
|
||||
0xab, 0x1c, 0xaa, 0x1d, 0xa9, 0x1e, 0x12, 0x0d, 0xbb, 0xff, 0x22, 0xab, 0x1c, 0xaa, 0x1d, 0xa9,
|
||||
0x1e, 0x90, 0x00, 0x02, 0x12, 0x0d, 0xe6, 0xff, 0x22, 0x93, 0xfd, 0xd3, 0x90, 0x00, 0xbe, 0xe0,
|
||||
0x9d, 0x90, 0x00, 0xbd, 0xe0, 0x9c, 0x22, 0x75, 0x9b, 0x5a, 0x75, 0x9a, 0xa5, 0x75, 0x99, 0xf0,
|
||||
0x75, 0x98, 0x0f, 0x75, 0xac, 0xff, 0x75, 0xad, 0xff, 0x90, 0xff, 0x88, 0x74, 0x40, 0xf0, 0x74,
|
||||
0xc0, 0xf0, 0x90, 0xff, 0x01, 0x74, 0x01, 0xf0, 0x75, 0x95, 0xf1, 0xe4, 0xf5, 0x96, 0x75, 0x97,
|
||||
0xc7, 0x22, 0xef, 0x60, 0x0f, 0x43, 0xac, 0x10, 0x12, 0x39, 0x5a, 0x54, 0xe7, 0x12, 0x39, 0x51,
|
||||
0xe4, 0xf5, 0xa2, 0x22, 0x12, 0x39, 0x52, 0xa3, 0xe0, 0x44, 0x18, 0xf0, 0xa3, 0xe0, 0x54, 0xe7,
|
||||
0xf0, 0x75, 0xa2, 0xc1, 0x53, 0xac, 0xef, 0x22, 0xc3, 0xef, 0x94, 0x01, 0xee, 0x64, 0x80, 0x94,
|
||||
0x80, 0x50, 0x06, 0x7e, 0x00, 0x7f, 0x01, 0x80, 0x11, 0xd3, 0xef, 0x9d, 0xee, 0x9c, 0x40, 0x0a,
|
||||
0xed, 0x24, 0xff, 0xff, 0xec, 0x34, 0xff, 0xfe, 0x80, 0x00, 0x22, 0xe4, 0x78, 0x6d, 0xf6, 0x8f,
|
||||
0x82, 0x8e, 0x83, 0x74, 0x55, 0x93, 0x78, 0x67, 0xf6, 0xef, 0x24, 0x55, 0xf5, 0x0f, 0xe4, 0x3e,
|
||||
0xf5, 0x0e, 0x78, 0x00, 0xe2, 0x54, 0xfe, 0xf2, 0x54, 0xfb, 0xf2, 0x22, 0xab, 0x1f, 0xaa, 0x20,
|
||||
0xa9, 0x21, 0x90, 0x00, 0x01, 0x12, 0x0c, 0xa7, 0xff, 0x22, 0x90, 0xff, 0x50, 0xf0, 0x90, 0xff,
|
||||
0x58, 0xf0, 0xab, 0x1f, 0xaa, 0x20, 0xa9, 0x21, 0x12, 0x0c, 0x8e, 0xff, 0x22, 0xef, 0x54, 0x07,
|
||||
0x90, 0x39, 0xee, 0x93, 0xfc, 0xef, 0xc4, 0x54, 0x0f, 0xfe, 0xef, 0xf4, 0x22, 0x8b, 0x82, 0x8a,
|
||||
0x83, 0xe0, 0x4e, 0xf0, 0x22, 0x8b, 0x82, 0x8a, 0x83, 0xe0, 0x59, 0xf0, 0x22, 0x90, 0xff, 0x00,
|
||||
0x74, 0x02, 0xf0, 0x90, 0xff, 0x04, 0xe4, 0xf0, 0x90, 0xff, 0x03, 0xef, 0xf0, 0x90, 0xff, 0x07,
|
||||
0xe0, 0xff, 0x22, 0x85, 0x1e, 0x82, 0x85, 0x1d, 0x83, 0x75, 0xf0, 0x07, 0xef, 0x02, 0x10, 0x59,
|
||||
0xb6, 0x11, 0x01, 0x0a, 0x14, 0x01, 0x02, 0x05, 0x3c, 0x70, 0x00, 0x00, 0x15, 0x00, 0x02, 0x01,
|
||||
0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00, 0x00, 0x03, 0x0a, 0x00, 0xc8, 0x03, 0xe8, 0x0f, 0x1e, 0x0a, 0x10, 0x3c, 0x01, 0x00, 0x50,
|
||||
0x44, 0x41, 0x45, 0x51, 0x46, 0x52, 0x56, 0x53, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x28,
|
||||
0x05, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x64, 0x1e, 0x90, 0x01, 0x00, 0x08, 0x08, 0x85, 0x00, 0xc8,
|
||||
0x00, 0x14, 0x02, 0x58, 0x09, 0x09, 0x85, 0x00, 0xc8, 0x00, 0x28, 0x02, 0x58, 0x0a, 0x02, 0x85,
|
||||
0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x05,
|
||||
0x00, 0xef, 0x00, 0xef, 0x00, 0x46, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c,
|
||||
0x01, 0x2c, 0x01, 0x2c, 0x05, 0x01, 0x0a, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x9c,
|
||||
0x00, 0x0a, 0x14, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x00, 0x01, 0x08, 0x09, 0x01, 0x2c,
|
||||
0x04, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x10, 0x3c, 0x01, 0x00, 0x50, 0x44, 0x41, 0x45,
|
||||
0x51, 0x46, 0x52, 0x56, 0x53, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x28, 0x05, 0x0b, 0x28,
|
||||
0xff, 0xff, 0xff, 0x64, 0x1e, 0x90, 0x01, 0x00, 0x08, 0x08, 0x85, 0x00, 0xc8, 0x00, 0x14, 0x02,
|
||||
0x58, 0x09, 0x09, 0x85, 0x00, 0xc8, 0x00, 0x28, 0x02, 0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00,
|
||||
0x3c, 0x02, 0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x05, 0x00, 0xf0, 0x00,
|
||||
0xf0, 0x00, 0x46, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x01,
|
||||
0x2c, 0x05, 0x01, 0x0a, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x9c, 0x00, 0x0a, 0x14,
|
||||
0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x00, 0x01, 0x08, 0x09, 0x01, 0x2c, 0x04, 0x02, 0x03,
|
||||
0x07, 0x06, 0x01, 0x2c, 0x04, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x05, 0x0a, 0x10, 0x3c, 0x01, 0x00, 0x50, 0x44, 0x41, 0x45, 0x51, 0x46, 0x52,
|
||||
0x56, 0x53, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e,
|
||||
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x28, 0x05, 0x0b, 0x28, 0xff, 0xff, 0xff,
|
||||
0x64, 0x1e, 0x90, 0x01, 0x00, 0x08, 0x08, 0x85, 0x00, 0xc8, 0x00, 0x14, 0x02, 0x58, 0x09, 0x09,
|
||||
0x85, 0x00, 0xc8, 0x00, 0x28, 0x02, 0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58,
|
||||
0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x05, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x46,
|
||||
0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x01, 0x2c, 0x05, 0x01,
|
||||
0x0a, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x9c, 0x00, 0x0a, 0x14, 0x02, 0x03, 0x07,
|
||||
0x06, 0x01, 0x2c, 0x04, 0x00, 0x01, 0x08, 0x09, 0x01, 0x2c, 0x04, 0x02, 0x03, 0x07, 0x06, 0x01,
|
||||
0x2c, 0x04, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x05, 0x0a, 0x10, 0x3c, 0x01, 0x00, 0x50, 0x44, 0x41, 0x45, 0x51, 0x46, 0x52, 0x56, 0x53, 0x55,
|
||||
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
|
||||
0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x28, 0x05, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x64, 0x1e, 0x90,
|
||||
0x01, 0x00, 0x08, 0x08, 0x85, 0x00, 0xc8, 0x00, 0x14, 0x02, 0x58, 0x09, 0x09, 0x85, 0x00, 0xc8,
|
||||
0x00, 0x28, 0x02, 0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x0a, 0x02, 0x85,
|
||||
0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x05, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x46, 0x00, 0x46, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x01, 0x2c, 0x05, 0x01, 0x0a, 0x01, 0x04,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x9c, 0x00, 0x0a, 0x14, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c,
|
||||
0x04, 0x00, 0x01, 0x08, 0x09, 0x01, 0x2c, 0x04, 0x02, 0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x02,
|
||||
0x03, 0x07, 0x06, 0x01, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0e, 0x10,
|
||||
0x3c, 0x01, 0x00, 0x64, 0x10, 0x41, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x46, 0x45, 0x44, 0x43,
|
||||
0x17, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
|
||||
0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xa0, 0x22, 0x90, 0x00, 0x00, 0x08,
|
||||
0x08, 0x85, 0x00, 0xc8, 0x00, 0x14, 0x02, 0x58, 0x09, 0x09, 0x85, 0x00, 0xc8, 0x00, 0x28, 0x02,
|
||||
0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00, 0x3c, 0x02, 0x58, 0x0a, 0x02, 0x85, 0x00, 0xc8, 0x00,
|
||||
0x3c, 0x02, 0x58, 0x07, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x01, 0x2c, 0x05, 0x01, 0x0a, 0x01, 0x04, 0x00, 0x00, 0x00,
|
||||
0x00, 0x02, 0x08, 0xfa, 0x00, 0x64, 0x14, 0x02, 0x03, 0x0b, 0x0a, 0x00, 0xc8, 0x04, 0x00, 0x01,
|
||||
0x0c, 0x0d, 0x00, 0x96, 0x04, 0x02, 0x03, 0x0b, 0x0a, 0x00, 0xc8, 0x04, 0x02, 0x03, 0x0b, 0x0a,
|
||||
0x00, 0xc8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xe4, 0x90, 0x00, 0xcd, 0xf0,
|
||||
0x8f, 0x82, 0x8e, 0x83, 0x74, 0x23, 0x93, 0xff, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x00, 0xcc, 0xf0,
|
||||
0x22, 0xf0, 0x90, 0xff, 0x10, 0xe0, 0x54, 0xe7, 0xf0, 0x22, 0x90, 0xff, 0x12, 0xe0, 0x54, 0xe7,
|
||||
0xf0, 0x90, 0xff, 0x11, 0xe0, 0x22, 0xef, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0x03, 0xf5, 0x82, 0xe4,
|
||||
0x34, 0x02, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x22, 0x12, 0x2c, 0x4b, 0x78, 0x6f, 0x76,
|
||||
0x00, 0x08, 0x76, 0x28, 0x90, 0x00, 0xc9, 0x74, 0x04, 0xf0, 0x22, 0x8d, 0x22, 0xaf, 0x22, 0x12,
|
||||
0x24, 0x44, 0xaf, 0x22, 0x02, 0x16, 0xc9, 0xef, 0x25, 0xe0, 0x24, 0x5f, 0xf8, 0xe2, 0xfe, 0x08,
|
||||
0xe2, 0xff, 0x22, 0xee, 0x30, 0xe7, 0x07, 0xc3, 0xe4, 0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0x22, 0x12,
|
||||
0x31, 0xac, 0x74, 0x78, 0x93, 0xfd, 0x02, 0x05, 0xfc, 0x7f, 0x30, 0x12, 0x35, 0xdd, 0x22, 0x41,
|
||||
0x00, 0xc8, 0x00, 0x00, 0x78, 0x61, 0xa6, 0x07, 0x22, 0x12, 0x39, 0x66, 0x22, 0x7f, 0x00, 0x22,
|
||||
0x11, 0x10, 0x41, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x46, 0x45, 0x44, 0x43, 0x17, 0x16, 0x11,
|
||||
0x40, 0x41, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x46, 0x45, 0x44, 0x43, 0x42, 0x16, 0x01, 0x02,
|
||||
0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x11, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xb6, 0x02, 0x30, 0x21, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x56,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
2049
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst92xx_fw.h
Normal file
2049
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/cst92xx_fw.h
Normal file
File diff suppressed because it is too large
Load Diff
432
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst1xx.c
Normal file
432
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst1xx.c
Normal file
@@ -0,0 +1,432 @@
|
||||
#include "../hyn_core.h"
|
||||
#include "cst1xx_fw.h"
|
||||
|
||||
|
||||
#define BOOT_I2C_ADDR (0x1A)
|
||||
#define MAIN_I2C_ADDR (0x1A)
|
||||
|
||||
#define RW_REG_LEN (2)
|
||||
|
||||
#define CST1XX_BIN_SIZE (24*1024 + 24)
|
||||
|
||||
static struct hyn_ts_data *hyn_1xxdata = NULL;
|
||||
static const u8 gest_map_tbl[33] = {0xff,4,1,3,2,5,12,6,7,7,9,11,10,13,12,7,7,6,10,6,5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,14};
|
||||
|
||||
static int cst1xx_updata_judge(u8 *p_fw, u16 len);
|
||||
static u32 cst1xx_read_checksum(void);
|
||||
static int cst1xx_updata_tpinfo(void);
|
||||
static int cst1xx_enter_boot(void);
|
||||
static int cst1xx_set_workmode(enum work_mode mode,u8 enable);
|
||||
static void cst1xx_rst(void);
|
||||
|
||||
static int cst1xx_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[4];
|
||||
HYN_ENTER();
|
||||
hyn_1xxdata = ts_data;
|
||||
ret = cst1xx_enter_boot();
|
||||
if(ret){
|
||||
HYN_ERROR("cst1xx_enter_boot failed");
|
||||
return -1;
|
||||
}
|
||||
hyn_1xxdata->fw_updata_addr = (u8*)fw_bin;
|
||||
hyn_1xxdata->fw_updata_len = CST1XX_BIN_SIZE;
|
||||
hyn_1xxdata->hw_info.ic_fw_checksum = cst1xx_read_checksum();
|
||||
if(hyn_1xxdata->need_updata_fw ==0){
|
||||
hyn_wr_reg(hyn_1xxdata,0xA006EE,3,buf,0); //exit boot
|
||||
cst1xx_rst();
|
||||
mdelay(50);
|
||||
hyn_set_i2c_addr(hyn_1xxdata,MAIN_I2C_ADDR);
|
||||
ret = cst1xx_updata_tpinfo();
|
||||
cst1xx_set_workmode(NOMAL_MODE,0);
|
||||
hyn_1xxdata->need_updata_fw = cst1xx_updata_judge((u8*)fw_bin,CST1XX_BIN_SIZE);
|
||||
}
|
||||
if(hyn_1xxdata->need_updata_fw){
|
||||
HYN_INFO("need updata FW !!!");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst1xx_report(void)
|
||||
{
|
||||
u8 buf[80];
|
||||
u8 finger_num = 0,len = 0,write_tail_end = 0,key_state=0,key_id = 0,tmp_dat;
|
||||
struct hyn_plat_data *dt = &hyn_1xxdata->plat_data;
|
||||
int ret = 0;
|
||||
hyn_1xxdata->rp_buf.report_need = REPORT_NONE;
|
||||
switch(hyn_1xxdata->work_mode){
|
||||
case NOMAL_MODE:
|
||||
write_tail_end = 1;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD000,2,buf,7);
|
||||
if(ret || buf[6] != 0xAB || buf[0] == 0xAB){
|
||||
break;
|
||||
}
|
||||
len = buf[5] & 0x7F;
|
||||
if(len > dt->max_touch_num){
|
||||
len = dt->max_touch_num;
|
||||
}
|
||||
if(buf[5]&0x80){ //key
|
||||
if(buf[5]==0x80){
|
||||
key_id = (buf[1]>>4)-1;
|
||||
key_state = buf[0];
|
||||
}
|
||||
else{
|
||||
finger_num = len;
|
||||
len = (len-1)*5+3;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD007,2,&buf[5],len);
|
||||
len += 5;
|
||||
key_id = (buf[len-2]>>4)-1;
|
||||
key_state = buf[len-3];
|
||||
}
|
||||
if(key_state&0x80){
|
||||
hyn_1xxdata->rp_buf.report_need |= REPORT_KEY;
|
||||
if((key_id == hyn_1xxdata->rp_buf.key_id || 0 == hyn_1xxdata->rp_buf.key_state)&& key_state == 0x83){
|
||||
hyn_1xxdata->rp_buf.key_id = key_id;
|
||||
hyn_1xxdata->rp_buf.key_state = 1;
|
||||
}
|
||||
else{
|
||||
hyn_1xxdata->rp_buf.key_state = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{ //pos
|
||||
u16 index = 0;
|
||||
u8 i = 0;
|
||||
finger_num = len;
|
||||
hyn_1xxdata->rp_buf.report_need |= REPORT_POS;
|
||||
if(finger_num > 1){
|
||||
len = (len-1)*5 + 1;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD007,2,&buf[5],len);
|
||||
}
|
||||
hyn_1xxdata->rp_buf.rep_num = finger_num;
|
||||
for(i = 0; i < finger_num; i++){
|
||||
index = i*5;
|
||||
hyn_1xxdata->rp_buf.pos_info[i].pos_id = (buf[index]>>4)&0x0F;
|
||||
hyn_1xxdata->rp_buf.pos_info[i].event = (buf[index]&0x0F) == 0x06 ? 1 : 0;
|
||||
hyn_1xxdata->rp_buf.pos_info[i].pos_x = ((u16)buf[index + 1]<<4) + ((buf[index + 3] >> 4) & 0x0F);
|
||||
hyn_1xxdata->rp_buf.pos_info[i].pos_y = ((u16)buf[index + 2]<<4) + (buf[index + 3] & 0x0F);
|
||||
hyn_1xxdata->rp_buf.pos_info[i].pres_z = buf[index + 4];
|
||||
// HYN_INFO("report_id = %d, xy = %d,%d",hyn_1xxdata->rp_buf.pos_info[i].pos_id,hyn_1xxdata->rp_buf.pos_info[i].pos_x,hyn_1xxdata->rp_buf.pos_info[i].pos_y);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD04C,2,&tmp_dat,1);
|
||||
if((tmp_dat&0x7F) <= 32){
|
||||
tmp_dat = tmp_dat&0x7F;
|
||||
hyn_1xxdata->gesture_id = gest_map_tbl[tmp_dat];
|
||||
hyn_1xxdata->rp_buf.report_need |= REPORT_GES;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(write_tail_end){
|
||||
hyn_wr_reg(hyn_1xxdata,0xD000AB,3,buf,0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst1xx_prox_handle(u8 cmd)
|
||||
{
|
||||
int ret = 0;
|
||||
switch(cmd){
|
||||
case 1: //enable
|
||||
hyn_1xxdata->prox_is_enable = 1;
|
||||
hyn_1xxdata->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD004B01,3,NULL,0);
|
||||
break;
|
||||
case 0: //disable
|
||||
hyn_1xxdata->prox_is_enable = 0;
|
||||
hyn_1xxdata->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD004B00,3,NULL,0);
|
||||
break;
|
||||
case 2: //read
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD004B,2,&hyn_1xxdata->prox_state,1);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cst1xx_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
hyn_1xxdata->work_mode = mode;
|
||||
if(mode != NOMAL_MODE)
|
||||
hyn_esdcheck_switch(hyn_1xxdata,DISABLE);
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_irq_set(hyn_1xxdata,ENABLE);
|
||||
hyn_esdcheck_switch(hyn_1xxdata,ENABLE);
|
||||
hyn_wr_reg(hyn_1xxdata,0xD100,2,NULL,0);
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
hyn_wr_reg(hyn_1xxdata,0xD04C80,3,NULL,0);
|
||||
break;
|
||||
case LP_MODE:
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
hyn_wr_reg(hyn_1xxdata,0xD10D,2,NULL,0);
|
||||
break;
|
||||
case RAWDATA_MODE:
|
||||
hyn_wr_reg(hyn_1xxdata,0xD10A,2,NULL,0);
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
hyn_wr_reg(hyn_1xxdata,0xD119,2,NULL,0);
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_irq_set(hyn_1xxdata,DISABLE);
|
||||
hyn_wr_reg(hyn_1xxdata,0xD105,2,NULL,0);
|
||||
break;
|
||||
default :
|
||||
hyn_esdcheck_switch(hyn_1xxdata,ENABLE);
|
||||
hyn_1xxdata->work_mode = NOMAL_MODE;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int cst1xx_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst1xx_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst1xx_resum(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst1xx_rst();
|
||||
msleep(50);
|
||||
cst1xx_set_workmode(NOMAL_MODE,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cst1xx_rst(void)
|
||||
{
|
||||
if(hyn_1xxdata->work_mode==ENTER_BOOT_MODE){
|
||||
hyn_set_i2c_addr(hyn_1xxdata,MAIN_I2C_ADDR);
|
||||
}
|
||||
gpio_set_value(hyn_1xxdata->plat_data.reset_gpio,0);
|
||||
msleep(5);
|
||||
gpio_set_value(hyn_1xxdata->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
static int cst1xx_enter_boot(void)
|
||||
{
|
||||
int retry = 5,ret = 0 ,cnt_max = 20;
|
||||
u8 buf[4] = {0};
|
||||
hyn_set_i2c_addr(hyn_1xxdata,BOOT_I2C_ADDR);
|
||||
while(++retry<cnt_max){
|
||||
cst1xx_rst();
|
||||
mdelay(retry);
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA001AA,3,buf,0);
|
||||
if(ret != 0){
|
||||
continue;
|
||||
}
|
||||
if(cnt_max ==20){
|
||||
cnt_max = retry+4;
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA002,2,buf,1);
|
||||
if(ret == 0 && buf[0] == 0x55){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int cst1xx_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[28];
|
||||
struct tp_info *ic = &hyn_1xxdata->hw_info;
|
||||
int ret = 0;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD101,2,buf,0);
|
||||
mdelay(1);
|
||||
ret |= hyn_wr_reg(hyn_1xxdata,0xD1F4,2,buf,28);
|
||||
if(ret){
|
||||
HYN_ERROR("cst1xx_updata_tpinfo failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ic->fw_sensor_txnum = buf[0];
|
||||
ic->fw_sensor_rxnum = buf[2];
|
||||
ic->fw_key_num = buf[3];
|
||||
ic->fw_res_y = (buf[7]<<8)|buf[6];
|
||||
ic->fw_res_x = (buf[5]<<8)|buf[4];
|
||||
ic->fw_project_id = (buf[17]<<8)|buf[16];
|
||||
ic->fw_chip_type = (buf[19]<<8)|buf[18];
|
||||
ic->fw_ver = (buf[23]<<24)|(buf[22]<<16)|(buf[21]<<8)|buf[20];
|
||||
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 cst1xx_read_checksum(void)
|
||||
{
|
||||
int ret;
|
||||
u8 buf[4],retry = 5;
|
||||
while(retry--){
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA000,2,buf,1);
|
||||
if(ret){
|
||||
mdelay(2);
|
||||
continue;
|
||||
}
|
||||
if(buf[0]!=0) break;
|
||||
mdelay(2);
|
||||
}
|
||||
mdelay(1);
|
||||
if(buf[0] == 0x01){
|
||||
memset(buf,0,sizeof(buf));
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA008,2,buf,4);
|
||||
}
|
||||
else{
|
||||
hyn_1xxdata->need_updata_fw = 1;
|
||||
}
|
||||
return buf[0] + (buf[1]<<8) + (buf[2]<<16) + (buf[3]<<24);
|
||||
}
|
||||
|
||||
static int cst1xx_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
u32 f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw + len- 16;
|
||||
struct tp_info *ic = &hyn_1xxdata->hw_info;
|
||||
f_fw_project_id = U8TO16(p_data[1],p_data[0]);
|
||||
f_ictype = U8TO16(p_data[3],p_data[2]);
|
||||
f_fw_ver = U8TO16(p_data[7],p_data[6]);
|
||||
f_fw_ver = (f_fw_ver<<16)|U8TO16(p_data[5],p_data[4]);
|
||||
f_checksum = U8TO16(p_data[11],p_data[10]);
|
||||
f_checksum = (f_checksum << 16)|U8TO16(p_data[9],p_data[8]);
|
||||
HYN_INFO("Bin_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
if(f_ictype != ic->fw_chip_type || f_fw_project_id != ic->fw_project_id){
|
||||
return 0; //not updata
|
||||
}
|
||||
if(f_checksum != ic->ic_fw_checksum && f_fw_ver > ic->fw_ver){
|
||||
return 1; //need updata
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst1xx_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
#define CHECKSUM_OFFECT (24*1024+16)
|
||||
int i,ret, retry = 4;
|
||||
u8 i2c_buf[1024+2];
|
||||
u16 eep_addr = 0, total_kbyte = 24;
|
||||
u32 fw_checksum = 0;
|
||||
HYN_ENTER();
|
||||
if(0 == hyn_1xxdata->fw_file_name[0]){
|
||||
fw_checksum = U8TO32(bin_addr[CHECKSUM_OFFECT+3],bin_addr[CHECKSUM_OFFECT+2],bin_addr[CHECKSUM_OFFECT+1],bin_addr[CHECKSUM_OFFECT]);
|
||||
}
|
||||
else{
|
||||
ret = copy_for_updata(hyn_1xxdata,i2c_buf,CHECKSUM_OFFECT,4);
|
||||
if(ret) goto UPDATA_END;
|
||||
fw_checksum = U8TO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);
|
||||
}
|
||||
|
||||
hyn_irq_set(hyn_1xxdata,DISABLE);
|
||||
while(--retry){
|
||||
ret = cst1xx_enter_boot();
|
||||
if(ret){
|
||||
HYN_ERROR("cst1xx_enter_boot faill");
|
||||
continue;
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA00200,3,i2c_buf,0);
|
||||
if(ret) continue;
|
||||
mdelay(5);
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA003,2,i2c_buf,1);
|
||||
if(i2c_buf[0] != 0x55)continue;
|
||||
//start trans fw
|
||||
for (i=0; i<total_kbyte; i++) {
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x14;
|
||||
eep_addr = i << 10; //i * 1024
|
||||
i2c_buf[2] = eep_addr;
|
||||
i2c_buf[3] = eep_addr>>8;
|
||||
ret = hyn_write_data(hyn_1xxdata, i2c_buf,RW_REG_LEN, 4);
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x18;
|
||||
if(0 == hyn_1xxdata->fw_file_name[0]){
|
||||
memcpy(i2c_buf + 2, bin_addr + eep_addr, 1024);
|
||||
}
|
||||
else{
|
||||
ret |= copy_for_updata(hyn_1xxdata,i2c_buf + 2,eep_addr,1024);
|
||||
}
|
||||
ret |= hyn_write_data(hyn_1xxdata, i2c_buf,RW_REG_LEN, 1026);
|
||||
ret |= hyn_wr_reg(hyn_1xxdata, 0xA004EE, 3,i2c_buf,0);
|
||||
mdelay(60); //wait finsh
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x05;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA005,2,i2c_buf,1);
|
||||
if (ret < 0 || i2c_buf[0] != 0x55){
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(ret) continue;
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xA00300,3,i2c_buf,0);
|
||||
if(ret) continue;
|
||||
hyn_1xxdata->hw_info.ic_fw_checksum = cst1xx_read_checksum();
|
||||
if(fw_checksum == hyn_1xxdata->hw_info.ic_fw_checksum){
|
||||
break;
|
||||
}
|
||||
}
|
||||
UPDATA_END:
|
||||
hyn_set_i2c_addr(hyn_1xxdata,MAIN_I2C_ADDR);
|
||||
cst1xx_rst();
|
||||
if(fw_checksum == hyn_1xxdata->hw_info.ic_fw_checksum){
|
||||
mdelay(50);
|
||||
cst1xx_updata_tpinfo();
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
HYN_ERROR("updata_fw failed fw_checksum:%#x ic_checksum:%#x",fw_checksum,hyn_1xxdata->hw_info.ic_fw_checksum);
|
||||
}
|
||||
hyn_irq_set(hyn_1xxdata,ENABLE);
|
||||
return !retry;
|
||||
}
|
||||
|
||||
static u32 cst1xx_check_esd(void)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[6];
|
||||
ret = hyn_wr_reg(hyn_1xxdata,0xD040,2,buf,6);
|
||||
if(ret ==0){
|
||||
u16 checksum = buf[0]+buf[1]+buf[2]+buf[3]+0xA5;
|
||||
if(checksum != ( (buf[4]<<8)+ buf[5])){
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
return ret ? 0:(buf[3]+(buf[2]<<8)+(buf[1]<<16)+(buf[0]<<24));
|
||||
}
|
||||
|
||||
static int cst1xx_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst1xx_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
const struct hyn_ts_fuc cst1xx_fuc = {
|
||||
.tp_rest = cst1xx_rst,
|
||||
.tp_report = cst1xx_report,
|
||||
.tp_supend = cst1xx_supend,
|
||||
.tp_resum = cst1xx_resum,
|
||||
.tp_chip_init = cst1xx_init,
|
||||
.tp_updata_fw = cst1xx_updata_fw,
|
||||
.tp_set_workmode = cst1xx_set_workmode,
|
||||
.tp_check_esd = cst1xx_check_esd,
|
||||
.tp_prox_handle = cst1xx_prox_handle,
|
||||
.tp_get_dbg_data = cst1xx_get_dbg_data,
|
||||
.tp_get_test_result = cst1xx_get_test_result
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
564
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst3240.c
Normal file
564
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst3240.c
Normal file
@@ -0,0 +1,564 @@
|
||||
#include "../hyn_core.h"
|
||||
#include "cst3240_fw.h"
|
||||
|
||||
#define BOOT_I2C_ADDR (0x5A)
|
||||
#define MAIN_I2C_ADDR (0x5A)
|
||||
#define RW_REG_LEN (2)
|
||||
|
||||
#define CST3240_BIN_SIZE (31*512 + 480)
|
||||
|
||||
static struct hyn_ts_data *hyn_3240data = NULL;
|
||||
static const u8 gest_map_tbl[] = {
|
||||
IDX_NULL, IDX_RIGHT, IDX_UP, IDX_LEFT,
|
||||
IDX_DOWN, IDX_O, IDX_C, IDX_e,
|
||||
IDX_M, IDX_M, IDX_W, IDX_V,
|
||||
IDX_S, IDX_Z, IDX_C, IDX_M,
|
||||
IDX_M, IDX_e, IDX_S, IDX_e,
|
||||
IDX_O, IDX_NULL, IDX_NULL, IDX_NULL,
|
||||
IDX_NULL, IDX_NULL, IDX_NULL, IDX_NULL,
|
||||
IDX_NULL, IDX_NULL, IDX_NULL, IDX_NULL,
|
||||
IDX_POWER
|
||||
};
|
||||
|
||||
static int cst3240_updata_judge(u8 *p_fw, u16 len);
|
||||
static u32 cst3240_read_checksum(void);
|
||||
static int cst3240_updata_tpinfo(void);
|
||||
static int cst3240_enter_boot(void);
|
||||
static void cst3240_rst(void);
|
||||
|
||||
static int cst3240_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
HYN_ENTER();
|
||||
hyn_3240data = ts_data;
|
||||
ret = cst3240_enter_boot();
|
||||
if(ret){
|
||||
HYN_INFO("cst3240_enter_boot failed");
|
||||
return -1;
|
||||
}
|
||||
hyn_3240data->fw_updata_addr = (u8*)fw_bin;
|
||||
hyn_3240data->fw_updata_len = CST3240_BIN_SIZE;
|
||||
hyn_3240data->hw_info.ic_fw_checksum = cst3240_read_checksum();
|
||||
HYN_INFO("curt read checksum:%x",hyn_3240data->hw_info.ic_fw_checksum);
|
||||
//hyn_wr_reg(hyn_3240data,0xA006EE,3,buf,0); //exit boot
|
||||
hyn_set_i2c_addr(hyn_3240data,MAIN_I2C_ADDR);
|
||||
cst3240_rst();
|
||||
msleep(50);
|
||||
hyn_3240data->need_updata_fw = cst3240_updata_judge((u8*)fw_bin,CST3240_BIN_SIZE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3240_report(void)
|
||||
{
|
||||
u8 buf[80]={0};
|
||||
u8 finger_num = 0,key_flg = 0,tmp_dat;
|
||||
int len = 0;
|
||||
struct hyn_plat_data *dt = &hyn_3240data->plat_data;
|
||||
int ret = 0,retry = 2;
|
||||
switch(hyn_3240data->work_mode){
|
||||
case NOMAL_MODE:
|
||||
retry = 2;
|
||||
while(retry--){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD000,2,buf,7);
|
||||
if(ret || buf[6] != 0xAB || buf[0] == 0xAB){
|
||||
ret = -2;
|
||||
continue;
|
||||
}
|
||||
finger_num = buf[5] & 0x7F;
|
||||
if(finger_num > dt->max_touch_num){
|
||||
finger_num = dt->max_touch_num;
|
||||
}
|
||||
key_flg = (buf[5]&0x80) ? 1:0;
|
||||
len = 0;
|
||||
if(finger_num > 1){
|
||||
len += (finger_num-1)*5;
|
||||
}
|
||||
if(key_flg && finger_num){
|
||||
len += 3;
|
||||
}
|
||||
if(len > 0){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD007,2,&buf[5],len);
|
||||
}
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD000AB,3,buf,0);
|
||||
if(ret){
|
||||
ret = -3;
|
||||
continue;
|
||||
}
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
if(ret){
|
||||
hyn_wr_reg(hyn_3240data,0xD000AB,3,buf,0);
|
||||
HYN_ERROR("read frame failed");
|
||||
break;
|
||||
}
|
||||
if(key_flg){ //key
|
||||
if(hyn_3240data->rp_buf.report_need == REPORT_NONE){
|
||||
hyn_3240data->rp_buf.report_need |= REPORT_KEY;
|
||||
}
|
||||
len = finger_num ? (len+5):3;
|
||||
hyn_3240data->rp_buf.key_id = (buf[len-2]>>4)-1;
|
||||
hyn_3240data->rp_buf.key_state = (buf[len-3]&0x0F)==0x03 ? 1:0;
|
||||
HYN_INFO("key_id:%x state:%x",hyn_3240data->rp_buf.key_id ,hyn_3240data->rp_buf.key_state);
|
||||
}
|
||||
if(finger_num){
|
||||
u16 index = 0,i = 0;
|
||||
u8 touch_down = 0;
|
||||
if(hyn_3240data->rp_buf.report_need == REPORT_NONE){
|
||||
hyn_3240data->rp_buf.report_need |= REPORT_POS;
|
||||
}
|
||||
hyn_3240data->rp_buf.rep_num = finger_num;
|
||||
for(i = 0; i < finger_num; i++){
|
||||
index = i*5;
|
||||
hyn_3240data->rp_buf.pos_info[i].pos_id = (buf[index]>>4)&0x0F;
|
||||
hyn_3240data->rp_buf.pos_info[i].event = (buf[index]&0x0F) == 0x06 ? 1 : 0;
|
||||
hyn_3240data->rp_buf.pos_info[i].pos_x = ((u16)buf[index + 1]<<4) + ((buf[index + 3] >> 4) & 0x0F);
|
||||
hyn_3240data->rp_buf.pos_info[i].pos_y = ((u16)buf[index + 2]<<4) + (buf[index + 3] & 0x0F);
|
||||
hyn_3240data->rp_buf.pos_info[i].pres_z = buf[index + 4];
|
||||
if(hyn_3240data->rp_buf.pos_info[i].event) touch_down++;
|
||||
// HYN_INFO("report_id = %d, xy = %d,%d",hyn_3240data->rp_buf.pos_info[i].pos_id,hyn_3240data->rp_buf.pos_info[i].pos_x,hyn_3240data->rp_buf.pos_info[i].pos_y);
|
||||
}
|
||||
if(0== touch_down){
|
||||
hyn_3240data->rp_buf.rep_num = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD04C,2,&tmp_dat,1);
|
||||
if((tmp_dat&0x7F) <= 32){
|
||||
tmp_dat = tmp_dat&0x7F;
|
||||
hyn_3240data->gesture_id = gest_map_tbl[tmp_dat];
|
||||
hyn_3240data->rp_buf.report_need |= REPORT_GES;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3240_prox_handle(u8 cmd)
|
||||
{
|
||||
/*int ret = 0;
|
||||
switch(cmd){
|
||||
case 1: //enable
|
||||
hyn_3240data->prox_is_enable = 1;
|
||||
hyn_3240data->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD004B01,3,NULL,0);
|
||||
break;
|
||||
case 0: //disable
|
||||
hyn_3240data->prox_is_enable = 0;
|
||||
hyn_3240data->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD004B00,3,NULL,0);
|
||||
break;
|
||||
case 2: //read
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD004B,2,&hyn_3240data->prox_state,1);
|
||||
break;
|
||||
}
|
||||
return ret;*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3240_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
int ret = 0;
|
||||
HYN_ENTER();
|
||||
hyn_3240data->work_mode = mode;
|
||||
if(mode != NOMAL_MODE)
|
||||
hyn_esdcheck_switch(hyn_3240data,DISABLE);
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_irq_set(hyn_3240data,ENABLE);
|
||||
hyn_esdcheck_switch(hyn_3240data,ENABLE);
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD109,2,0,0);
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD104,2,0,0);
|
||||
break;
|
||||
case LP_MODE:
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD10D,2,0,0);
|
||||
ret |= hyn_wr_reg(hyn_3240data,0x000500,3,0,0);
|
||||
break;
|
||||
case RAWDATA_MODE:
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD10A,2,0,0);
|
||||
ret |= hyn_wr_reg(hyn_3240data,0x000500,3,0,0);
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
cst3240_rst();
|
||||
msleep(50);
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD119,2,0,0);
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_irq_set(hyn_3240data,DISABLE);
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD105,2,0,0);
|
||||
break;
|
||||
case ENTER_BOOT_MODE:
|
||||
ret |= cst3240_enter_boot();
|
||||
break;
|
||||
default :
|
||||
ret = -2;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int cst3240_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst3240_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3240_resum(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst3240_rst();
|
||||
msleep(50);
|
||||
cst3240_set_workmode(NOMAL_MODE,1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cst3240_rst(void)
|
||||
{
|
||||
if(hyn_3240data->work_mode==ENTER_BOOT_MODE){
|
||||
hyn_set_i2c_addr(hyn_3240data,MAIN_I2C_ADDR);
|
||||
}
|
||||
gpio_set_value(hyn_3240data->plat_data.reset_gpio,0);
|
||||
msleep(5);
|
||||
gpio_set_value(hyn_3240data->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
static int cst3240_enter_boot(void)
|
||||
{
|
||||
int retry = 0,ret = 0,times;
|
||||
u8 buf[4];
|
||||
hyn_set_i2c_addr(hyn_3240data,BOOT_I2C_ADDR);
|
||||
while(++retry<20){
|
||||
cst3240_rst();
|
||||
mdelay(5+retry);
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA001AA,3,0,0);
|
||||
if(ret) continue;
|
||||
times = 5;
|
||||
while(--times){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA002,2,buf,2);
|
||||
if(ret ==0 && buf[0] == 0x55 && buf[1] == 0xA8) break;
|
||||
mdelay(1);
|
||||
}
|
||||
if(times == 0) continue;
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA00100,3,0,0);
|
||||
if(ret) continue;
|
||||
break;
|
||||
}
|
||||
return retry < 20 ? 0:-1;
|
||||
}
|
||||
|
||||
static int cst3240_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[28];
|
||||
struct tp_info *ic = &hyn_3240data->hw_info;
|
||||
int ret = 0,retry = 5;
|
||||
HYN_ENTER();
|
||||
while(--retry){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD101,2,0,0); //get module info mode
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD204,2,buf,8);
|
||||
ret |= hyn_wr_reg(hyn_3240data,0xD1F4,2,&buf[8],8);
|
||||
ret |= cst3240_set_workmode(NOMAL_MODE,ENABLE);
|
||||
if(ret==0 && U8TO16(buf[3],buf[2])==0x3240)break;
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
if(ret || retry==0){
|
||||
HYN_ERROR("cst3240_updata_tpinfo failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ic->fw_project_id = U8TO16(buf[1],buf[0]);
|
||||
ic->fw_chip_type = U8TO16(buf[3],buf[2]);
|
||||
ic->fw_ver = U8TO32(buf[7],buf[6],buf[5],buf[4]);
|
||||
|
||||
ic->fw_sensor_txnum = buf[8];
|
||||
ic->fw_sensor_rxnum = buf[10];
|
||||
ic->fw_key_num = buf[11];
|
||||
ic->fw_res_y = U8TO16(buf[15],buf[14]);
|
||||
ic->fw_res_x = U8TO16(buf[13],buf[12]);
|
||||
|
||||
HYN_INFO("IC_info tx:%d rx:%d key:%d res-x:%d res-y:%d",ic->fw_sensor_txnum,ic->fw_sensor_rxnum,ic->fw_key_num,ic->fw_res_x,ic->fw_res_y);
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 cst3240_read_checksum(void)
|
||||
{
|
||||
int ret;
|
||||
u32 check_sum = 0;
|
||||
u8 buf[4],retry = 6;
|
||||
hyn_3240data->boot_is_pass = 0;
|
||||
while(--retry){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA000,2,buf,1);
|
||||
if(ret ==0 && buf[0] == 0x01) break;
|
||||
mdelay(2);
|
||||
}
|
||||
if(retry){
|
||||
retry = 3;
|
||||
while(retry){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA008,2,buf,4);
|
||||
if(ret==0){
|
||||
check_sum = U8TO32(buf[3],buf[2],buf[1],buf[0]);
|
||||
hyn_3240data->boot_is_pass = 1;
|
||||
break;
|
||||
}
|
||||
mdelay(1);
|
||||
}
|
||||
}
|
||||
return check_sum;
|
||||
}
|
||||
|
||||
static int cst3240_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
int ret;
|
||||
u32 f_check_all,f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw + len- 16;
|
||||
struct tp_info *ic = &hyn_3240data->hw_info;
|
||||
HYN_ENTER();
|
||||
p_data = &p_fw[CST3240_BIN_SIZE-16+4];
|
||||
f_fw_project_id = U8TO16(p_data[1],p_data[0]);
|
||||
f_ictype = U8TO16(p_data[3],p_data[2]);
|
||||
f_fw_ver = U8TO32(p_data[7],p_data[6],p_data[5],p_data[4]);
|
||||
f_checksum = U8TO32(p_data[11],p_data[10],p_data[9],p_data[8]);
|
||||
|
||||
HYN_INFO("Bin_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
ret = cst3240_updata_tpinfo(); //boot checksum pass, communicate failed not updata
|
||||
if(ret) HYN_ERROR("get tpinfo failed");
|
||||
|
||||
f_check_all = hyn_sum32(0x55,(u32*)p_fw,len/4-1);
|
||||
if(f_check_all != f_checksum){
|
||||
HYN_INFO(".h file checksum erro:%04x",f_check_all);
|
||||
return 0; //no need updata
|
||||
}
|
||||
|
||||
if(hyn_3240data->boot_is_pass ==0 //checksum failed
|
||||
|| ( ret == 0 && f_ictype == ic->fw_chip_type && f_fw_project_id == ic->fw_project_id
|
||||
&& f_checksum != ic->ic_fw_checksum && f_fw_ver >= ic->fw_ver ) // match new ver .h file
|
||||
){
|
||||
return 1; //need updata
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3240_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
int i,ret=-1, times = 0,retry;
|
||||
u8 i2c_buf[512+2];
|
||||
u16 eep_addr = 0;
|
||||
u32 fw_checksum = 0;
|
||||
HYN_ENTER();
|
||||
if(len < CST3240_BIN_SIZE){
|
||||
HYN_ERROR("len = %d",len);
|
||||
goto UPDATA_END;
|
||||
}
|
||||
if(len > CST3240_BIN_SIZE) len = CST3240_BIN_SIZE;
|
||||
|
||||
if(0 == hyn_3240data->fw_file_name[0]){
|
||||
fw_checksum = *(u32*)(bin_addr+CST3240_BIN_SIZE-4);
|
||||
}
|
||||
else{
|
||||
ret = copy_for_updata(hyn_3240data,i2c_buf,CST3240_BIN_SIZE-4,4);
|
||||
if(ret) goto UPDATA_END;
|
||||
fw_checksum = U8TO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);
|
||||
}
|
||||
hyn_irq_set(hyn_3240data,DISABLE);
|
||||
hyn_esdcheck_switch(hyn_3240data,DISABLE);
|
||||
retry = 4;
|
||||
while(--retry){
|
||||
hyn_3240data->fw_updata_process = 0;
|
||||
ret = cst3240_enter_boot();
|
||||
if(ret) continue;
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA01000,3,0,0);
|
||||
if(ret) continue;
|
||||
//start trans fw
|
||||
for (i=0; i<32;i++) {
|
||||
ret = 0;
|
||||
if(31 == i){
|
||||
ret |= hyn_wr_reg(hyn_3240data, 0xA01002, 3,0,0);
|
||||
ret |= hyn_wr_reg(hyn_3240data, 0xA00CE001, 4,0,0);
|
||||
}
|
||||
eep_addr = i << 9; //i * 512
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA0140000+U16REV(eep_addr),4,0,0);
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x18;
|
||||
if(0 == hyn_3240data->fw_file_name[0]){
|
||||
memcpy(i2c_buf + 2, bin_addr + eep_addr, 512);
|
||||
}else{
|
||||
ret |= copy_for_updata(hyn_3240data,i2c_buf + 2,eep_addr,512);
|
||||
}
|
||||
ret |= hyn_write_data(hyn_3240data, i2c_buf,RW_REG_LEN, i<31 ? 514:482);
|
||||
if(ret){ //com erro
|
||||
continue;
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_3240data, 0xA004EE, 3,0,0);
|
||||
if(ret) ret = hyn_wr_reg(hyn_3240data, 0xA004EE, 3,0,0);
|
||||
mdelay((4-retry)*100); //wait finsh
|
||||
times = 100;
|
||||
while(--times){
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA005,2,i2c_buf,1);
|
||||
if(ret==0 && i2c_buf[0] == 0x55) break;
|
||||
ret = -1;
|
||||
mdelay(10);
|
||||
}
|
||||
if(ret) break;
|
||||
hyn_3240data->fw_updata_process = i*100/32;
|
||||
}
|
||||
// HYN_INFO("ret = %d",ret);
|
||||
if(ret) continue;
|
||||
|
||||
ret = hyn_wr_reg(hyn_3240data,0xA00300,3,i2c_buf,0);
|
||||
if(ret) continue;
|
||||
hyn_3240data->hw_info.ic_fw_checksum = cst3240_read_checksum();
|
||||
HYN_INFO("retry:%d fw_checksum:%x ic_checksum:%x\r\n",4-retry,fw_checksum,hyn_3240data->hw_info.ic_fw_checksum);
|
||||
if(fw_checksum != hyn_3240data->hw_info.ic_fw_checksum){
|
||||
ret = -2;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
UPDATA_END:
|
||||
hyn_set_i2c_addr(hyn_3240data,MAIN_I2C_ADDR);
|
||||
cst3240_rst();
|
||||
if(ret == 0){
|
||||
msleep(50);
|
||||
cst3240_updata_tpinfo();
|
||||
hyn_3240data->fw_updata_process = 100;
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
hyn_3240data->fw_updata_process |= 0x80;
|
||||
HYN_ERROR("updata_fw failed");
|
||||
}
|
||||
hyn_irq_set(hyn_3240data,ENABLE);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u32 cst3240_check_esd(void)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[6];
|
||||
HYN_ENTER();
|
||||
ret = hyn_wr_reg(hyn_3240data,0xD040,2,buf,6);
|
||||
if(ret ==0 && hyn_sum16(0xA5,buf,4)==U8TO16(buf[4],buf[5])){
|
||||
ret = U8TO32(buf[0],buf[1],buf[2],buf[3]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int cst3240_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
int ret = -1,timeout;
|
||||
u16 read_len = (hyn_3240data->hw_info.fw_sensor_txnum * hyn_3240data->hw_info.fw_sensor_rxnum)*2;
|
||||
u16 total_len = read_len + (hyn_3240data->hw_info.fw_sensor_txnum + hyn_3240data->hw_info.fw_sensor_rxnum)*2;
|
||||
HYN_ENTER();
|
||||
if(total_len > len){
|
||||
HYN_ERROR("buf too small");
|
||||
return -1;
|
||||
}
|
||||
switch(hyn_3240data->work_mode){
|
||||
case DIFF_MODE:
|
||||
case RAWDATA_MODE:
|
||||
timeout = 60;
|
||||
while(--timeout){ //wait rise edge
|
||||
if(gpio_get_value(hyn_3240data->plat_data.irq_gpio)==1) break;
|
||||
msleep(1);
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_3240data,0x1000,2,buf,read_len); //mt
|
||||
|
||||
buf += read_len;
|
||||
read_len = hyn_3240data->hw_info.fw_sensor_rxnum*2;
|
||||
ret |= hyn_wr_reg(hyn_3240data,0x7000,2,buf,read_len); //rx
|
||||
|
||||
buf += read_len;
|
||||
read_len = hyn_3240data->hw_info.fw_sensor_txnum*2;
|
||||
ret |= hyn_wr_reg(hyn_3240data,0x7200,2,buf,read_len); //tx
|
||||
|
||||
ret |= hyn_wr_reg(hyn_3240data,0x000500,3,0,0); //end
|
||||
break;
|
||||
default:
|
||||
HYN_ERROR("work_mode:%d",hyn_3240data->work_mode);
|
||||
break;
|
||||
}
|
||||
return ret==0 ? total_len:-1;
|
||||
}
|
||||
|
||||
#define FACTEST_PATH "/sdcard/hyn_fac_test_cfg.ini"
|
||||
#define FACTEST_LOG_PATH "/sdcard/hyn_fac_test.log"
|
||||
#define FACTEST_ITEM (MULTI_OPEN_TEST|MULTI_SHORT_TEST)
|
||||
static int cst3240_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
int ret = 0,timeout;
|
||||
struct tp_info *ic = &hyn_3240data->hw_info;
|
||||
u16 scap_len = (ic->fw_sensor_txnum + ic->fw_sensor_rxnum)*2;
|
||||
u16 mt_len = ic->fw_sensor_rxnum*ic->fw_sensor_txnum*2,i = 0;
|
||||
u16 *raw_s;
|
||||
|
||||
HYN_ENTER();
|
||||
if((mt_len*3 + scap_len) > len || mt_len==0){
|
||||
HYN_ERROR("buf too small");
|
||||
return FAC_GET_DATA_FAIL;
|
||||
}
|
||||
msleep(1);
|
||||
timeout = 500;
|
||||
while(--timeout){ //wait rise edge
|
||||
if(gpio_get_value(hyn_3240data->plat_data.irq_gpio)==1) break;
|
||||
msleep(10);
|
||||
}
|
||||
if(hyn_wr_reg(hyn_3240data,0x3000,2,buf,mt_len)){ //open high
|
||||
ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ERROR("read open high failed");
|
||||
goto selftest_end;
|
||||
}
|
||||
if(hyn_wr_reg(hyn_3240data,0x1000,2,buf + mt_len,mt_len)){ //open low
|
||||
ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ERROR("read open low failed");
|
||||
goto selftest_end;
|
||||
}
|
||||
//short test
|
||||
if(hyn_wr_reg(hyn_3240data,0x5000,2,buf+(mt_len*2),scap_len)){
|
||||
ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ERROR("read fac short failed");
|
||||
goto selftest_end;
|
||||
}
|
||||
else{
|
||||
raw_s = (u16*)(buf + mt_len*2);
|
||||
for(i = 0; i< ic->fw_sensor_rxnum+ic->fw_sensor_txnum; i++){
|
||||
*raw_s = U16REV((u16)*raw_s);
|
||||
raw_s++;
|
||||
}
|
||||
}
|
||||
|
||||
//read data finlish start test
|
||||
ret = factory_multitest(hyn_3240data ,FACTEST_PATH, buf,(s16*)(buf+scap_len+mt_len*2),FACTEST_ITEM);
|
||||
|
||||
selftest_end:
|
||||
if(0 == fac_test_log_save(FACTEST_LOG_PATH,hyn_3240data,(s16*)buf,ret,FACTEST_ITEM)){
|
||||
HYN_INFO("fac_test log save success");
|
||||
}
|
||||
cst3240_resum();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
const struct hyn_ts_fuc cst3240_fuc = {
|
||||
.tp_rest = cst3240_rst,
|
||||
.tp_report = cst3240_report,
|
||||
.tp_supend = cst3240_supend,
|
||||
.tp_resum = cst3240_resum,
|
||||
.tp_chip_init = cst3240_init,
|
||||
.tp_updata_fw = cst3240_updata_fw,
|
||||
.tp_set_workmode = cst3240_set_workmode,
|
||||
.tp_check_esd = cst3240_check_esd,
|
||||
.tp_prox_handle = cst3240_prox_handle,
|
||||
.tp_get_dbg_data = cst3240_get_dbg_data,
|
||||
.tp_get_test_result = cst3240_get_test_result
|
||||
};
|
||||
431
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst3xx.c
Normal file
431
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst3xx.c
Normal file
@@ -0,0 +1,431 @@
|
||||
#include "../hyn_core.h"
|
||||
#include "cst3xx_fw.h"
|
||||
|
||||
#define BOOT_I2C_ADDR (0x1A)
|
||||
#define MAIN_I2C_ADDR (0x1A)
|
||||
#define RW_REG_LEN (2)
|
||||
#define CST3xx_BIN_SIZE (24*1024 + 24)
|
||||
|
||||
static struct hyn_ts_data *hyn_3xxdata = NULL;
|
||||
static const u8 gest_map_tbl[33] = {0xff,4,1,3,2,5,12,6,7,7,9,11,10,13,12,7,7,6,10,6,5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,14};
|
||||
|
||||
static int cst3xx_updata_judge(u8 *p_fw, u16 len);
|
||||
static int cst3xx_read_checksum(u32* check_sum);
|
||||
static int cst3xx_updata_tpinfo(void);
|
||||
static int cst3xx_enter_boot(void);
|
||||
static int cst3xx_set_workmode(enum work_mode mode,u8 enable);
|
||||
static void cst3xx_rst(void);
|
||||
|
||||
static int cst3xx_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
HYN_ENTER();
|
||||
hyn_3xxdata = ts_data;
|
||||
ret = cst3xx_enter_boot();
|
||||
if(ret){
|
||||
HYN_ERROR("cst3xx_enter_boot failed");
|
||||
return -1;
|
||||
}
|
||||
hyn_3xxdata->fw_updata_addr = (u8*)fw_bin;
|
||||
hyn_3xxdata->fw_updata_len = CST3xx_BIN_SIZE;
|
||||
if(0 == cst3xx_read_checksum(&hyn_3xxdata->hw_info.ic_fw_checksum)){
|
||||
hyn_3xxdata->boot_is_pass = 1;
|
||||
}
|
||||
hyn_set_i2c_addr(hyn_3xxdata,MAIN_I2C_ADDR);
|
||||
cst3xx_rst();
|
||||
mdelay(50);
|
||||
|
||||
hyn_3xxdata->need_updata_fw = cst3xx_updata_judge((u8*)fw_bin,CST3xx_BIN_SIZE);
|
||||
if(hyn_3xxdata->need_updata_fw){
|
||||
HYN_INFO("need updata FW !!!");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3xx_report(void)
|
||||
{
|
||||
u8 buf[80];
|
||||
u8 finger_num = 0,len = 0,write_tail_end = 0,key_state=0,key_id = 0,tmp_dat;
|
||||
struct hyn_plat_data *dt = &hyn_3xxdata->plat_data;
|
||||
int ret = 0;
|
||||
hyn_3xxdata->rp_buf.report_need = REPORT_NONE;
|
||||
switch(hyn_3xxdata->work_mode){
|
||||
case NOMAL_MODE:
|
||||
write_tail_end = 1;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD000,2,buf,7);
|
||||
if(ret || buf[6] != 0xAB || buf[0] == 0xAB){
|
||||
break;
|
||||
}
|
||||
len = buf[5] & 0x7F;
|
||||
if(len > dt->max_touch_num){
|
||||
len = dt->max_touch_num;
|
||||
}
|
||||
if(buf[5]&0x80){ //key
|
||||
if(buf[5]==0x80){
|
||||
key_id = (buf[1]>>4)-1;
|
||||
key_state = buf[0];
|
||||
}
|
||||
else{
|
||||
finger_num = len;
|
||||
len = (len-1)*5+3;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD007,2,&buf[5],len);
|
||||
len += 5;
|
||||
key_id = (buf[len-2]>>4)-1;
|
||||
key_state = buf[len-3];
|
||||
}
|
||||
if(key_state&0x80){
|
||||
hyn_3xxdata->rp_buf.report_need |= REPORT_KEY;
|
||||
if((key_id == hyn_3xxdata->rp_buf.key_id || 0 == hyn_3xxdata->rp_buf.key_state)&& key_state == 0x83){
|
||||
hyn_3xxdata->rp_buf.key_id = key_id;
|
||||
hyn_3xxdata->rp_buf.key_state = 1;
|
||||
}
|
||||
else{
|
||||
hyn_3xxdata->rp_buf.key_state = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{ //pos
|
||||
u16 index = 0;
|
||||
u8 i = 0;
|
||||
finger_num = len;
|
||||
hyn_3xxdata->rp_buf.report_need |= REPORT_POS;
|
||||
if(finger_num > 1){
|
||||
len = (len-1)*5 + 1;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD007,2,&buf[5],len);
|
||||
}
|
||||
hyn_3xxdata->rp_buf.rep_num = finger_num;
|
||||
for(i = 0; i < finger_num; i++){
|
||||
index = i*5;
|
||||
hyn_3xxdata->rp_buf.pos_info[i].pos_id = (buf[index]>>4)&0x0F;
|
||||
hyn_3xxdata->rp_buf.pos_info[i].event = (buf[index]&0x0F) == 0x06 ? 1 : 0;
|
||||
hyn_3xxdata->rp_buf.pos_info[i].pos_x = ((u16)buf[index + 1]<<4) + ((buf[index + 3] >> 4) & 0x0F);
|
||||
hyn_3xxdata->rp_buf.pos_info[i].pos_y = ((u16)buf[index + 2]<<4) + (buf[index + 3] & 0x0F);
|
||||
hyn_3xxdata->rp_buf.pos_info[i].pres_z = buf[index + 4];
|
||||
// HYN_INFO("report_id = %d, xy = %d,%d",hyn_3xxdata->rp_buf.pos_info[i].pos_id,hyn_3xxdata->rp_buf.pos_info[i].pos_x,hyn_3xxdata->rp_buf.pos_info[i].pos_y);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD04C,2,&tmp_dat,1);
|
||||
if((tmp_dat&0x7F) <= 32){
|
||||
tmp_dat = tmp_dat&0x7F;
|
||||
hyn_3xxdata->gesture_id = gest_map_tbl[tmp_dat];
|
||||
hyn_3xxdata->rp_buf.report_need |= REPORT_GES;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(write_tail_end){
|
||||
hyn_wr_reg(hyn_3xxdata,0xD000AB,3,buf,0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3xx_prox_handle(u8 cmd)
|
||||
{
|
||||
int ret = 0;
|
||||
switch(cmd){
|
||||
case 1: //enable
|
||||
hyn_3xxdata->prox_is_enable = 1;
|
||||
hyn_3xxdata->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD004B01,3,NULL,0);
|
||||
break;
|
||||
case 0: //disable
|
||||
hyn_3xxdata->prox_is_enable = 0;
|
||||
hyn_3xxdata->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD004B00,3,NULL,0);
|
||||
break;
|
||||
case 2: //read
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD004B,2,&hyn_3xxdata->prox_state,1);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cst3xx_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
hyn_3xxdata->work_mode = mode;
|
||||
if(mode != NOMAL_MODE)
|
||||
hyn_esdcheck_switch(hyn_3xxdata,DISABLE);
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_irq_set(hyn_3xxdata,ENABLE);
|
||||
hyn_esdcheck_switch(hyn_3xxdata,ENABLE);
|
||||
hyn_wr_reg(hyn_3xxdata,0xD100,2,NULL,0);
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
hyn_wr_reg(hyn_3xxdata,0xD04C80,3,NULL,0);
|
||||
break;
|
||||
case LP_MODE:
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
hyn_wr_reg(hyn_3xxdata,0xD10D,2,NULL,0);
|
||||
break;
|
||||
case RAWDATA_MODE:
|
||||
hyn_wr_reg(hyn_3xxdata,0xD10A,2,NULL,0);
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
hyn_wr_reg(hyn_3xxdata,0xD119,2,NULL,0);
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_irq_set(hyn_3xxdata,DISABLE);
|
||||
hyn_wr_reg(hyn_3xxdata,0xD105,2,NULL,0);
|
||||
break;
|
||||
default :
|
||||
hyn_esdcheck_switch(hyn_3xxdata,ENABLE);
|
||||
hyn_3xxdata->work_mode = NOMAL_MODE;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int cst3xx_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst3xx_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3xx_resum(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst3xx_rst();
|
||||
msleep(50);
|
||||
cst3xx_set_workmode(NOMAL_MODE,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cst3xx_rst(void)
|
||||
{
|
||||
if(hyn_3xxdata->work_mode==ENTER_BOOT_MODE){
|
||||
hyn_set_i2c_addr(hyn_3xxdata,MAIN_I2C_ADDR);
|
||||
}
|
||||
gpio_set_value(hyn_3xxdata->plat_data.reset_gpio,0);
|
||||
msleep(5);
|
||||
gpio_set_value(hyn_3xxdata->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
static int cst3xx_enter_boot(void)
|
||||
{
|
||||
int retry = 5,ret = 0,cnt_max = 20;
|
||||
u8 buf[4] = {0};
|
||||
hyn_set_i2c_addr(hyn_3xxdata,BOOT_I2C_ADDR);
|
||||
while(++retry < cnt_max){
|
||||
cst3xx_rst();
|
||||
mdelay(retry);
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA001AA,3,buf,0);
|
||||
if(ret != 0){
|
||||
continue;
|
||||
}
|
||||
if(cnt_max == 20){
|
||||
cnt_max = retry+4;
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA002,2,buf,1);
|
||||
if(ret == 0 && buf[0] == 0x55){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int cst3xx_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[28];
|
||||
struct tp_info *ic = &hyn_3xxdata->hw_info;
|
||||
int ret = 0;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD101,2,buf,0);
|
||||
mdelay(1);
|
||||
ret |= hyn_wr_reg(hyn_3xxdata,0xD1F4,2,buf,28);
|
||||
if(ret){
|
||||
HYN_ERROR("cst3xx_updata_tpinfo failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ic->fw_sensor_txnum = buf[0];
|
||||
ic->fw_sensor_rxnum = buf[2];
|
||||
ic->fw_key_num = buf[3];
|
||||
ic->fw_res_y = (buf[7]<<8)|buf[6];
|
||||
ic->fw_res_x = (buf[5]<<8)|buf[4];
|
||||
ic->fw_project_id = (buf[17]<<8)|buf[16];
|
||||
ic->fw_chip_type = (buf[19]<<8)|buf[18];
|
||||
ic->fw_ver = (buf[23]<<24)|(buf[22]<<16)|(buf[21]<<8)|buf[20];
|
||||
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3xx_read_checksum(u32* check_sum)
|
||||
{
|
||||
int ret;
|
||||
u8 buf[4],retry = 5;
|
||||
while(retry--){
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA000,2,buf,1);
|
||||
if(ret){
|
||||
mdelay(2);
|
||||
continue;
|
||||
}
|
||||
if(buf[0]!=0) break;
|
||||
mdelay(2);
|
||||
}
|
||||
mdelay(1);
|
||||
if(buf[0] == 0x01){
|
||||
memset(buf,0,sizeof(buf));
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA008,2,buf,4);
|
||||
if(0 == ret){
|
||||
*check_sum = U8TO32(buf[3],buf[2],buf[1],buf[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int cst3xx_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
u32 f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw + len- 16;
|
||||
struct tp_info *ic = &hyn_3xxdata->hw_info;
|
||||
f_fw_project_id = U8TO16(p_data[1],p_data[0]);
|
||||
f_ictype = U8TO16(p_data[3],p_data[2]);
|
||||
f_fw_ver = U8TO16(p_data[7],p_data[6]);
|
||||
f_fw_ver = (f_fw_ver<<16)|U8TO16(p_data[5],p_data[4]);
|
||||
f_checksum = U8TO16(p_data[11],p_data[10]);
|
||||
f_checksum = (f_checksum << 16)|U8TO16(p_data[9],p_data[8]);
|
||||
HYN_INFO("Bin_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
|
||||
cst3xx_updata_tpinfo();
|
||||
cst3xx_set_workmode(NOMAL_MODE,0);
|
||||
|
||||
if(f_ictype != ic->fw_chip_type || f_fw_project_id != ic->fw_project_id){
|
||||
return 0; //not updata
|
||||
}
|
||||
if( hyn_3xxdata->boot_is_pass ==0 //boot failed
|
||||
||(f_checksum != ic->ic_fw_checksum && f_fw_ver > ic->fw_ver)){
|
||||
return 1; //need updata
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3xx_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
#define CHECKSUM_OFFECT (24*1024+16)
|
||||
int i,ret, retry = 4;
|
||||
u8 i2c_buf[1024+2];
|
||||
u16 eep_addr = 0, total_kbyte = 24;
|
||||
u32 fw_checksum= 0;
|
||||
HYN_ENTER();
|
||||
if(0 == hyn_3xxdata->fw_file_name[0]){
|
||||
fw_checksum = U8TO32(bin_addr[CHECKSUM_OFFECT+3],bin_addr[CHECKSUM_OFFECT+2],bin_addr[CHECKSUM_OFFECT+1],bin_addr[CHECKSUM_OFFECT]);
|
||||
}
|
||||
else{
|
||||
ret = copy_for_updata(hyn_3xxdata,i2c_buf,CHECKSUM_OFFECT,4);
|
||||
if(ret) goto UPDATA_END;
|
||||
fw_checksum = U8TO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);
|
||||
}
|
||||
hyn_irq_set(hyn_3xxdata,DISABLE);
|
||||
while(--retry){
|
||||
ret = cst3xx_enter_boot();
|
||||
if(ret){
|
||||
HYN_ERROR("cst3xx_enter_boot faill");
|
||||
continue;
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA00200,3,i2c_buf,0);
|
||||
if(ret) continue;
|
||||
mdelay(5);
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA003,2,i2c_buf,1);
|
||||
if(i2c_buf[0] != 0x55)continue;
|
||||
//start trans fw
|
||||
for (i=0; i<total_kbyte; i++) {
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x14;
|
||||
eep_addr = i << 10; //i * 1024
|
||||
i2c_buf[2] = eep_addr;
|
||||
i2c_buf[3] = eep_addr>>8;
|
||||
ret = hyn_write_data(hyn_3xxdata, i2c_buf,RW_REG_LEN, 4);
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x18;
|
||||
if(0 == hyn_3xxdata->fw_file_name[0]){
|
||||
memcpy(i2c_buf + 2, bin_addr + eep_addr, 1024);
|
||||
}
|
||||
else{
|
||||
ret |= copy_for_updata(hyn_3xxdata,i2c_buf + 2,eep_addr,1024);
|
||||
}
|
||||
ret |= hyn_write_data(hyn_3xxdata, i2c_buf,RW_REG_LEN, 1026);
|
||||
|
||||
ret |= hyn_wr_reg(hyn_3xxdata, 0xA004EE, 3,i2c_buf,0);
|
||||
mdelay(60); //wait finsh
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x05;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA005,2,i2c_buf,1);
|
||||
if (ret < 0 || i2c_buf[0] != 0x55){
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(ret) continue;
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xA00300,3,i2c_buf,0);
|
||||
if(ret) continue;
|
||||
cst3xx_read_checksum(&hyn_3xxdata->hw_info.ic_fw_checksum);
|
||||
if(fw_checksum == hyn_3xxdata->hw_info.ic_fw_checksum){
|
||||
break;
|
||||
}
|
||||
}
|
||||
UPDATA_END:
|
||||
hyn_set_i2c_addr(hyn_3xxdata,MAIN_I2C_ADDR);
|
||||
cst3xx_rst();
|
||||
if(fw_checksum == hyn_3xxdata->hw_info.ic_fw_checksum){
|
||||
mdelay(50);
|
||||
cst3xx_updata_tpinfo();
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
HYN_ERROR("updata_fw failed fw_checksum:%#x ic_checksum:%#x",fw_checksum,hyn_3xxdata->hw_info.ic_fw_checksum);
|
||||
}
|
||||
hyn_irq_set(hyn_3xxdata,ENABLE);
|
||||
return !retry;
|
||||
}
|
||||
|
||||
static u32 cst3xx_check_esd(void)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[6];
|
||||
ret = hyn_wr_reg(hyn_3xxdata,0xD040,2,buf,6);
|
||||
if(ret ==0){
|
||||
u16 checksum = buf[0]+buf[1]+buf[2]+buf[3]+0xA5;
|
||||
if(checksum != ( (buf[4]<<8)+ buf[5])){
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
return ret ? 0:(buf[3]+(buf[2]<<8)+(buf[1]<<16)+(buf[0]<<24));
|
||||
}
|
||||
|
||||
static int cst3xx_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst3xx_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
const struct hyn_ts_fuc cst3xx_fuc = {
|
||||
.tp_rest = cst3xx_rst,
|
||||
.tp_report = cst3xx_report,
|
||||
.tp_supend = cst3xx_supend,
|
||||
.tp_resum = cst3xx_resum,
|
||||
.tp_chip_init = cst3xx_init,
|
||||
.tp_updata_fw = cst3xx_updata_fw,
|
||||
.tp_set_workmode = cst3xx_set_workmode,
|
||||
.tp_check_esd = cst3xx_check_esd,
|
||||
.tp_prox_handle = cst3xx_prox_handle,
|
||||
.tp_get_dbg_data = cst3xx_get_dbg_data,
|
||||
.tp_get_test_result = cst3xx_get_test_result
|
||||
};
|
||||
|
||||
|
||||
|
||||
728
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst66xx.c
Normal file
728
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst66xx.c
Normal file
@@ -0,0 +1,728 @@
|
||||
#include "../hyn_core.h"
|
||||
|
||||
|
||||
#include "cst66xx_fw1.h"
|
||||
#include "cst66xx_fw2.h"
|
||||
|
||||
#define BOOT_I2C_ADDR (0x5A)
|
||||
#define MAIN_I2C_ADDR (0x58) //use 2 slave addr
|
||||
|
||||
#define PART_NO_EN (0)
|
||||
#define cst66xx_BIN_SIZE (40*1024) //(36*1024)
|
||||
#define MODULE_ID_ADDR (0xA400)
|
||||
#define PARTNUM_ADDR (0xFF10)
|
||||
|
||||
static struct hyn_ts_data *hyn_66xxdata = NULL;
|
||||
static const u8 gest_map_tbl[] = {
|
||||
IDX_POWER, //GESTURE_LABEL_CLICK,
|
||||
IDX_POWER, //GESTURE_LABEL_CLICK2,
|
||||
IDX_UP, //GESTURE_LABEL_TOP,
|
||||
IDX_DOWN, //GESTURE_LABEL_BOTTOM,
|
||||
IDX_LEFT, //GESTURE_LABEL_LEFT,
|
||||
IDX_RIGHT, //GESTURE_LABEL_RIGHT,
|
||||
IDX_C, //GESTURE_LABEL_C,
|
||||
IDX_e, //GESTURE_LABEL_E,
|
||||
IDX_V, //GESTURE_LABEL_v,
|
||||
IDX_NULL, //GESTURE_LABEL_^,
|
||||
IDX_NULL, //GESTURE_LABEL_>,
|
||||
IDX_NULL, //GESTURE_LABEL_<,
|
||||
IDX_M, //GESTURE_LABEL_M,
|
||||
IDX_W, //GESTURE_LABEL_W,
|
||||
IDX_O, //GESTURE_LABEL_O,
|
||||
IDX_S, //GESTURE_LABEL_S,
|
||||
IDX_Z, //GESTURE_LABEL_Z
|
||||
};
|
||||
|
||||
static const struct hyn_chip_series hyn_6xx_fw[] = {
|
||||
{0xCACA220E,0xffffffff,"cst3530",(u8*)fw_module1},//if PART_NO_EN==0 use default chip
|
||||
{0xCACA2202,0xffffffff,"cst3640",(u8*)fw_module1},
|
||||
{0xCACA2201,0xffffffff,"cst6656",(u8*)fw_module1},
|
||||
{0xCACA220C,0xffffffff,"cst3548",(u8*)fw_module1},
|
||||
{0xCACA2209,0xffffffff,"cst3556",(u8*)fw_module1},
|
||||
{0xCACA2203,0xffffffff,"cst6644",(u8*)fw_module1},
|
||||
{0xCACA2204,0xffffffff,"cst6856",(u8*)fw_module1},
|
||||
{0xCACA2204,0x00000002,"cst6856",(u8*)fw_module2},
|
||||
//0xCACA2205 //154
|
||||
//0xCACA2206 //148E
|
||||
{0,0,NULL}
|
||||
};
|
||||
|
||||
static int cst66xx_updata_judge(u8 *p_fw, u16 len);
|
||||
static u32 cst66xx_read_checksum(void);
|
||||
static int cst66xx_enter_boot(void);
|
||||
static u32 cst66xx_fread_word(u32 addr);
|
||||
static void cst66xx_rst(void);
|
||||
|
||||
static int cst66xx_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0,i;
|
||||
u32 read_part_no,module_id;
|
||||
HYN_ENTER();
|
||||
hyn_66xxdata = ts_data;
|
||||
|
||||
ret = cst66xx_enter_boot();
|
||||
if(ret){
|
||||
HYN_ERROR("cst66xx_enter_boot failed");
|
||||
return -1;
|
||||
}
|
||||
hyn_66xxdata->fw_updata_addr = hyn_6xx_fw[0].fw_bin;
|
||||
hyn_66xxdata->fw_updata_len = cst66xx_BIN_SIZE;
|
||||
read_part_no = cst66xx_fread_word(PARTNUM_ADDR);
|
||||
module_id = cst66xx_fread_word(MODULE_ID_ADDR);
|
||||
HYN_INFO("read_part_no:0x%08x module_id:0x%08x",read_part_no,module_id);
|
||||
if(module_id > 10) module_id = 0xffffffff;
|
||||
|
||||
for(i = 0; ;i++){
|
||||
#if PART_NO_EN
|
||||
if(hyn_6xx_fw[i].part_no == read_part_no && hyn_6xx_fw[i].moudle_id == module_id)
|
||||
#else
|
||||
if( hyn_6xx_fw[i].moudle_id == module_id)
|
||||
#endif
|
||||
{ hyn_66xxdata->fw_updata_addr = hyn_6xx_fw[i].fw_bin;
|
||||
HYN_INFO("chip %s match fw success ,partNo check is [%s]",hyn_6xx_fw[i].chip_name,PART_NO_EN ? "enable":"disable");
|
||||
break;
|
||||
}
|
||||
|
||||
if(hyn_6xx_fw[i].part_no == 0 && hyn_6xx_fw[i].moudle_id == 0){
|
||||
HYN_INFO("unknown chip or unknown moudle_id use hyn_6xx_fw[0]");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
hyn_66xxdata->hw_info.ic_fw_checksum = cst66xx_read_checksum();
|
||||
hyn_set_i2c_addr(hyn_66xxdata,MAIN_I2C_ADDR);
|
||||
cst66xx_rst(); //exit boot
|
||||
mdelay(50);
|
||||
|
||||
hyn_66xxdata->need_updata_fw = cst66xx_updata_judge(hyn_66xxdata->fw_updata_addr,cst66xx_BIN_SIZE);
|
||||
if(hyn_66xxdata->need_updata_fw){
|
||||
HYN_INFO("need updata FW !!!");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int cst66xx_report(void)
|
||||
{
|
||||
u8 buf[80],i=0;
|
||||
u8 finger_num = 0,key_num=0,report_typ= 0,key_state=0,key_id = 0,tmp_dat=0;
|
||||
struct hyn_plat_data *dt = &hyn_66xxdata->plat_data;
|
||||
int ret = 0,retry = 2;
|
||||
|
||||
while(retry--){ //read point
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD0070000,0x80|4,buf,9);
|
||||
report_typ = buf[2];//FF:pos F0:ges E0:prox
|
||||
finger_num = buf[3]&0x0f;
|
||||
key_num = (buf[3]&0xf0)>>4;
|
||||
if(finger_num > dt->max_touch_num){
|
||||
HYN_ERROR("fw max finger > dts config");
|
||||
finger_num = dt->max_touch_num;
|
||||
}
|
||||
if(key_num + finger_num > 1){
|
||||
ret |= hyn_read_data(hyn_66xxdata,&buf[9],(key_num + finger_num -1)*5);
|
||||
}
|
||||
if(hyn_sum16(0x55,&buf[4],(key_num + finger_num)*5) != (buf[0] | buf[1]<<8)){
|
||||
ret = -1;
|
||||
}
|
||||
if(ret && retry) continue;
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD00002AB,4,buf,0);
|
||||
if(ret == 0){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if((report_typ==0xff)&&((finger_num+key_num)>0)){
|
||||
if(key_num){
|
||||
key_id = buf[8]&0x0f;
|
||||
key_state = buf[8]>>4;
|
||||
if(hyn_66xxdata->rp_buf.report_need == REPORT_NONE){ //Mutually exclusive reporting of coordinates and keys
|
||||
hyn_66xxdata->rp_buf.report_need |= REPORT_KEY;
|
||||
}
|
||||
hyn_66xxdata->rp_buf.key_id = key_id;
|
||||
hyn_66xxdata->rp_buf.key_state = key_state !=0 ? 1:0;
|
||||
}
|
||||
|
||||
if(finger_num){ //pos
|
||||
u16 index = 0;
|
||||
u8 touch_down = 0;
|
||||
if(hyn_66xxdata->rp_buf.report_need == REPORT_NONE){ //Mutually exclusive reporting of coordinates and keys
|
||||
hyn_66xxdata->rp_buf.report_need |= REPORT_POS;
|
||||
}
|
||||
hyn_66xxdata->rp_buf.rep_num = finger_num;
|
||||
for(i = 0; i < finger_num; i++){
|
||||
index = (key_num+i)*5;
|
||||
hyn_66xxdata->rp_buf.pos_info[i].pos_id = buf[index+8]&0x0F;
|
||||
hyn_66xxdata->rp_buf.pos_info[i].event = buf[index+8]>>4;
|
||||
hyn_66xxdata->rp_buf.pos_info[i].pos_x = buf[index+4] + ((u16)(buf[index+7]&0x0F) <<8); //x is rx direction
|
||||
hyn_66xxdata->rp_buf.pos_info[i].pos_y = buf[index+5] + ((u16)(buf[index+7]&0xf0) <<4);
|
||||
hyn_66xxdata->rp_buf.pos_info[i].pres_z = buf[index+6];
|
||||
if(hyn_66xxdata->rp_buf.pos_info[i].event){
|
||||
touch_down++;
|
||||
}
|
||||
}
|
||||
if(0== touch_down){
|
||||
hyn_66xxdata->rp_buf.rep_num = 0;
|
||||
}
|
||||
}
|
||||
}else if(report_typ == 0xF0){
|
||||
tmp_dat = buf[8]&0xff;
|
||||
if((tmp_dat&0x7F) < sizeof(gest_map_tbl) && gest_map_tbl[tmp_dat] != IDX_NULL){
|
||||
hyn_66xxdata->gesture_id = gest_map_tbl[tmp_dat];
|
||||
hyn_66xxdata->rp_buf.report_need |= REPORT_GES;
|
||||
HYN_INFO("gesture_id:%d",tmp_dat);
|
||||
}
|
||||
}else if(report_typ == 0xE0){//proximity
|
||||
if(hyn_66xxdata->prox_is_enable && hyn_66xxdata->prox_state != buf[4]){
|
||||
hyn_66xxdata->prox_state = buf[4];
|
||||
hyn_66xxdata->rp_buf.report_need |= REPORT_PROX;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cst66xx_prox_handle(u8 cmd)
|
||||
{
|
||||
int ret = 0;
|
||||
switch(cmd){
|
||||
case 1: //enable
|
||||
hyn_66xxdata->prox_is_enable = 1;
|
||||
hyn_66xxdata->prox_state = 0;
|
||||
// ret = hyn_wr_reg(hyn_66xxdata,0xD004B01,3,NULL,0);
|
||||
break;
|
||||
case 0: //disable
|
||||
hyn_66xxdata->prox_is_enable = 0;
|
||||
hyn_66xxdata->prox_state = 0;
|
||||
// ret = hyn_wr_reg(hyn_66xxdata,0xD004B00,3,NULL,0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cst66xx_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
int ret = 0;
|
||||
HYN_INFO("set_workmode:%d",mode);
|
||||
hyn_66xxdata->work_mode = mode;
|
||||
if(mode != NOMAL_MODE){
|
||||
hyn_esdcheck_switch(hyn_66xxdata,DISABLE);
|
||||
}
|
||||
if(FAC_TEST_MODE == mode){
|
||||
cst66xx_rst();
|
||||
msleep(50);
|
||||
}
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD0000400,4,0,0); //disable lp i2c plu
|
||||
mdelay(1);
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD0000400,4,0,0);
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_irq_set(hyn_66xxdata,ENABLE);
|
||||
hyn_esdcheck_switch(hyn_66xxdata,ENABLE);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0000000,4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0000C00,4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0000100,4,0,0);
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0000C01,4,0,0);
|
||||
break;
|
||||
case LP_MODE:
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00004AB,4,0,0);
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
case RAWDATA_MODE:
|
||||
case BASELINE_MODE:
|
||||
case CALIBRATE_MODE:
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00002AB,4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00001AB,4,0,0); //enter debug mode
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00002AB,4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00000AB,4,0,0); //enter fac test
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_irq_set(hyn_66xxdata,DISABLE);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00022AB,4,0,0);
|
||||
break;
|
||||
case ENTER_BOOT_MODE:
|
||||
ret |= cst66xx_enter_boot();
|
||||
break;
|
||||
default :
|
||||
ret = -2;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int cst66xx_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst66xx_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst66xx_resum(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst66xx_rst();
|
||||
msleep(50);
|
||||
cst66xx_set_workmode(NOMAL_MODE,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cst66xx_rst(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
if(hyn_66xxdata->work_mode==ENTER_BOOT_MODE){
|
||||
hyn_set_i2c_addr(hyn_66xxdata,MAIN_I2C_ADDR);
|
||||
}
|
||||
gpio_set_value(hyn_66xxdata->plat_data.reset_gpio,0);
|
||||
msleep(2);
|
||||
gpio_set_value(hyn_66xxdata->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
static int cst66xx_wait_ready(u16 times,u8 ms,u16 reg,u16 check_vlue)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[4];
|
||||
while(times--){
|
||||
ret = hyn_wr_reg(hyn_66xxdata,reg,2,buf,2);
|
||||
if(0==ret && U8TO16(buf[0],buf[1])==check_vlue){
|
||||
return 0;
|
||||
}
|
||||
mdelay(ms);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int cst66xx_enter_boot(void)
|
||||
{
|
||||
int retry = 0,ret = 0;
|
||||
hyn_set_i2c_addr(hyn_66xxdata,BOOT_I2C_ADDR);
|
||||
while(++retry<20){
|
||||
cst66xx_rst();
|
||||
mdelay(12+retry);
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xA001A8,3,0,0);
|
||||
if(ret < 0){
|
||||
continue;
|
||||
}
|
||||
if(0==cst66xx_wait_ready(10,2,0xA002,0x22DD)){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int cst66xx_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[60];
|
||||
struct tp_info *ic = &hyn_66xxdata->hw_info;
|
||||
int ret = 0;
|
||||
int retry = 5;
|
||||
while(--retry){
|
||||
//get all config info
|
||||
ret |= cst66xx_set_workmode(NOMAL_MODE,ENABLE);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0030000,0x80|4,buf,50);
|
||||
if(ret == 0 && buf[3]==0xCA && buf[2]==0xCA) break;
|
||||
mdelay(1);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0000400,4,buf,0);
|
||||
}
|
||||
|
||||
if(ret || retry==0){
|
||||
HYN_ERROR("cst66xx_updata_tpinfo failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ic->fw_sensor_txnum = buf[48];
|
||||
ic->fw_sensor_rxnum = buf[49];
|
||||
ic->fw_key_num = buf[27];
|
||||
ic->fw_res_y = (buf[31]<<8)|buf[30];
|
||||
ic->fw_res_x = (buf[29]<<8)|buf[28];
|
||||
HYN_INFO("IC_info tx:%d rx:%d key:%d res-x:%d res-y:%d",ic->fw_sensor_txnum,ic->fw_sensor_rxnum,ic->fw_key_num,ic->fw_res_x,ic->fw_res_y);
|
||||
|
||||
ic->fw_project_id = U8TO32(buf[39],buf[38],buf[37],buf[36]);
|
||||
ic->fw_chip_type = U8TO32(buf[3],buf[2],buf[1],buf[0]);
|
||||
ic->fw_ver = U8TO32(buf[35],buf[34],buf[33],buf[32]);
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%04x checksum:%04x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 cst66xx_fread_word(u32 addr)
|
||||
{
|
||||
int ret;
|
||||
u8 rec_buf[4],retry;
|
||||
u32 read_word = 0;
|
||||
|
||||
retry = 3;
|
||||
while(retry--){
|
||||
ret = hyn_wr_reg(hyn_66xxdata,U8TO32(0xA0,0x06,(addr&0xFF),((addr>>8)&0xFF)),4,NULL,0); //set addr
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA0080400,4,0,0); //set len
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA00A0300,4,0,0); //?
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA004D2,3,NULL,0); //trig read
|
||||
if(ret ==0) break;
|
||||
}
|
||||
if(ret) return 0;
|
||||
|
||||
retry = 20;
|
||||
while(retry--){
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xA020,2,rec_buf,2);
|
||||
if(ret==0 && rec_buf[0]==0xD2 && rec_buf[1]==0x88){
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA040,2,rec_buf,4);
|
||||
if(ret ==0){
|
||||
read_word = U8TO32(rec_buf[3],rec_buf[2],rec_buf[1],rec_buf[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mdelay(1);
|
||||
}
|
||||
return read_word;
|
||||
}
|
||||
|
||||
static int read_checksum(u16 start_val,u16 start_addr,u16 len ,u32 *check_sum)
|
||||
{
|
||||
int ret,retry = 3;
|
||||
u8 buf[8] = {0};
|
||||
while(retry--){
|
||||
ret = hyn_wr_reg(hyn_66xxdata,U8TO32(0xA0,0x06,start_addr&0xFF,start_addr>>8),4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,U8TO32(0xA0,0x08,len&0xFF,len>>8),4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,U8TO32(0xA0,0x0A,start_val&0xFF,start_val>>8),4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA004D6,3,0,0);
|
||||
if(ret) continue;
|
||||
mdelay(len/0xc00 + 1);
|
||||
ret = cst66xx_wait_ready(20,2,0xA020,0xD688);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA040,2,buf,5);
|
||||
if(ret == 0 && buf[0] == 0xCA){
|
||||
*check_sum = U8TO32(buf[4],buf[3],buf[2],buf[1]);
|
||||
break;
|
||||
}
|
||||
else{
|
||||
ret = -1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return ret ? -1:0;
|
||||
}
|
||||
|
||||
static u32 cst66xx_read_checksum(void)
|
||||
{
|
||||
int ret = -1;
|
||||
u32 chipSum1 = 0,chipSum2 = 0,totalSum = 0;
|
||||
hyn_66xxdata->boot_is_pass = 0;
|
||||
if(0==read_checksum(0,0,0x9000,&chipSum1)){
|
||||
ret = read_checksum(1,0xb000,0x0ffc,&chipSum2);
|
||||
}
|
||||
if(ret ==0){
|
||||
totalSum = chipSum1 + chipSum2*2 - 0x55;
|
||||
hyn_66xxdata->boot_is_pass = 1;
|
||||
}
|
||||
HYN_INFO("chipSum1:%04x chipSum2:%04x totalSum:%04x",chipSum1,chipSum2,totalSum);
|
||||
return totalSum;
|
||||
}
|
||||
|
||||
static int cst66xx_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
u32 f_check_all,f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw + 35*1024; //35k
|
||||
int ret;
|
||||
struct tp_info *ic = &hyn_66xxdata->hw_info;
|
||||
|
||||
f_fw_project_id = U8TO32(p_data[39],p_data[38],p_data[37],p_data[36]);
|
||||
f_ictype = U8TO32(p_data[3],p_data[2],p_data[1],p_data[0]);
|
||||
f_fw_ver = U8TO32(p_data[35],p_data[34],p_data[33],p_data[32]);
|
||||
|
||||
p_data = p_fw + 40*1024;
|
||||
f_checksum = U8TO32(p_data[3],p_data[2],p_data[1],p_data[0]);
|
||||
HYN_INFO("Bin_info fw_project_id:%04x ictype:%04x fw_ver:%04x checksum:%04x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
|
||||
ret = cst66xx_updata_tpinfo(); //boot checksum pass, communicate failed not updata
|
||||
if(ret) HYN_ERROR("get tpinfo failed");
|
||||
|
||||
//check h file
|
||||
f_check_all = hyn_sum32(0x55,(u32*)p_fw,len/4);
|
||||
if(f_check_all != f_checksum){
|
||||
HYN_INFO(".h file checksum erro:%04x len:%d",f_check_all,len);
|
||||
return 0; //no need updata
|
||||
}
|
||||
|
||||
if(hyn_66xxdata->boot_is_pass ==0 //boot failed
|
||||
|| ( ret == 0 && f_ictype == ic->fw_chip_type && f_fw_project_id == ic->fw_project_id && f_fw_ver > ic->fw_ver ) // match new ver .h file
|
||||
){
|
||||
return 1; //need updata
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst66xx_erase_flash(u16 start_addr, u16 len, u16 type)
|
||||
{
|
||||
int ret = 0;
|
||||
// HYN_INFO("addr:%04x len:%04x",0xA0060000+U16REV(start_addr),0xA0080000+U16REV(len));
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xA0060000+U16REV(start_addr),4,0,0); //addr
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA0080000+U16REV(len),4,0,0); //len
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA00A0000+U16REV(type),4,0,0); //type
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA018CACA,4,0,0); //key
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA004E0,3,0,0); //trig
|
||||
if(ret) return -1;
|
||||
|
||||
mdelay(20); //wait finsh earse flash
|
||||
ret = cst66xx_wait_ready(100,1,0xA020,0xE088);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cst66xx_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
#define PKG_SIZE (1024)
|
||||
int i,ret = -1, retry_fw= 4,pak_num;
|
||||
u8 i2c_buf[PKG_SIZE+10] , *p_bin_addr;
|
||||
u16 eep_addr = 0, eep_len;
|
||||
u32 fw_checksum = 0;
|
||||
HYN_ENTER();
|
||||
HYN_INFO("len = %d",len);
|
||||
hyn_66xxdata->fw_updata_process = 0;
|
||||
if(len < cst66xx_BIN_SIZE){
|
||||
HYN_ERROR("bin len erro");
|
||||
goto UPDATA_END;
|
||||
}
|
||||
len = cst66xx_BIN_SIZE;
|
||||
if(0 == hyn_66xxdata->fw_file_name[0]){
|
||||
p_bin_addr = bin_addr + len;
|
||||
fw_checksum = U8TO32(p_bin_addr[3],p_bin_addr[2],p_bin_addr[1],p_bin_addr[0]);
|
||||
}
|
||||
else{
|
||||
ret = copy_for_updata(hyn_66xxdata,i2c_buf,cst66xx_BIN_SIZE,4);
|
||||
if(ret) goto UPDATA_END;
|
||||
fw_checksum = U8TO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);
|
||||
}
|
||||
HYN_INFO("fw_checksum_all:%04x",fw_checksum);
|
||||
hyn_irq_set(hyn_66xxdata,DISABLE);
|
||||
hyn_esdcheck_switch(hyn_66xxdata,DISABLE);
|
||||
pak_num = len/PKG_SIZE;
|
||||
while(--retry_fw){
|
||||
ret = cst66xx_enter_boot();
|
||||
if(ret){
|
||||
HYN_INFO("cst66xx_enter_boot faill");
|
||||
continue;
|
||||
}
|
||||
if(cst66xx_erase_flash(0x0000,0x8000,0x02)) continue; //erase 32k 0x0000~0x8000
|
||||
if(cst66xx_erase_flash(0x8000,0x1000,0x01)) continue; //erase 4k 0x8000~0x9000
|
||||
if(cst66xx_erase_flash(0xB000,0x1000,0x04)) continue; //erase 4k 0xB000~0xC000
|
||||
//start trans fw
|
||||
eep_addr = 0;
|
||||
eep_len = 0;
|
||||
p_bin_addr = bin_addr;
|
||||
for (i=0; i<pak_num; i++){
|
||||
ret = hyn_wr_reg(hyn_66xxdata,U8TO32(0xA0,0x06,eep_addr,eep_addr>>8),4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA0080004,4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,i>=36 ? 0xA00A0300:0xA00A0000,4,0,0);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xA018CACA,4,0,0);
|
||||
if(ret) continue;
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x40;
|
||||
if(0 == hyn_66xxdata->fw_file_name[0]){
|
||||
memcpy(i2c_buf + 2, bin_addr+eep_len, PKG_SIZE);
|
||||
}else{
|
||||
ret |= copy_for_updata(hyn_66xxdata,i2c_buf + 2,eep_len,PKG_SIZE);
|
||||
}
|
||||
ret |= hyn_write_data(hyn_66xxdata, i2c_buf,2, PKG_SIZE+2);
|
||||
msleep(5);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata, 0xA004E1, 3,0,0);
|
||||
|
||||
eep_len += PKG_SIZE;
|
||||
eep_addr += PKG_SIZE;
|
||||
if(0x9000 == eep_addr){
|
||||
eep_addr = 0xB000;
|
||||
}
|
||||
mdelay(20); //wait finsh
|
||||
cst66xx_wait_ready(100,1,0xA020,0xE188);
|
||||
hyn_66xxdata->fw_updata_process = i*100/pak_num;
|
||||
// HYN_INFO("FB_%d",hyn_66xxdata->fw_updata_process);
|
||||
}
|
||||
if(ret) continue;
|
||||
hyn_66xxdata->hw_info.ic_fw_checksum = cst66xx_read_checksum();
|
||||
if(fw_checksum == hyn_66xxdata->hw_info.ic_fw_checksum && 0 != hyn_66xxdata->boot_is_pass){
|
||||
break;
|
||||
}
|
||||
else{
|
||||
ret = -2;
|
||||
}
|
||||
}
|
||||
UPDATA_END:
|
||||
hyn_set_i2c_addr(hyn_66xxdata,MAIN_I2C_ADDR);
|
||||
cst66xx_rst();
|
||||
if(ret == 0){
|
||||
msleep(50);
|
||||
cst66xx_updata_tpinfo();
|
||||
hyn_66xxdata->fw_updata_process = 100;
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
hyn_66xxdata->fw_updata_process |= 0x80;
|
||||
HYN_ERROR("updata_fw failed fw_checksum:%#x ic_checksum:%#x",fw_checksum,hyn_66xxdata->hw_info.ic_fw_checksum);
|
||||
}
|
||||
hyn_irq_set(hyn_66xxdata,ENABLE);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u32 cst66xx_check_esd(void)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[4];
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD0040400,4,buf,4);
|
||||
if(ret){
|
||||
mdelay(1);
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD0040400,4,buf,4);
|
||||
}
|
||||
return ret==0 ? U8TO32(buf[3],buf[2],buf[1],buf[0]):-1;
|
||||
}
|
||||
|
||||
static int red_dbg_data(u8 *buf, u16 len ,u32 *cmd_list,u8 type)
|
||||
{
|
||||
struct tp_info *ic = &hyn_66xxdata->hw_info;
|
||||
int ret = 0;
|
||||
u16 read_len = (ic->fw_sensor_rxnum*ic->fw_sensor_txnum)*type;
|
||||
u16 total_len = (ic->fw_sensor_rxnum*ic->fw_sensor_txnum + ic->fw_sensor_txnum + ic->fw_sensor_rxnum)*type;
|
||||
if(total_len > len || read_len == 0){
|
||||
HYN_ERROR("buf too small or fw_sensor_rxnum fw_sensor_txnum erro");
|
||||
return -1;
|
||||
}
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,*cmd_list++,0x80|4,buf,read_len); //m cap
|
||||
buf += read_len;
|
||||
read_len = ic->fw_sensor_rxnum*type;
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,*cmd_list++,0x80|4,buf,read_len); //s rx cap
|
||||
buf += read_len;
|
||||
read_len = ic->fw_sensor_txnum*type;
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,*cmd_list++,0x80|4,buf,read_len); //s tx cap
|
||||
// ret |= hyn_wr_reg(hyn_66xxdata,0xD00002AB,4,0,0); //end
|
||||
return ret < 0 ? -1:total_len;
|
||||
}
|
||||
|
||||
static int cst66xx_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
int read_len = -1,ret = 0;
|
||||
HYN_ENTER();
|
||||
switch(hyn_66xxdata->work_mode){
|
||||
case DIFF_MODE:
|
||||
read_len = red_dbg_data(buf,len,(u32[]){0xD0120000,0xD01A0000,0xD0160000},2);
|
||||
break;
|
||||
case RAWDATA_MODE:
|
||||
read_len = red_dbg_data(buf,len,(u32[]){0xD0110000,0xD0190000,0xD0150000},2);
|
||||
break;
|
||||
case BASELINE_MODE:
|
||||
read_len = red_dbg_data(buf,len,(u32[]){0xD0130000,0xD01B0000,0xD0170000},2);
|
||||
break;
|
||||
case CALIBRATE_MODE:{
|
||||
u16 tmp_len = len/2;
|
||||
len /= 2;
|
||||
read_len = red_dbg_data(buf+tmp_len,tmp_len,(u32[]){0xD0140000,0xD0180000,0xD01c0000},1);
|
||||
if(read_len > 0){
|
||||
u8 *src_ptr = buf+tmp_len,tmp;
|
||||
s16 *des_ptr = (s16*)buf;
|
||||
tmp_len = read_len;
|
||||
while(tmp_len--){
|
||||
tmp = (*src_ptr++)&0x7F;
|
||||
*des_ptr++ = (tmp & 0x40) ? -(tmp&0x3F):tmp;
|
||||
}
|
||||
read_len *= 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
HYN_ERROR("work_mode:%d",hyn_66xxdata->work_mode);
|
||||
break;
|
||||
}
|
||||
// HYN_INFO("read_len:%d len:%d",(int)(sizeof(struct ts_frame)+read_len),len);
|
||||
if(read_len > 0 && len > (sizeof(struct ts_frame)+read_len)){
|
||||
ret = cst66xx_report();
|
||||
if(ret ==0){
|
||||
memcpy(buf+read_len+4,(void*)&hyn_66xxdata->rp_buf,sizeof(struct ts_frame));
|
||||
read_len += sizeof(struct ts_frame);
|
||||
}
|
||||
}
|
||||
else{
|
||||
ret = hyn_wr_reg(hyn_66xxdata,0xD00002AB,4,0,0); //end
|
||||
}
|
||||
return read_len;
|
||||
}
|
||||
|
||||
static int get_fac_test_data(u32 cmd ,u8 *buf, u16 len ,u8 rev)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = hyn_wr_reg(hyn_66xxdata,cmd,4,0,0);
|
||||
ret |= hyn_wait_irq_timeout(hyn_66xxdata,100);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD0120000,0x80|4,buf+rev,len);
|
||||
ret |= hyn_wr_reg(hyn_66xxdata,0xD00002AB,4,0,0);
|
||||
if(ret==0 && rev){
|
||||
len /= 2;
|
||||
while(len--){
|
||||
*buf = *(buf+2);
|
||||
buf += 2;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define FACTEST_PATH "/sdcard/hyn_fac_test_cfg.ini"
|
||||
#define FACTEST_LOG_PATH "/sdcard/hyn_fac_test.log"
|
||||
#define FACTEST_ITEM (MULTI_OPEN_TEST|MULTI_SHORT_TEST|MULTI_SCAP_TEST)
|
||||
|
||||
static int cst66xx_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
struct tp_info *ic = &hyn_66xxdata->hw_info;
|
||||
u16 mt_len = ic->fw_sensor_rxnum*ic->fw_sensor_txnum*2;
|
||||
u16 st_len = (ic->fw_sensor_txnum + ic->fw_sensor_rxnum)*2;
|
||||
u8 *rbuf = buf;
|
||||
int ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ENTER();
|
||||
if((mt_len*3 + st_len*2 + 4) > len || mt_len==0){
|
||||
HYN_ERROR("%s", mt_len ? "buf too small":" ic->fw_sensor_rxnum*ic->fw_sensor_txnum=0");
|
||||
return FAC_GET_DATA_FAIL;
|
||||
}
|
||||
if(get_fac_test_data(0xD0002000,rbuf,mt_len,0)){ //read open high data
|
||||
HYN_ERROR("read open high failed");
|
||||
goto TEST_ERRO;
|
||||
}
|
||||
rbuf += mt_len;
|
||||
if(get_fac_test_data(0xD0002100,rbuf,mt_len,0)){ //read open low data
|
||||
HYN_ERROR("read open low failed");
|
||||
goto TEST_ERRO;
|
||||
}
|
||||
rbuf += mt_len;
|
||||
if(get_fac_test_data(0xD0002300,rbuf,st_len,1)){ //read short test data
|
||||
HYN_ERROR("read fac short failed");
|
||||
goto TEST_ERRO;
|
||||
}
|
||||
//must rest
|
||||
rbuf += st_len;
|
||||
if(get_fac_test_data(0xD0002500,rbuf,st_len,0)){ ///read scap test data
|
||||
HYN_ERROR("read scap failed");
|
||||
goto TEST_ERRO;
|
||||
}
|
||||
////read data finlish start test
|
||||
ret = factory_multitest(hyn_66xxdata ,FACTEST_PATH, buf,(s16*)(rbuf+st_len),FACTEST_ITEM);
|
||||
|
||||
TEST_ERRO:
|
||||
if(0 == fac_test_log_save(FACTEST_LOG_PATH,hyn_66xxdata,(s16*)buf,ret,FACTEST_ITEM)){
|
||||
HYN_INFO("fac_test log save success");
|
||||
}
|
||||
cst66xx_resum();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
const struct hyn_ts_fuc cst66xx_fuc = {
|
||||
.tp_rest = cst66xx_rst,
|
||||
.tp_report = cst66xx_report,
|
||||
.tp_supend = cst66xx_supend,
|
||||
.tp_resum = cst66xx_resum,
|
||||
.tp_chip_init = cst66xx_init,
|
||||
.tp_updata_fw = cst66xx_updata_fw,
|
||||
.tp_set_workmode = cst66xx_set_workmode,
|
||||
.tp_check_esd = cst66xx_check_esd,
|
||||
.tp_prox_handle = cst66xx_prox_handle,
|
||||
.tp_get_dbg_data = cst66xx_get_dbg_data,
|
||||
.tp_get_test_result = cst66xx_get_test_result
|
||||
};
|
||||
|
||||
|
||||
|
||||
519
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst7xx.c
Normal file
519
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst7xx.c
Normal file
@@ -0,0 +1,519 @@
|
||||
#include "../hyn_core.h"
|
||||
#include "cst7xx_fw.h"
|
||||
|
||||
#define CUSTOM_SENSOR_NUM (10)
|
||||
|
||||
#define BOOT_I2C_ADDR (0x6A)
|
||||
#define MAIN_I2C_ADDR (0x15)
|
||||
#define RW_REG_LEN (2)
|
||||
#define CST7XX_BIN_SIZE (15*1024)
|
||||
static struct hyn_ts_data *hyn_7xxdata = NULL;
|
||||
|
||||
static int cst7xx_updata_judge(u8 *p_fw, u16 len);
|
||||
static u32 cst7xx_read_checksum(void);
|
||||
static int cst7xx_updata_tpinfo(void);
|
||||
static int cst7xx_enter_boot(void);
|
||||
static int cst7xx_set_workmode(enum work_mode mode,u8 enable);
|
||||
static void cst7xx_rst(void);
|
||||
|
||||
static int cst7xx_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[4];
|
||||
HYN_ENTER();
|
||||
hyn_7xxdata = ts_data;
|
||||
ret = cst7xx_enter_boot();
|
||||
if(ret == FALSE){
|
||||
HYN_ERROR("cst7xx_enter_boot failed");
|
||||
return FALSE;
|
||||
}
|
||||
hyn_7xxdata->fw_updata_addr = (u8*)fw_bin;
|
||||
hyn_7xxdata->fw_updata_len = CST7XX_BIN_SIZE;
|
||||
|
||||
hyn_7xxdata->hw_info.ic_fw_checksum = cst7xx_read_checksum();
|
||||
if(hyn_7xxdata->need_updata_fw ==0){
|
||||
hyn_wr_reg(hyn_7xxdata,0xA006EE,3,buf,0); //exit boot
|
||||
cst7xx_rst();
|
||||
mdelay(50);
|
||||
hyn_set_i2c_addr(hyn_7xxdata,MAIN_I2C_ADDR);
|
||||
ret = cst7xx_updata_tpinfo();
|
||||
cst7xx_set_workmode(NOMAL_MODE,0);
|
||||
hyn_7xxdata->need_updata_fw = cst7xx_updata_judge((u8*)fw_bin,CST7XX_BIN_SIZE);
|
||||
}
|
||||
if(hyn_7xxdata->need_updata_fw){
|
||||
HYN_INFO("need updata FW !!!");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int cst7xx_enter_boot(void)
|
||||
{
|
||||
uint8_t t;
|
||||
hyn_set_i2c_addr(hyn_7xxdata,BOOT_I2C_ADDR);
|
||||
for (t = 5;; t += 2)
|
||||
{
|
||||
int ok = FALSE;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
|
||||
if (t >= 15){
|
||||
return FALSE;
|
||||
}
|
||||
cst7xx_rst();
|
||||
mdelay(t);
|
||||
ok = hyn_wr_reg(hyn_7xxdata, 0xA001AA, 3, i2c_buf, 0);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
ok = hyn_wr_reg(hyn_7xxdata, 0xA003, 2, i2c_buf, 1);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
if (i2c_buf[0] != 0x55){
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int write_code(u8 *bin_addr,uint8_t retry)
|
||||
{
|
||||
uint16_t i,t;//,j;
|
||||
int ok = FALSE;
|
||||
u8 i2c_buf[512+2];
|
||||
|
||||
bin_addr+=6;
|
||||
|
||||
for ( i = 0;i < CST7XX_BIN_SIZE; i += 512)
|
||||
{
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x14;
|
||||
|
||||
i2c_buf[2] = i;
|
||||
i2c_buf[3] = i >> 8;
|
||||
ok = hyn_write_data(hyn_7xxdata, i2c_buf,RW_REG_LEN, 4);
|
||||
if (ok == FALSE){
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x18;
|
||||
if(0 == hyn_7xxdata->fw_file_name[0]){
|
||||
memcpy(i2c_buf + 2, bin_addr + i, 512);
|
||||
}
|
||||
else{
|
||||
ok = copy_for_updata(hyn_7xxdata,i2c_buf + 2,i+6,512);
|
||||
if(ok)break;
|
||||
}
|
||||
ok = hyn_write_data(hyn_7xxdata, i2c_buf,RW_REG_LEN, 514);
|
||||
if (ok == FALSE){
|
||||
break;
|
||||
}
|
||||
|
||||
ok = hyn_wr_reg(hyn_7xxdata, 0xA004EE, 3,i2c_buf,0);
|
||||
if (ok == FALSE){
|
||||
break;
|
||||
}
|
||||
|
||||
mdelay(100 * retry);
|
||||
|
||||
for (t = 0;; t ++)
|
||||
{
|
||||
if (t >= 50){
|
||||
return FALSE;
|
||||
}
|
||||
mdelay(5);
|
||||
|
||||
ok = hyn_wr_reg(hyn_7xxdata,0xA005,2,i2c_buf,1);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
if (i2c_buf[0] != 0x55){
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
static uint32_t cst7xx_read_checksum(void)
|
||||
{
|
||||
int ok = FALSE,t;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
uint32_t value = 0;
|
||||
int chip_checksum_ok = FALSE;
|
||||
// firmware checksum
|
||||
ok = hyn_wr_reg(hyn_7xxdata, 0xA00300, 3, i2c_buf, 0);
|
||||
if (ok == FALSE){
|
||||
return value;
|
||||
}
|
||||
mdelay(100);
|
||||
for (t = 0;; t += 10)
|
||||
{
|
||||
if (t >= 1000){
|
||||
//return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
mdelay(10);
|
||||
|
||||
ok = hyn_wr_reg(hyn_7xxdata, 0xA000, 2, i2c_buf, 1);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i2c_buf[0] == 1){
|
||||
chip_checksum_ok = TRUE;
|
||||
break;
|
||||
}
|
||||
else if (i2c_buf[0] == 2){
|
||||
chip_checksum_ok = FALSE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(chip_checksum_ok == FALSE){
|
||||
hyn_7xxdata->need_updata_fw = 1;
|
||||
}
|
||||
else{
|
||||
ok = hyn_wr_reg(hyn_7xxdata, 0xA008, 2, i2c_buf, 2);
|
||||
if (ok == FALSE){
|
||||
//return FALSE;
|
||||
return value;
|
||||
}
|
||||
value = i2c_buf[0];
|
||||
value |= (uint16_t)(i2c_buf[1]) << 8;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
static int cst7xx_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
int retry = 0;
|
||||
int ok_copy = TRUE;
|
||||
int ok = FALSE;
|
||||
u8 i2c_buf[4];
|
||||
u32 fw_checksum = 0;
|
||||
// len = len;
|
||||
HYN_ENTER();
|
||||
if(0 == hyn_7xxdata->fw_file_name[0]){
|
||||
fw_checksum =U8TO16(bin_addr[5],bin_addr[4]);
|
||||
}
|
||||
else{
|
||||
ok = copy_for_updata(hyn_7xxdata,i2c_buf,4,2);
|
||||
if(ok) goto UPDATA_END;
|
||||
fw_checksum = U8TO16(i2c_buf[1],i2c_buf[0]);
|
||||
}
|
||||
|
||||
hyn_irq_set(hyn_7xxdata,DISABLE);
|
||||
|
||||
for(retry = 1; retry<10; retry++){
|
||||
ok = cst7xx_enter_boot();
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
ok = write_code(bin_addr,retry);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
hyn_7xxdata->hw_info.ic_fw_checksum = cst7xx_read_checksum();
|
||||
if(fw_checksum != hyn_7xxdata->hw_info.ic_fw_checksum){
|
||||
continue;
|
||||
}
|
||||
|
||||
if(retry>=5){
|
||||
ok_copy = FALSE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
UPDATA_END:
|
||||
hyn_wr_reg(hyn_7xxdata,0xA006EE,3,i2c_buf,0); //exit boot
|
||||
mdelay(2);
|
||||
cst7xx_rst();
|
||||
mdelay(50);
|
||||
|
||||
hyn_set_i2c_addr(hyn_7xxdata,MAIN_I2C_ADDR);
|
||||
|
||||
if(ok_copy == TRUE){
|
||||
cst7xx_updata_tpinfo();
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
HYN_ERROR("updata_fw failed");
|
||||
}
|
||||
hyn_irq_set(hyn_7xxdata,ENABLE);
|
||||
|
||||
return ok_copy;
|
||||
}
|
||||
|
||||
|
||||
static int cst7xx_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[8];
|
||||
struct tp_info *ic = &hyn_7xxdata->hw_info;
|
||||
int ret = 0;
|
||||
|
||||
ret = hyn_wr_reg(hyn_7xxdata,0xA7,1,buf,4);
|
||||
if(ret == FALSE){
|
||||
HYN_ERROR("cst7xx_updata_tpinfo failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ic->fw_sensor_txnum = CUSTOM_SENSOR_NUM;
|
||||
ic->fw_sensor_rxnum = 0;
|
||||
ic->fw_key_num = 0;
|
||||
ic->fw_res_y = 0;
|
||||
ic->fw_res_x = 0;
|
||||
ic->fw_project_id = buf[1];
|
||||
ic->fw_chip_type = buf[0];
|
||||
ic->fw_ver = buf[2];
|
||||
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cst7xx_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
u32 f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw ;
|
||||
struct tp_info *ic = &hyn_7xxdata->hw_info;
|
||||
|
||||
f_fw_project_id = 0;
|
||||
f_ictype = 0;
|
||||
f_fw_ver = 0;
|
||||
|
||||
f_checksum = U8TO16(p_data[5],p_data[4]);
|
||||
|
||||
HYN_INFO("Bin_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
|
||||
if(f_checksum != ic->ic_fw_checksum ){
|
||||
return 1; //need updata
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
static int cst7xx_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
hyn_7xxdata->work_mode = mode;
|
||||
if(mode != NOMAL_MODE){
|
||||
hyn_esdcheck_switch(hyn_7xxdata,DISABLE);
|
||||
}
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_esdcheck_switch(hyn_7xxdata,ENABLE);
|
||||
hyn_irq_set(hyn_7xxdata,ENABLE);
|
||||
hyn_wr_reg(hyn_7xxdata,0xFE00,2,NULL,0);
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
hyn_wr_reg(hyn_7xxdata,0xD001,2,NULL,0);
|
||||
break;
|
||||
case LP_MODE:
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
case RAWDATA_MODE:
|
||||
hyn_wr_reg(hyn_7xxdata,0xFEF8,2,NULL,0);
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
//hyn_wr_reg(hyn_7xxdata,0xD119,2,NULL,0);
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_irq_set(hyn_7xxdata,DISABLE);
|
||||
hyn_wr_reg(hyn_7xxdata,0xA503,2,NULL,0);
|
||||
break;
|
||||
default :
|
||||
//hyn_esdcheck_switch(hyn_7xxdata,ENABLE);
|
||||
hyn_7xxdata->work_mode = NOMAL_MODE;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst7xx_prox_handle(u8 cmd)
|
||||
{
|
||||
int ret = 0;
|
||||
switch(cmd){
|
||||
case 1: //enable
|
||||
hyn_7xxdata->prox_is_enable = 1;
|
||||
hyn_7xxdata->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_7xxdata,0xB001,2,NULL,0);
|
||||
break;
|
||||
case 0: //disable
|
||||
hyn_7xxdata->prox_is_enable = 0;
|
||||
hyn_7xxdata->prox_state = 0;
|
||||
ret = hyn_wr_reg(hyn_7xxdata,0xB000,2,NULL,0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void cst7xx_rst(void)
|
||||
{
|
||||
gpio_set_value(hyn_7xxdata->plat_data.reset_gpio,0);
|
||||
msleep(5);
|
||||
gpio_set_value(hyn_7xxdata->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int cst7xx_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst7xx_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst7xx_resum(void)
|
||||
{
|
||||
cst7xx_rst();
|
||||
msleep(50);
|
||||
cst7xx_set_workmode(NOMAL_MODE,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst7xx_report(void)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint8_t i2c_buf[3+6*MAX_POINTS_REPORT] = {0};
|
||||
uint16_t x,y;
|
||||
uint8_t id = 0,index = 0;
|
||||
struct hyn_plat_data *dt = &hyn_7xxdata->plat_data;
|
||||
|
||||
memset(&hyn_7xxdata->rp_buf,0,sizeof(hyn_7xxdata->rp_buf));
|
||||
hyn_7xxdata->rp_buf.report_need = REPORT_NONE;
|
||||
|
||||
|
||||
if(hyn_7xxdata->work_mode == GESTURE_MODE){
|
||||
static const uint8_t ges_map[][2] = {{0x24,IDX_POWER},{0x22,IDX_UP},{0x23,IDX_DOWN},{0x20,IDX_LEFT},{0x21,IDX_RIGHT},
|
||||
{0x34,IDX_C},{0x33,IDX_e},{0x32,IDX_M},{0x30,IDX_O},{0x46,IDX_S},{0x54,IDX_V},{0x31,IDX_W},{0x65,IDX_Z}};
|
||||
if(hyn_wr_reg(hyn_7xxdata,0xD3,1,i2c_buf,1)){
|
||||
goto FAILD_END;
|
||||
}
|
||||
index = sizeof(ges_map)/2;
|
||||
hyn_7xxdata->gesture_id = IDX_NULL;
|
||||
for(i=0; i<index; i++){
|
||||
if(ges_map[i][0] == i2c_buf[0]){
|
||||
hyn_7xxdata->gesture_id = ges_map[i][1];
|
||||
hyn_7xxdata->rp_buf.report_need = REPORT_GES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else{
|
||||
if(hyn_wr_reg(hyn_7xxdata,0x00,1,i2c_buf,(3+6*2))){
|
||||
goto FAILD_END;
|
||||
}
|
||||
if(hyn_7xxdata->prox_is_enable){
|
||||
u8 state=0;
|
||||
if(i2c_buf[1]==0xE0 || i2c_buf[1]==0){
|
||||
state = PS_FAR_AWAY;
|
||||
}
|
||||
else if(i2c_buf[1]==0xC0){
|
||||
state = PS_NEAR;
|
||||
}
|
||||
if(hyn_7xxdata->prox_state != state){
|
||||
hyn_7xxdata->rp_buf.report_need = REPORT_PROX;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
hyn_7xxdata->rp_buf.rep_num = i2c_buf[2];
|
||||
for(i = 0 ; i < 2 ; i++){
|
||||
id = (i2c_buf[5 + i*6] & 0xf0)>>4;
|
||||
if(id > 1) continue;
|
||||
x = (i2c_buf[3 + i*6] & 0x0f);
|
||||
x = (x<<8) + i2c_buf[4 + i*6];
|
||||
|
||||
y = (i2c_buf[5 + i*6] & 0x0f);
|
||||
y = (y<<8) + i2c_buf[6 + i*6];
|
||||
|
||||
hyn_7xxdata->rp_buf.pos_info[index].pos_id = id;
|
||||
hyn_7xxdata->rp_buf.pos_info[index].event = (i2c_buf[3 + i*6] & 0x40) ? 0:1;
|
||||
hyn_7xxdata->rp_buf.pos_info[index].pos_x = x ;
|
||||
hyn_7xxdata->rp_buf.pos_info[index].pos_y = y ;
|
||||
// hyn_7xxdata->rp_buf.pos_info[index].pres_z = (i2c_buf[7 + i*6] <<8) + i2c_buf[8 + i*6] ;
|
||||
hyn_7xxdata->rp_buf.pos_info[index].pres_z = 3+(x&0x03); //press mast chang
|
||||
index++;
|
||||
hyn_7xxdata->rp_buf.report_need = REPORT_POS;
|
||||
}
|
||||
|
||||
if(dt->key_num){
|
||||
i = dt->key_num;
|
||||
while(i){
|
||||
i--;
|
||||
if(dt->key_y_coords ==hyn_7xxdata->rp_buf.pos_info[0].pos_y && dt->key_x_coords[i] == hyn_7xxdata->rp_buf.pos_info[0].pos_x){
|
||||
hyn_7xxdata->rp_buf.key_id = i;
|
||||
hyn_7xxdata->rp_buf.key_state = hyn_7xxdata->rp_buf.pos_info[0].event;
|
||||
hyn_7xxdata->rp_buf.report_need = REPORT_KEY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
FAILD_END:
|
||||
HYN_ERROR("read report data failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 cst7xx_check_esd(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int cst7xx_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
int ret = -1,read_len = hyn_7xxdata->hw_info.fw_sensor_txnum*2;
|
||||
if(len < hyn_7xxdata->hw_info.fw_sensor_txnum*2){
|
||||
HYN_ERROR("buf too small");
|
||||
return -1;
|
||||
}
|
||||
switch (hyn_7xxdata->work_mode){
|
||||
case DIFF_MODE:
|
||||
ret = hyn_wr_reg(hyn_7xxdata, 0x41, 1,buf,read_len);
|
||||
break;
|
||||
case RAWDATA_MODE:
|
||||
ret = hyn_wr_reg(hyn_7xxdata, 0x61, 1,buf,read_len);
|
||||
break;
|
||||
default:
|
||||
HYN_ERROR("work_mode:%d",hyn_7xxdata->work_mode);
|
||||
break;
|
||||
}
|
||||
return ret==0 ? read_len:-1;
|
||||
}
|
||||
|
||||
|
||||
static int cst7xx_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const struct hyn_ts_fuc cst7xx_fuc = {
|
||||
.tp_rest = cst7xx_rst,
|
||||
.tp_report = cst7xx_report,
|
||||
.tp_supend = cst7xx_supend,
|
||||
.tp_resum = cst7xx_resum,
|
||||
.tp_chip_init = cst7xx_init,
|
||||
.tp_updata_fw = cst7xx_updata_fw,
|
||||
.tp_set_workmode = cst7xx_set_workmode,
|
||||
.tp_check_esd = cst7xx_check_esd,
|
||||
.tp_prox_handle = cst7xx_prox_handle,
|
||||
.tp_get_dbg_data = cst7xx_get_dbg_data,
|
||||
.tp_get_test_result = cst7xx_get_test_result
|
||||
};
|
||||
|
||||
|
||||
485
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst8xxT.c
Normal file
485
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst8xxT.c
Normal file
@@ -0,0 +1,485 @@
|
||||
#include "../hyn_core.h"
|
||||
#include "cst8xxT_fw.h"
|
||||
|
||||
|
||||
#define CUSTOM_SENSOR_NUM (10)
|
||||
|
||||
#define BOOT_I2C_ADDR (0x6A)
|
||||
#define MAIN_I2C_ADDR (0x15)
|
||||
#define RW_REG_LEN (2)
|
||||
|
||||
#define CST8xxT_BIN_SIZE (15*1024)
|
||||
static struct hyn_ts_data *hyn_8xxTdata = NULL;
|
||||
|
||||
static int cst8xxT_updata_judge(u8 *p_fw, u16 len);
|
||||
static u32 cst8xxT_read_checksum(void);
|
||||
static int cst8xxT_updata_tpinfo(void);
|
||||
static int cst8xxT_enter_boot(void);
|
||||
static int cst8xxT_set_workmode(enum work_mode mode,u8 enable);
|
||||
static void cst8xxT_rst(void);
|
||||
|
||||
static int cst8xxT_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 buf[4];
|
||||
HYN_ENTER();
|
||||
hyn_8xxTdata = ts_data;
|
||||
ret = cst8xxT_enter_boot();
|
||||
if(ret == FALSE){
|
||||
HYN_ERROR("cst8xxT_enter_boot failed");
|
||||
return FALSE;
|
||||
}
|
||||
hyn_8xxTdata->fw_updata_addr = (u8*)fw_bin;
|
||||
hyn_8xxTdata->fw_updata_len = CST8xxT_BIN_SIZE;
|
||||
|
||||
hyn_8xxTdata->hw_info.ic_fw_checksum = cst8xxT_read_checksum();
|
||||
if(hyn_8xxTdata->need_updata_fw ==0){
|
||||
hyn_wr_reg(hyn_8xxTdata,0xA006EE,3,buf,0); //exit boot
|
||||
cst8xxT_rst();
|
||||
mdelay(50);
|
||||
hyn_set_i2c_addr(hyn_8xxTdata,MAIN_I2C_ADDR);
|
||||
ret = cst8xxT_updata_tpinfo();
|
||||
cst8xxT_set_workmode(NOMAL_MODE,0);
|
||||
hyn_8xxTdata->need_updata_fw = cst8xxT_updata_judge((u8*)fw_bin,CST8xxT_BIN_SIZE);
|
||||
}
|
||||
if(hyn_8xxTdata->need_updata_fw){
|
||||
HYN_INFO("need updata FW !!!");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int cst8xxT_enter_boot(void)
|
||||
{
|
||||
uint8_t t;
|
||||
hyn_set_i2c_addr(hyn_8xxTdata,BOOT_I2C_ADDR);
|
||||
for (t = 5;; t += 2)
|
||||
{
|
||||
int ok = FALSE;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
|
||||
if (t >= 15){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
cst8xxT_rst();
|
||||
mdelay(t);
|
||||
|
||||
ok = hyn_wr_reg(hyn_8xxTdata, 0xA001AB, 3, i2c_buf, 0);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
ok = hyn_wr_reg(hyn_8xxTdata, 0xA003, 2, i2c_buf, 1);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i2c_buf[0] != 0xC1){
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int write_code(u8 *bin_addr,uint8_t retry)
|
||||
{
|
||||
uint16_t i,t;//,j;
|
||||
int ok = FALSE;
|
||||
u8 i2c_buf[512+2];
|
||||
|
||||
bin_addr+=6;
|
||||
|
||||
for ( i = 0;i < CST8xxT_BIN_SIZE; i += 512)
|
||||
{
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x14;
|
||||
i2c_buf[2] = i;
|
||||
i2c_buf[3] = i >> 8;
|
||||
ok = hyn_write_data(hyn_8xxTdata, i2c_buf,RW_REG_LEN, 4);
|
||||
if (ok == FALSE){
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x18;
|
||||
if(0 == hyn_8xxTdata->fw_file_name[0]){
|
||||
memcpy(i2c_buf + 2, bin_addr + i, 512);
|
||||
}
|
||||
else{
|
||||
ok = copy_for_updata(hyn_8xxTdata,i2c_buf + 2,i+6,512);
|
||||
if(ok)break;
|
||||
}
|
||||
ok = hyn_write_data(hyn_8xxTdata, i2c_buf,RW_REG_LEN, 514);
|
||||
if (ok == FALSE){
|
||||
break;
|
||||
}
|
||||
|
||||
ok = hyn_wr_reg(hyn_8xxTdata, 0xA004EE, 3,i2c_buf,0);
|
||||
if (ok == FALSE){
|
||||
break;
|
||||
}
|
||||
|
||||
mdelay(100 * retry);
|
||||
|
||||
for (t = 0;; t ++)
|
||||
{
|
||||
if (t >= 50){
|
||||
return FALSE;
|
||||
}
|
||||
mdelay(5);
|
||||
|
||||
ok = hyn_wr_reg(hyn_8xxTdata,0xA005,2,i2c_buf,1);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
if (i2c_buf[0] != 0x55){
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
static uint32_t cst8xxT_read_checksum(void)
|
||||
{
|
||||
int ok = FALSE,t;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
uint32_t value = 0;
|
||||
int chip_checksum_ok = FALSE;
|
||||
// firmware checksum
|
||||
ok = hyn_wr_reg(hyn_8xxTdata, 0xA00300, 3, i2c_buf, 0);
|
||||
if (ok == FALSE){
|
||||
return value;
|
||||
}
|
||||
|
||||
mdelay(100);
|
||||
|
||||
for (t = 0;; t += 10)
|
||||
{
|
||||
if (t >= 1000){
|
||||
//return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
mdelay(10);
|
||||
|
||||
ok = hyn_wr_reg(hyn_8xxTdata, 0xA000, 2, i2c_buf, 1);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i2c_buf[0] == 1){
|
||||
chip_checksum_ok = TRUE;
|
||||
break;
|
||||
}
|
||||
else if (i2c_buf[0] == 2){
|
||||
chip_checksum_ok = FALSE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(chip_checksum_ok == FALSE){
|
||||
hyn_8xxTdata->need_updata_fw = 1;
|
||||
}
|
||||
else{
|
||||
ok = hyn_wr_reg(hyn_8xxTdata, 0xA008, 2, i2c_buf, 2);
|
||||
if (ok == FALSE){
|
||||
//return FALSE;
|
||||
return value;
|
||||
}
|
||||
value = i2c_buf[0];
|
||||
value |= (uint16_t)(i2c_buf[1]) << 8;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
static int cst8xxT_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
int retry = 0;
|
||||
int ok_copy = TRUE;
|
||||
int ok = FALSE;
|
||||
u8 i2c_buf[4];
|
||||
u32 fw_checksum = 0;
|
||||
// len = len;
|
||||
HYN_ENTER();
|
||||
if(0 == hyn_8xxTdata->fw_file_name[0]){
|
||||
fw_checksum =U8TO16(bin_addr[5],bin_addr[4]);
|
||||
}
|
||||
else{
|
||||
ok = copy_for_updata(hyn_8xxTdata,i2c_buf,4,2);
|
||||
if(ok) goto UPDATA_END;
|
||||
fw_checksum = U8TO16(i2c_buf[1],i2c_buf[0]);
|
||||
}
|
||||
hyn_irq_set(hyn_8xxTdata,DISABLE);
|
||||
|
||||
for(retry = 1; retry<10; retry++){
|
||||
ok = cst8xxT_enter_boot();
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
ok = write_code(bin_addr,retry);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
hyn_8xxTdata->hw_info.ic_fw_checksum = cst8xxT_read_checksum();
|
||||
if(fw_checksum != hyn_8xxTdata->hw_info.ic_fw_checksum){
|
||||
continue;
|
||||
}
|
||||
|
||||
if(retry>=5){
|
||||
ok_copy = FALSE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
UPDATA_END:
|
||||
hyn_wr_reg(hyn_8xxTdata,0xA006EE,3,i2c_buf,0); //exit boot
|
||||
mdelay(2);
|
||||
cst8xxT_rst();
|
||||
mdelay(50);
|
||||
|
||||
hyn_set_i2c_addr(hyn_8xxTdata,MAIN_I2C_ADDR);
|
||||
if(ok_copy == TRUE){
|
||||
cst8xxT_updata_tpinfo();
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
HYN_ERROR("updata_fw failed");
|
||||
}
|
||||
|
||||
hyn_irq_set(hyn_8xxTdata,ENABLE);
|
||||
|
||||
return ok_copy;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static int cst8xxT_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[8];
|
||||
struct tp_info *ic = &hyn_8xxTdata->hw_info;
|
||||
int ret = 0;
|
||||
|
||||
ret = hyn_wr_reg(hyn_8xxTdata,0xA7,1,buf,4);
|
||||
if(ret == FALSE){
|
||||
HYN_ERROR("cst8xxT_updata_tpinfo failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ic->fw_sensor_txnum = CUSTOM_SENSOR_NUM;
|
||||
ic->fw_sensor_rxnum = 0;
|
||||
ic->fw_key_num = 0;
|
||||
ic->fw_res_y = 0;
|
||||
ic->fw_res_x = 0;
|
||||
ic->fw_project_id = buf[1];
|
||||
ic->fw_chip_type = buf[0];
|
||||
ic->fw_ver = buf[2];
|
||||
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cst8xxT_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
u32 f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw ;
|
||||
struct tp_info *ic = &hyn_8xxTdata->hw_info;
|
||||
|
||||
f_checksum = U8TO16(p_data[5],p_data[4]);
|
||||
|
||||
p_data = p_fw + 6 + CST8xxT_BIN_SIZE - 1 - 15 ;
|
||||
|
||||
f_ictype = p_data[0];
|
||||
f_fw_project_id = (p_data[1]<<24) + (p_data[2]<<16) + (p_data[3]<<8) + (p_data[4]<<0);
|
||||
f_fw_ver = p_data[5];
|
||||
|
||||
HYN_INFO("Bin_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
|
||||
if(f_checksum != ic->ic_fw_checksum && f_fw_ver >= ic->fw_ver){
|
||||
return 1; //need updata
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
|
||||
static int cst8xxT_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
hyn_8xxTdata->work_mode = mode;
|
||||
if(mode != NOMAL_MODE){
|
||||
hyn_esdcheck_switch(hyn_8xxTdata,DISABLE);
|
||||
}
|
||||
if(hyn_wr_reg(hyn_8xxTdata,0x00,1,NULL,0)){ //check_lp mode
|
||||
cst8xxT_rst();
|
||||
mdelay(80);
|
||||
}
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_esdcheck_switch(hyn_8xxTdata,ENABLE);
|
||||
hyn_irq_set(hyn_8xxTdata,ENABLE);
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
hyn_wr_reg(hyn_8xxTdata,0xE501,2,NULL,0);
|
||||
break;
|
||||
case LP_MODE:
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
case RAWDATA_MODE:
|
||||
hyn_wr_reg(hyn_8xxTdata,0xFEF8,2,NULL,0);
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
//hyn_wr_reg(hyn_8xxTdata,0xD119,2,NULL,0);
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_irq_set(hyn_8xxTdata,DISABLE);
|
||||
hyn_wr_reg(hyn_8xxTdata,0xE503,2,NULL,0);
|
||||
break;
|
||||
default :
|
||||
//hyn_esdcheck_switch(hyn_8xxTdata,ENABLE);
|
||||
hyn_8xxTdata->work_mode = NOMAL_MODE;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cst8xxT_rst(void)
|
||||
{
|
||||
gpio_set_value(hyn_8xxTdata->plat_data.reset_gpio,0);
|
||||
msleep(5);
|
||||
gpio_set_value(hyn_8xxTdata->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
static int cst8xxT_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst8xxT_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst8xxT_resum(void)
|
||||
{
|
||||
cst8xxT_rst();
|
||||
msleep(50);
|
||||
cst8xxT_set_workmode(NOMAL_MODE,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int cst8xxT_report(void)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint8_t i2c_buf[3+6*MAX_POINTS_REPORT] = {0};
|
||||
uint16_t x,y;
|
||||
uint8_t id = 0,index = 0;
|
||||
struct hyn_plat_data *dt = &hyn_8xxTdata->plat_data;
|
||||
|
||||
memset(&hyn_8xxTdata->rp_buf,0,sizeof(hyn_8xxTdata->rp_buf));
|
||||
hyn_8xxTdata->rp_buf.report_need = REPORT_NONE;
|
||||
|
||||
if(hyn_wr_reg(hyn_8xxTdata,0x00,1,i2c_buf,(3+6*2))){
|
||||
goto FAILD_END;
|
||||
}
|
||||
|
||||
|
||||
hyn_8xxTdata->gesture_id = i2c_buf[1];
|
||||
hyn_8xxTdata->rp_buf.rep_num = i2c_buf[2];
|
||||
// HYN_INFO("rep_num = %d",hyn_8xxTdata->rp_buf.rep_num);
|
||||
for(i = 0 ; i < 2 ; i++)
|
||||
{
|
||||
id = (i2c_buf[5 + i*6] & 0xf0)>>4;
|
||||
if(id > 1) continue;
|
||||
|
||||
x = (i2c_buf[3 + i*6] & 0x0f);
|
||||
x = (x<<8) + i2c_buf[4 + i*6];
|
||||
|
||||
y = (i2c_buf[5 + i*6] & 0x0f);
|
||||
y = (y<<8) + i2c_buf[6 + i*6];
|
||||
|
||||
hyn_8xxTdata->rp_buf.pos_info[index].pos_id = id;
|
||||
hyn_8xxTdata->rp_buf.pos_info[index].event = (i2c_buf[3 + i*6] & 0x40) ? 0:1;
|
||||
hyn_8xxTdata->rp_buf.pos_info[index].pos_x = x ;
|
||||
hyn_8xxTdata->rp_buf.pos_info[index].pos_y = y ;
|
||||
// hyn_8xxTdata->rp_buf.pos_info[index].pres_z = (i2c_buf[7 + i*6] <<8) + i2c_buf[8 + i*6] ;
|
||||
hyn_8xxTdata->rp_buf.pos_info[index].pres_z = 3+(x&0x03); //press mast chang
|
||||
index++;
|
||||
}
|
||||
if(index != 0) hyn_8xxTdata->rp_buf.report_need = REPORT_POS;
|
||||
if(dt->key_num){
|
||||
i = dt->key_num;
|
||||
while(i){
|
||||
i--;
|
||||
if(dt->key_y_coords ==hyn_8xxTdata->rp_buf.pos_info[0].pos_y && dt->key_x_coords[i] == hyn_8xxTdata->rp_buf.pos_info[0].pos_x){
|
||||
hyn_8xxTdata->rp_buf.key_id = i;
|
||||
hyn_8xxTdata->rp_buf.key_state = hyn_8xxTdata->rp_buf.pos_info[0].event;
|
||||
hyn_8xxTdata->rp_buf.report_need = REPORT_KEY;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
FAILD_END:
|
||||
HYN_ERROR("read report data failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 cst8xxT_check_esd(void)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cst8xxT_prox_handle(u8 cmd)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int cst8xxT_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
int ret = -1,read_len = hyn_8xxTdata->hw_info.fw_sensor_txnum*2;
|
||||
if(len < hyn_8xxTdata->hw_info.fw_sensor_txnum*2){
|
||||
HYN_ERROR("buf too small");
|
||||
return -1;
|
||||
}
|
||||
switch (hyn_8xxTdata->work_mode){
|
||||
case DIFF_MODE:
|
||||
ret = hyn_wr_reg(hyn_8xxTdata, 0x41, 1,buf,read_len);
|
||||
break;
|
||||
case RAWDATA_MODE:
|
||||
ret = hyn_wr_reg(hyn_8xxTdata, 0x61, 1,buf,read_len);
|
||||
break;
|
||||
default:
|
||||
HYN_ERROR("work_mode:%d",hyn_8xxTdata->work_mode);
|
||||
break;
|
||||
}
|
||||
return ret==0 ? read_len:-1;
|
||||
}
|
||||
|
||||
static int cst8xxT_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct hyn_ts_fuc cst8xxT_fuc = {
|
||||
.tp_rest = cst8xxT_rst,
|
||||
.tp_report = cst8xxT_report,
|
||||
.tp_supend = cst8xxT_supend,
|
||||
.tp_resum = cst8xxT_resum,
|
||||
.tp_chip_init = cst8xxT_init,
|
||||
.tp_updata_fw = cst8xxT_updata_fw,
|
||||
.tp_set_workmode = cst8xxT_set_workmode,
|
||||
.tp_check_esd = cst8xxT_check_esd,
|
||||
.tp_prox_handle = cst8xxT_prox_handle,
|
||||
.tp_get_dbg_data = cst8xxT_get_dbg_data,
|
||||
.tp_get_test_result = cst8xxT_get_test_result
|
||||
};
|
||||
|
||||
|
||||
985
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst92xx.c
Normal file
985
linux_5.10/drivers/input/touchscreen/hyn/hyn_chips/hyn_cst92xx.c
Normal file
@@ -0,0 +1,985 @@
|
||||
#include "../hyn_core.h"
|
||||
#include "cst92xx_fw.h"
|
||||
|
||||
#define BOOT_I2C_ADDR (0x5A)
|
||||
#define MAIN_I2C_ADDR (0x5A)
|
||||
#define RW_REG_LEN (2)
|
||||
|
||||
#define CST92XX_BIN_SIZE (0x7F80)
|
||||
|
||||
#define HYNITRON_PROGRAM_PAGE_SIZE (128)
|
||||
|
||||
static struct hyn_ts_data *hyn_92xxdata = NULL;
|
||||
|
||||
|
||||
static const struct hyn_chip_series hyn_6xx_fw[] = {
|
||||
{0xCACA9217,0xffffffff,"cst9217",(u8*)fw_bin},//if PART_NO_EN==0 use default chip
|
||||
{0xCACA9220,0xffffffff,"cst9220",(u8*)fw_bin},
|
||||
{0,0,NULL}
|
||||
};
|
||||
|
||||
static int cst92xx_updata_judge(u8 *p_fw, u16 len);
|
||||
static u32 cst92xx_read_checksum(void);
|
||||
static int cst92xx_updata_tpinfo(void);
|
||||
static int cst92xx_enter_boot(void);
|
||||
static void cst92xx_rst(void);
|
||||
static int cst92xx_set_workmode(enum work_mode mode,u8 enable);
|
||||
static int cst92xx_read_chip_id(void);
|
||||
|
||||
static int cst92xx_init(struct hyn_ts_data* ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
HYN_ENTER();
|
||||
hyn_92xxdata = ts_data;
|
||||
hyn_set_i2c_addr(hyn_92xxdata,BOOT_I2C_ADDR);
|
||||
ret = cst92xx_read_chip_id();
|
||||
if(ret == FALSE){
|
||||
HYN_INFO("cst92xx_read_chip_id failed");
|
||||
return FALSE;
|
||||
}
|
||||
hyn_92xxdata->fw_updata_addr = (u8*)fw_bin;
|
||||
hyn_92xxdata->fw_updata_len = CST92XX_BIN_SIZE;
|
||||
hyn_92xxdata->need_updata_fw = cst92xx_updata_judge((u8*)fw_bin,CST92XX_BIN_SIZE);
|
||||
if(hyn_92xxdata->need_updata_fw){
|
||||
HYN_INFO("need updata FW !!!");
|
||||
}
|
||||
cst92xx_rst();
|
||||
msleep(40);
|
||||
ret = cst92xx_updata_tpinfo();
|
||||
if(ret == FALSE){
|
||||
HYN_INFO("cst92xx_updata_tpinfo failed");
|
||||
}
|
||||
HYN_INFO("cst92xx_init done !!!");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int cst92xx_enter_boot(void)
|
||||
{
|
||||
int ok = FALSE,t;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
|
||||
for (t = 10;; t += 2)
|
||||
{
|
||||
if (t >= 30){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
cst92xx_rst();
|
||||
mdelay(t);
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA001AA, 3, i2c_buf, 0);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
mdelay(1);
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA002, 2, i2c_buf, 2);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((i2c_buf[0] == 0x55) && (i2c_buf[1] == 0xB0)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA00100, 3, i2c_buf, 0);
|
||||
if(ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int erase_all_mem(void)
|
||||
{
|
||||
int ok = FALSE,t;
|
||||
u8 i2c_buf[8];
|
||||
|
||||
//erase_all_mem
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA0140000, 4, i2c_buf, 0);
|
||||
if (ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA00C807F, 4, i2c_buf, 0);
|
||||
if (ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA004EC, 3, i2c_buf, 0);
|
||||
if (ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mdelay(300);
|
||||
for (t = 0;; t += 10) {
|
||||
if (t >= 1000) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mdelay(10);
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata, 0xA005, 2, i2c_buf, 1);
|
||||
if (ok == FALSE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i2c_buf[0] == 0x88) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static int write_mem_page(uint16_t addr, uint8_t *buf, uint16_t len)
|
||||
{
|
||||
int ok = FALSE,t;
|
||||
uint8_t i2c_buf[1024+2] = {0};
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x0C;
|
||||
i2c_buf[2] = len;
|
||||
i2c_buf[3] = len >> 8;
|
||||
//ok = hyn_i2c_write_r16(HYN_BOOT_I2C_ADDR, 0xA00C, i2c_buf, 2);
|
||||
ok = hyn_write_data(hyn_92xxdata, i2c_buf,RW_REG_LEN, 4);
|
||||
if(ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x14;
|
||||
i2c_buf[2] = addr;
|
||||
i2c_buf[3] = addr >> 8;
|
||||
ok = hyn_write_data(hyn_92xxdata, i2c_buf,RW_REG_LEN, 4);
|
||||
if(ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x18;
|
||||
memcpy(i2c_buf + 2, buf, len);
|
||||
ok = hyn_write_data(hyn_92xxdata, i2c_buf,RW_REG_LEN, len+2);
|
||||
if(ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xA004EE,3,i2c_buf,0);
|
||||
if(ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (t = 0;; t += 10) {
|
||||
if (t >= 1000) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mdelay(5);
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xA005,2,i2c_buf,1);
|
||||
if(ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i2c_buf[0] == 0x55) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int write_code(u8 *bin_addr,uint8_t retry)
|
||||
{
|
||||
uint8_t data[HYNITRON_PROGRAM_PAGE_SIZE+4];//= (uint8_t *)bin_addr;
|
||||
uint16_t addr = 0;
|
||||
uint16_t remain_len = CST92XX_BIN_SIZE;
|
||||
int ret;
|
||||
|
||||
while (remain_len > 0) {
|
||||
uint16_t cur_len = remain_len;
|
||||
if (cur_len > HYNITRON_PROGRAM_PAGE_SIZE) {
|
||||
cur_len = HYNITRON_PROGRAM_PAGE_SIZE;
|
||||
}
|
||||
|
||||
if(0 == hyn_92xxdata->fw_file_name[0]){
|
||||
memcpy(data, bin_addr + addr, HYNITRON_PROGRAM_PAGE_SIZE);
|
||||
}else{
|
||||
ret = copy_for_updata(hyn_92xxdata,data,addr,HYNITRON_PROGRAM_PAGE_SIZE);
|
||||
if(ret == FALSE){
|
||||
HYN_ERROR("copy_for_updata error");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
//HYN_INFO("write_code addr 0x%x 0x%x",addr,*data);
|
||||
if (write_mem_page(addr, data, cur_len) == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
//data += cur_len;
|
||||
addr += cur_len;
|
||||
remain_len -= cur_len;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static uint32_t cst92xx_read_checksum(void)
|
||||
{
|
||||
int ok = FALSE;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
uint32_t chip_checksum = 0;
|
||||
uint8_t retry = 5;
|
||||
|
||||
hyn_92xxdata->boot_is_pass = 0;
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xA00300,3,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
mdelay(2);
|
||||
while(retry--){
|
||||
mdelay(5);
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xA000,2,i2c_buf,1);
|
||||
if (ok == FALSE) {
|
||||
continue;
|
||||
}
|
||||
if(i2c_buf[0]!=0) break;
|
||||
}
|
||||
|
||||
mdelay(1);
|
||||
if(i2c_buf[0] == 0x01){
|
||||
hyn_92xxdata->boot_is_pass = 1;
|
||||
memset(i2c_buf,0,sizeof(i2c_buf));
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xA008,2,i2c_buf,4);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
chip_checksum = ((uint32_t)(i2c_buf[0])) |
|
||||
(((uint32_t)(i2c_buf[1])) << 8) |
|
||||
(((uint32_t)(i2c_buf[2])) << 16) |
|
||||
(((uint32_t)(i2c_buf[3])) << 24);
|
||||
}
|
||||
else{
|
||||
hyn_92xxdata->need_updata_fw = 1;
|
||||
}
|
||||
|
||||
return chip_checksum;
|
||||
}
|
||||
|
||||
|
||||
static int cst92xx_updata_fw(u8 *bin_addr, u16 len)
|
||||
{
|
||||
#define CHECKSUM_OFFECT (0x7F6C)
|
||||
int retry = 0;
|
||||
int ok_copy = TRUE;
|
||||
int ok = FALSE;
|
||||
u8 i2c_buf[4];
|
||||
|
||||
u32 fw_checksum=0;
|
||||
HYN_ENTER();
|
||||
|
||||
if(len < CST92XX_BIN_SIZE){
|
||||
HYN_ERROR("len = %d",len);
|
||||
goto UPDATA_END;
|
||||
}
|
||||
if(len > CST92XX_BIN_SIZE) len = CST92XX_BIN_SIZE;
|
||||
|
||||
if(0 != hyn_92xxdata->fw_file_name[0]){
|
||||
//node to update
|
||||
ok = copy_for_updata(hyn_92xxdata,i2c_buf,CST92XX_BIN_SIZE-20,4);
|
||||
fw_checksum = U8TO32(i2c_buf[3],i2c_buf[2],i2c_buf[1],i2c_buf[0]);
|
||||
if(hyn_92xxdata->hw_info.ic_fw_checksum == fw_checksum || ok != 0){
|
||||
HYN_INFO("no update,fw_checksum is same:0x%04x",fw_checksum);
|
||||
goto UPDATA_END;
|
||||
}
|
||||
}else{
|
||||
fw_checksum = U8TO32(bin_addr[CHECKSUM_OFFECT+3],bin_addr[CHECKSUM_OFFECT+2],bin_addr[CHECKSUM_OFFECT+1],bin_addr[CHECKSUM_OFFECT+0]);
|
||||
}
|
||||
HYN_INFO("updating fw checksum:0x%04x",fw_checksum);
|
||||
|
||||
hyn_irq_set(hyn_92xxdata,DISABLE);
|
||||
hyn_esdcheck_switch(hyn_92xxdata,DISABLE);
|
||||
hyn_set_i2c_addr(hyn_92xxdata,BOOT_I2C_ADDR);
|
||||
|
||||
HYN_INFO("updata_fw start");
|
||||
for(retry = 1; retry<5; retry++){
|
||||
hyn_92xxdata->fw_updata_process = 0;
|
||||
ok = cst92xx_enter_boot();
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
hyn_92xxdata->fw_updata_process = 10;
|
||||
ok = erase_all_mem();
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
hyn_92xxdata->fw_updata_process = 20;
|
||||
ok = write_code(bin_addr,retry);
|
||||
if (ok == FALSE){
|
||||
continue;
|
||||
}
|
||||
hyn_92xxdata->fw_updata_process = 30;
|
||||
hyn_92xxdata->hw_info.ic_fw_checksum = cst92xx_read_checksum();
|
||||
if(fw_checksum != hyn_92xxdata->hw_info.ic_fw_checksum){
|
||||
HYN_INFO("out data fw checksum err:0x%04x",hyn_92xxdata->hw_info.ic_fw_checksum);
|
||||
continue;
|
||||
}
|
||||
hyn_92xxdata->fw_updata_process = 40;
|
||||
if(retry>=5){
|
||||
ok_copy = FALSE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
hyn_wr_reg(hyn_92xxdata,0xA006EE,3,i2c_buf,0); //exit boot
|
||||
mdelay(2);
|
||||
|
||||
UPDATA_END:
|
||||
cst92xx_rst();
|
||||
mdelay(50);
|
||||
|
||||
hyn_set_i2c_addr(hyn_92xxdata,MAIN_I2C_ADDR);
|
||||
|
||||
if(ok_copy == TRUE){
|
||||
cst92xx_updata_tpinfo();
|
||||
HYN_INFO("updata_fw success");
|
||||
}
|
||||
else{
|
||||
HYN_INFO("updata_fw failed");
|
||||
}
|
||||
|
||||
hyn_irq_set(hyn_92xxdata,ENABLE);
|
||||
|
||||
return ok_copy;
|
||||
}
|
||||
static int16_t read_word_from_mem(uint8_t type, uint16_t addr, uint32_t *value)
|
||||
{
|
||||
int16_t ret = 0;
|
||||
uint8_t i2c_buf[4] = {0},t;
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x10;
|
||||
i2c_buf[2] = type;
|
||||
ret = hyn_write_data(hyn_92xxdata,i2c_buf,2,3);
|
||||
if (ret)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x0C;
|
||||
i2c_buf[2] = addr;
|
||||
i2c_buf[3] = addr >> 8;
|
||||
ret = hyn_write_data(hyn_92xxdata,i2c_buf,2,4);
|
||||
if (ret)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
i2c_buf[0] = 0xA0;
|
||||
i2c_buf[1] = 0x04;
|
||||
i2c_buf[2] = 0xE4;
|
||||
ret = hyn_write_data(hyn_92xxdata,i2c_buf,2,3);
|
||||
if (ret)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (t = 0;; t++)
|
||||
{
|
||||
if (t >= 100)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
ret =hyn_wr_reg(hyn_92xxdata,0xA004,2,i2c_buf,1);
|
||||
if (ret)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (i2c_buf[0] == 0x00)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret =hyn_wr_reg(hyn_92xxdata,0xA018,2,i2c_buf,4);
|
||||
if (ret)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
*value = ((uint32_t)(i2c_buf[0])) |
|
||||
(((uint32_t)(i2c_buf[1])) << 8) |
|
||||
(((uint32_t)(i2c_buf[2])) << 16) |
|
||||
(((uint32_t)(i2c_buf[3])) << 24);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int cst92xx_read_chip_id(void)
|
||||
{
|
||||
int16_t ret = 0;
|
||||
uint8_t retry = 3;
|
||||
uint32_t partno_chip_type,module_id;
|
||||
|
||||
ret = cst92xx_enter_boot();
|
||||
if (ret == FALSE)
|
||||
{
|
||||
HYN_ERROR("enter_bootloader error");
|
||||
return -1;
|
||||
}
|
||||
for (; retry > 0; retry--)
|
||||
{
|
||||
// partno
|
||||
ret = read_word_from_mem(1, 0x077C, &partno_chip_type);
|
||||
if (ret)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// module id
|
||||
ret = read_word_from_mem(0, 0x7FC0, &module_id);
|
||||
if (ret)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ((partno_chip_type >> 16) == 0xCACA)
|
||||
{
|
||||
partno_chip_type &= 0xffff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
cst92xx_rst();
|
||||
msleep(30);
|
||||
HYN_INFO("partno_chip_type: 0x%04x", partno_chip_type);
|
||||
HYN_INFO("module_id: 0x%04x", module_id);
|
||||
if ((partno_chip_type != 0x9217) && (partno_chip_type != 0x9220))
|
||||
{
|
||||
HYN_ERROR("partno_chip_type error 0x%04x", partno_chip_type);
|
||||
//return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst92xx_updata_tpinfo(void)
|
||||
{
|
||||
u8 buf[30];
|
||||
struct tp_info *ic = &hyn_92xxdata->hw_info;
|
||||
int ret = 0;
|
||||
|
||||
cst92xx_set_workmode(0xff,DISABLE);
|
||||
ret = hyn_wr_reg(hyn_92xxdata,0xD101,2,buf,0);
|
||||
if(ret == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
mdelay(5);
|
||||
|
||||
//firmware_project_id firmware_ic_type
|
||||
ret = hyn_wr_reg(hyn_92xxdata,0xD1F4,2,buf,28);
|
||||
if(ret == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
ic->fw_project_id = ((uint16_t)buf[17] <<8) + buf[16];
|
||||
ic->fw_chip_type = ((uint16_t)buf[19] <<8) + buf[18];
|
||||
|
||||
//firmware_version
|
||||
ic->fw_ver = (buf[23]<<24)|(buf[22]<<16)|(buf[21]<<8)|buf[20];
|
||||
|
||||
//tx_num rx_num key_num
|
||||
ic->fw_sensor_txnum = ((uint16_t)buf[1]<<8) + buf[0];
|
||||
ic->fw_sensor_rxnum = buf[2];
|
||||
ic->fw_key_num = buf[3];
|
||||
|
||||
ic->fw_res_y = (buf[7]<<8)|buf[6];
|
||||
ic->fw_res_x = (buf[5]<<8)|buf[4];
|
||||
|
||||
HYN_INFO("IC_info fw_project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
|
||||
|
||||
cst92xx_set_workmode(NOMAL_MODE,ENABLE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int cst92xx_updata_judge(u8 *p_fw, u16 len)
|
||||
{
|
||||
u32 f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
|
||||
u8 *p_data = p_fw + len - 28; //7F64
|
||||
struct tp_info *ic = &hyn_92xxdata->hw_info;
|
||||
int ret;
|
||||
|
||||
ret = cst92xx_enter_boot();
|
||||
if (ret == FALSE){
|
||||
HYN_INFO("cst92xx_enter_boot fail,need update");
|
||||
return 1;
|
||||
}
|
||||
hyn_92xxdata->hw_info.ic_fw_checksum = cst92xx_read_checksum();
|
||||
if(hyn_92xxdata->boot_is_pass == 0){
|
||||
HYN_INFO("boot_is_pass %d,need force update",hyn_92xxdata->boot_is_pass);
|
||||
return 1; //need updata
|
||||
}
|
||||
|
||||
f_fw_project_id = U8TO16(p_data[1],p_data[0]);
|
||||
f_ictype = U8TO16(p_data[3],p_data[2]);
|
||||
|
||||
f_fw_ver = U8TO16(p_data[7],p_data[6]);
|
||||
f_fw_ver = (f_fw_ver<<16)|U8TO16(p_data[5],p_data[4]);
|
||||
|
||||
f_checksum = U8TO16(p_data[11],p_data[10]);
|
||||
f_checksum = (f_checksum << 16)|U8TO16(p_data[9],p_data[8]);
|
||||
|
||||
|
||||
HYN_INFO("Bin_info fw_project_id:0x%04x ictype:0x%04x fw_ver:0x%x checksum:0x%x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
|
||||
if(f_ictype != ic->fw_chip_type || f_fw_project_id != ic->fw_project_id){
|
||||
HYN_ERROR("not update,please confirm:f_ictype 0x%04x,f_fw_project_id 0x%04x",f_ictype,f_fw_project_id);
|
||||
return 0; //not updata
|
||||
}
|
||||
if(f_checksum != ic->ic_fw_checksum && f_fw_ver > ic->fw_ver){
|
||||
HYN_ERROR("need update,please confirm:f_checksum 0x%04x,f_fw_ver 0x%04x",f_checksum,f_fw_ver);
|
||||
return 1; //need updata
|
||||
}
|
||||
HYN_INFO("cst92xx_updata_judge done, no need update");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
|
||||
static int cst92xx_set_workmode(enum work_mode mode,u8 enable)
|
||||
{
|
||||
int ok = FALSE;
|
||||
uint8_t i2c_buf[4] = {0};
|
||||
uint8_t i = 0;
|
||||
hyn_92xxdata->work_mode = mode;
|
||||
if(mode != NOMAL_MODE){
|
||||
hyn_esdcheck_switch(hyn_92xxdata,DISABLE);
|
||||
}
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD11E,2,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
msleep(1);
|
||||
continue;
|
||||
}
|
||||
msleep(1);
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0x0002,2,i2c_buf,2);
|
||||
if (ok == FALSE) {
|
||||
msleep(1);
|
||||
continue;
|
||||
}
|
||||
if(i2c_buf[1] == 0x1E){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch(mode){
|
||||
case NOMAL_MODE:
|
||||
hyn_irq_set(hyn_92xxdata,ENABLE);
|
||||
hyn_esdcheck_switch(hyn_92xxdata,ENABLE);
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD109,2,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case GESTURE_MODE:
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD104,2,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case LP_MODE:
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD107,2,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case DIFF_MODE:
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD10D,2,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
case RAWDATA_MODE:
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD10A,2,i2c_buf,0);
|
||||
if (ok == FALSE) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case FAC_TEST_MODE:
|
||||
hyn_wr_reg(hyn_92xxdata,0xD114,2,i2c_buf,0);
|
||||
break;
|
||||
case DEEPSLEEP:
|
||||
hyn_wr_reg(hyn_92xxdata,0xD105,2,i2c_buf,0);
|
||||
break;
|
||||
default :
|
||||
hyn_92xxdata->work_mode = NOMAL_MODE;
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void cst92xx_rst(void)
|
||||
{
|
||||
gpio_set_value(hyn_92xxdata->plat_data.reset_gpio,0);
|
||||
msleep(5);
|
||||
gpio_set_value(hyn_92xxdata->plat_data.reset_gpio,1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int cst92xx_supend(void)
|
||||
{
|
||||
HYN_ENTER();
|
||||
cst92xx_set_workmode(DEEPSLEEP,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cst92xx_resum(void)
|
||||
{
|
||||
cst92xx_rst();
|
||||
msleep(50);
|
||||
cst92xx_set_workmode(NOMAL_MODE,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int cst92xx_report(void)
|
||||
{
|
||||
int ok = FALSE;
|
||||
uint8_t i2c_buf[MAX_POINTS_REPORT*5+5] = {0};
|
||||
uint8_t finger_num = 0;
|
||||
uint8_t key_state=0,key_id = 0;
|
||||
|
||||
hyn_92xxdata->rp_buf.report_need = REPORT_NONE;
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD000,2,i2c_buf,sizeof(i2c_buf));
|
||||
if (ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD024AB,3,i2c_buf,0);
|
||||
if (ok == FALSE){
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (i2c_buf[6] != 0xAB) {
|
||||
HYN_INFO("fail buf[6]=0x%02x",i2c_buf[6]);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
finger_num = i2c_buf[5] & 0x7F;
|
||||
|
||||
if (finger_num > MAX_POINTS_REPORT) {
|
||||
HYN_INFO("fail finger_num=%d",finger_num);
|
||||
return TRUE;
|
||||
}
|
||||
hyn_92xxdata->rp_buf.rep_num = finger_num;
|
||||
|
||||
|
||||
if ((i2c_buf[5] & 0x80) == 0x80) { // button
|
||||
uint8_t *data = i2c_buf + finger_num * 5;
|
||||
if (finger_num > 0) {
|
||||
data += 2;
|
||||
}
|
||||
key_state = data[0];//0x83:<3A><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD> 0x80:<3A><><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>
|
||||
key_id = data[1]; // data[1]; :0x17 0x27 0x37
|
||||
|
||||
if(key_state&0x80){
|
||||
hyn_92xxdata->rp_buf.report_need |= REPORT_KEY;
|
||||
if((key_id == hyn_92xxdata->rp_buf.key_id || 0 == hyn_92xxdata->rp_buf.key_state)&& key_state == 0x83){
|
||||
hyn_92xxdata->rp_buf.key_id = key_id;
|
||||
hyn_92xxdata->rp_buf.key_state = 1;
|
||||
}
|
||||
else{
|
||||
hyn_92xxdata->rp_buf.key_state = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else//pos
|
||||
{
|
||||
uint8_t index = 0,i;
|
||||
if((i2c_buf[4]&0xF0) > 0){
|
||||
if((i2c_buf[4]&0x80) == 0x80)
|
||||
hyn_92xxdata->gesture_id = 14;//KEY_POWER;// palm
|
||||
else if(i2c_buf[4]&0x70)
|
||||
hyn_92xxdata->gesture_id = 14;//GESTURE wakeup
|
||||
HYN_INFO("i2c_buf[4]=0x%x,gesture_id=0x%x",i2c_buf[4],hyn_92xxdata->gesture_id);
|
||||
hyn_92xxdata->rp_buf.report_need |= REPORT_GES;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
hyn_92xxdata->rp_buf.report_need |= REPORT_POS;
|
||||
if (finger_num > 0) {
|
||||
uint8_t *data = i2c_buf;
|
||||
//uint8_t *data_ges = i2c_buf + finger_num * 5 + 2;
|
||||
uint8_t id = data[0] >> 4;
|
||||
uint8_t switch_ = data[0] & 0x0F;
|
||||
uint16_t x = ((uint16_t)(data[1]) << 4) | (data[3] >> 4);
|
||||
uint16_t y = ((uint16_t)(data[2]) << 4) | (data[3] & 0x0F);
|
||||
uint16_t z = (data[3] & 0x1F) + 0x03;
|
||||
|
||||
HYN_INFO("finger=%d id=%d x=%d y=%d z=%d",finger_num,id,x,y,z);
|
||||
|
||||
if (id < MAX_POINTS_REPORT) {
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pos_id = id;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].event = (switch_ == 0x06) ? 1 : 0;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pos_x = x;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pos_y = y;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pres_z = z;
|
||||
index++;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
for (i = 1; i < finger_num; i++) {
|
||||
uint8_t *data = i2c_buf+5*i+2;
|
||||
uint8_t id = data[0] >> 4;
|
||||
uint8_t switch_ = data[0] & 0x0F;
|
||||
uint16_t x = ((uint16_t)(data[1]) << 4) | (data[3] >> 4);
|
||||
uint16_t y = ((uint16_t)(data[2]) << 4) | (data[3] & 0x0F);
|
||||
uint16_t z = (data[4] & 0x7F);
|
||||
|
||||
if (id < MAX_POINTS_REPORT) {
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pos_id = id;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].event = (switch_ == 0x06) ? 1 : 0;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pos_x = x;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pos_y = y;
|
||||
hyn_92xxdata->rp_buf.pos_info[index].pres_z = z;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
static u32 cst92xx_check_esd(void)
|
||||
{
|
||||
int ret = 0;
|
||||
uint8_t retry=3;
|
||||
u8 buf[6];
|
||||
HYN_ENTER();
|
||||
while (retry--)
|
||||
{
|
||||
ret = hyn_wr_reg(hyn_92xxdata,0xD040,2,buf,0);
|
||||
ret = hyn_wr_reg(hyn_92xxdata,0xD040,2,buf,6);
|
||||
if(ret ==0 && hyn_sum16(0xA5,buf,4)==U8TO16(buf[4],buf[5])){
|
||||
ret = U8TO32(buf[0],buf[1],buf[2],buf[3]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
#if 0
|
||||
static u32 cst92xx_check_esd(void)
|
||||
{
|
||||
|
||||
int16_t ok = FALSE;
|
||||
uint8_t i2c_buf[6], retry;
|
||||
uint8_t flag = 0;
|
||||
uint16_t checksum = 0;
|
||||
uint32_t esd_value = 0;
|
||||
|
||||
if ((hyn_92xxdata->work_mode != NOMAL_MODE)&&(hyn_92xxdata->work_mode != GESTURE_MODE))
|
||||
{
|
||||
HYN_ERROR("esd_check work_mode error return");
|
||||
return 0;
|
||||
}
|
||||
retry = 4;
|
||||
flag = 0;
|
||||
while (retry--)
|
||||
{
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD040,2,i2c_buf,6);
|
||||
if (ok == FALSE){
|
||||
msleep(1);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
checksum = i2c_buf[0] + i2c_buf[1] + i2c_buf[2] + i2c_buf[3] + 0xA5;
|
||||
esd_value = (i2c_buf[0] << 24) + (i2c_buf[1] << 16) + (i2c_buf[2] << 8) + i2c_buf[3];
|
||||
flag = 1;
|
||||
if (((i2c_buf[4] << 8) + i2c_buf[5]) == checksum)
|
||||
{
|
||||
flag = 2;
|
||||
if (((esd_value - hyn_92xxdata->esd_last_value) < 1) && (esd_value > 20))
|
||||
{
|
||||
flag = 3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
HYN_INFO("ESD data checksum err:0x%x,0x%x", esd_value, checksum);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
HYN_INFO("ESD data:%d,0x%04x,0x%04x", flag, esd_value, hyn_92xxdata->esd_last_value);
|
||||
|
||||
if ((flag == 0) || (flag == 3) || (flag == 1))
|
||||
{
|
||||
cst92xx_rst();
|
||||
msleep(40);
|
||||
esd_value = 0;
|
||||
hyn_92xxdata->esd_last_value = 0;
|
||||
HYN_INFO("esd_check power reset ic");
|
||||
if (hyn_92xxdata->work_mode == GESTURE_MODE)
|
||||
{
|
||||
ok = hyn_wr_reg(hyn_92xxdata,0xD104,2,i2c_buf,0);
|
||||
if (ok == FALSE){
|
||||
HYN_ERROR("enter_sleep failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hyn_92xxdata->esd_last_value = esd_value;
|
||||
|
||||
return esd_value;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int cst92xx_prox_handle(u8 cmd)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static int cst92xx_get_dbg_data(u8 *buf, u16 len)
|
||||
{
|
||||
int ret = -1;
|
||||
u16 read_len = (hyn_92xxdata->hw_info.fw_sensor_txnum * hyn_92xxdata->hw_info.fw_sensor_rxnum)*2;
|
||||
u16 total_len = read_len + (hyn_92xxdata->hw_info.fw_sensor_txnum + hyn_92xxdata->hw_info.fw_sensor_rxnum)*2;
|
||||
HYN_ENTER();
|
||||
if(total_len > len){
|
||||
HYN_ERROR("buf too small");
|
||||
return -1;
|
||||
}
|
||||
switch(hyn_92xxdata->work_mode){
|
||||
case DIFF_MODE:
|
||||
case RAWDATA_MODE:
|
||||
ret = hyn_wr_reg(hyn_92xxdata,0x1000,2,buf,read_len); //mt
|
||||
|
||||
buf += read_len;
|
||||
read_len = hyn_92xxdata->hw_info.fw_sensor_rxnum*2;
|
||||
ret |= hyn_wr_reg(hyn_92xxdata,0x7000,2,buf,read_len); //rx
|
||||
|
||||
buf += read_len;
|
||||
read_len = hyn_92xxdata->hw_info.fw_sensor_txnum*2;
|
||||
ret |= hyn_wr_reg(hyn_92xxdata,0x7200,2,buf,read_len); //tx
|
||||
|
||||
ret |= hyn_wr_reg(hyn_92xxdata,0x000500,3,0,0); //end
|
||||
break;
|
||||
default:
|
||||
HYN_ERROR("work_mode:%d",hyn_92xxdata->work_mode);
|
||||
break;
|
||||
}
|
||||
return ret==0 ? total_len:-1;
|
||||
}
|
||||
|
||||
|
||||
#define FACTEST_PATH "/sdcard/hyn_fac_test_cfg.ini"
|
||||
#define FACTEST_LOG_PATH "/sdcard/hyn_fac_test.log"
|
||||
#define FACTEST_ITEM (MULTI_OPEN_TEST|MULTI_SHORT_TEST)
|
||||
|
||||
static int cst92xx_get_test_result(u8 *buf, u16 len)
|
||||
{
|
||||
int ret = 0,timeout;
|
||||
struct tp_info *ic = &hyn_92xxdata->hw_info;
|
||||
u16 scap_len = (ic->fw_sensor_txnum + ic->fw_sensor_rxnum)*2;
|
||||
u16 mt_len = ic->fw_sensor_rxnum*ic->fw_sensor_txnum*2,i = 0;
|
||||
u16 *raw_s;
|
||||
|
||||
HYN_ENTER();
|
||||
if((mt_len*3 + scap_len) > len || mt_len==0){
|
||||
HYN_ERROR("buf too small");
|
||||
return FAC_GET_DATA_FAIL;
|
||||
}
|
||||
HYN_INFO("---open_higdrv---");
|
||||
timeout = 500;
|
||||
hyn_wr_reg(hyn_92xxdata,0xD110,2,buf,0); ////test open high
|
||||
while(--timeout){ //wait rise edge
|
||||
if(hyn_wait_irq_timeout(hyn_92xxdata,100) == 0) break;
|
||||
msleep(10);
|
||||
}
|
||||
if(hyn_wr_reg(hyn_92xxdata,0x3000,2,buf,mt_len)){ //open high
|
||||
ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ERROR("read open high failed");
|
||||
goto selftest_end;
|
||||
}
|
||||
hyn_wr_reg(hyn_92xxdata,0x000005,3,buf,0);
|
||||
|
||||
HYN_INFO("---open_low---");
|
||||
timeout = 500;
|
||||
hyn_wr_reg(hyn_92xxdata,0xD111,2,buf,0); ////test open low
|
||||
while(--timeout){ //wait rise edge
|
||||
if(hyn_wait_irq_timeout(hyn_92xxdata,100) == 0) break;
|
||||
msleep(10);
|
||||
}
|
||||
if(hyn_wr_reg(hyn_92xxdata,0x1000,2,buf + mt_len,mt_len)){ //open low
|
||||
ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ERROR("read open low failed");
|
||||
goto selftest_end;
|
||||
}
|
||||
hyn_wr_reg(hyn_92xxdata,0x000005,3,buf,0);
|
||||
|
||||
//short test
|
||||
HYN_INFO("---short---");
|
||||
timeout = 500;
|
||||
hyn_wr_reg(hyn_92xxdata,0xD112,2,buf,0); //// short test
|
||||
while(--timeout){ //wait rise edge
|
||||
if(hyn_wait_irq_timeout(hyn_92xxdata,100) == 0) break;
|
||||
msleep(10);
|
||||
}
|
||||
if(hyn_wr_reg(hyn_92xxdata,0x5000,2,buf+(mt_len*2),scap_len)){
|
||||
ret = FAC_GET_DATA_FAIL;
|
||||
HYN_ERROR("read fac short failed");
|
||||
goto selftest_end;
|
||||
}
|
||||
else{
|
||||
raw_s = (u16*)(buf + mt_len*2);
|
||||
HYN_INFO("raw_s start data = %d",*(raw_s));
|
||||
for(i = 0; i< ic->fw_sensor_rxnum+ic->fw_sensor_txnum; i++){
|
||||
HYN_INFO("short raw data = %d %d",i,*(raw_s+i));
|
||||
if(U16REV((u16)*raw_s) != 0) *raw_s = 2000 / U16REV((u16)*raw_s);
|
||||
else *raw_s =0;
|
||||
HYN_INFO("short reprocess data = %d %d",i,*(raw_s+i));
|
||||
raw_s++;
|
||||
}
|
||||
}
|
||||
|
||||
//read data finlish start test
|
||||
ret = factory_multitest(hyn_92xxdata ,FACTEST_PATH, buf,(s16*)(buf+scap_len+mt_len*2),FACTEST_ITEM);
|
||||
|
||||
selftest_end:
|
||||
if(0 == fac_test_log_save(FACTEST_LOG_PATH,hyn_92xxdata,(s16*)buf,ret,FACTEST_ITEM)){
|
||||
HYN_INFO("fac_test log save success");
|
||||
}
|
||||
cst92xx_rst();
|
||||
msleep(40);
|
||||
return ret;
|
||||
}
|
||||
|
||||
const struct hyn_ts_fuc cst92xx_fuc = {
|
||||
.tp_rest = cst92xx_rst,
|
||||
.tp_report = cst92xx_report,
|
||||
.tp_supend = cst92xx_supend,
|
||||
.tp_resum = cst92xx_resum,
|
||||
.tp_chip_init = cst92xx_init,
|
||||
.tp_updata_fw = cst92xx_updata_fw,
|
||||
.tp_set_workmode = cst92xx_set_workmode,
|
||||
.tp_check_esd = cst92xx_check_esd,
|
||||
.tp_prox_handle = cst92xx_prox_handle,
|
||||
.tp_get_dbg_data = cst92xx_get_dbg_data,
|
||||
.tp_get_test_result = cst92xx_get_test_result
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user