20250731在榮品的PRO-RK3566開發板的Android13下跑通敦泰的FT8206觸控芯片

20250731在榮品的PRO-RK3566開發板的Android13下跑通敦泰的FT8206觸控芯片
2025/7/31 17:48


緣起:本文前置條件:已經解決FT8206和PRO-RK3566的硬件連接。
通過i2cdect可以掃描到i2c從機地址:0x38。【8位地址為0x70】


緣起:本文只分析I2C的掛載問題。

1、敦泰FT的代理商說所有的FT的驅動程序都是兼容的,不同的就是不是對應的驅動就不能升級upgrade了。
反正我也不需要升級。直接使用以前調通的FT5X06的驅動程序了。
Y:\Android13.0\kernel-5.10\drivers\input\touchscreen\edt-ft5x06.c
原廠的edt-ft5x06.c不能用的。我用的是 飛凌魔改過的版本。
DTS也直接拷貝的飛凌的。

2、榮品的PRO-RK3566開發板的Android13的坐標原點在左上角。
但是TP得坐標原點是根據固件不同而異。
你需要在報點的地方進行處理,或者要求供應商/屏廠修改適合你的項目的固件并預燒錄進去了。


如果你的TP/LCD屏的硬件接線正確,在Android13下使用i2cdetect掃描I2C1。
很容易得到0x38有設備,但是沒有掛載驅動程序。

1、FT8206。使用 FT5X06的驅動程序。
2、I2C可以讀了。請問 這些寄存器的值對不?
3、現在是 TP觸摸沒有反應?用示波器 點IRQ中斷引腳嗎?TP壞了?


我想在 開關 RK3566/RK3588+Android13下的內核。

rootroot@rootroot-X99-Turbo:~/Android13.0/kernel-5.10$ make ARCH=arm64 menuconfig
請問是這樣操作嗎?有點不對勁


沒有問題,具體內核配置文件對應的是這個


https://doc.rpdzkj.cn/#/zh_cn/%E7%91%9E%E8%8A%AF%E5%BE%AE%E7%B3%BB%E5%88%97/rk3566-rk3568/6.Android13%E5%BC%80%E5%8F%91?id=%e5%b8%b8%e7%94%a8%e6%ba%90%e7%a0%81%e8%b7%af%e5%be%84
Android開發

常用源碼路徑
常用配置項?? ?源碼路徑
RD-RK3588 設備樹?? ?kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588/rd-rk3588.dts
UBOOT默認配置文件?? ?u-boot/arch/arm/dts/rk3588-u-boot.dtsi
內核默認配置文件?? ?kernel-5.10/arch/arm64/configs/rockchip_defconfig
Uboot Logo圖片?? ?kernel-5.10/logo.bmp
Kernel Logo圖片?? ?kernel-5.10/logo_kernel.bmp
parameter分區表?? ?device/rockchip/rk3588/parameter.txt
device板級配置文件?? ?device/rockchip/rk3588/rp_boards/


1、在內核中打開FT5X06的驅動程序。
Z:\Android13.0\kernel-5.10\arch\arm64\configs\rockchip_defconfig

CONFIG_TABLET_USB_KBTAB=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
CONFIG_TOUCHSCREEN_GSL3673=y
CONFIG_TOUCHSCREEN_GSL3673_800X1280=y
CONFIG_TOUCHSCREEN_GSLX680_PAD=y
CONFIG_TOUCHSCREEN_GT1X=y
CONFIG_TOUCHSCREEN_ILI210X=y
CONFIG_TOUCHSCREEN_ELAN5515=y
CONFIG_ROCKCHIP_REMOTECTL=y


如果不知道格式如何寫,去.config里面找!
Z:\14TB\versions\pro3566_Android13.0\kernel-5.10\.config
# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set

CONFIG_TOUCHSCREEN_EDT_FT5X06=y


# CONFIG_TABLET_USB_PEGASUS is not set
# CONFIG_TABLET_SERIAL_WACOM4 is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_PROPERTIES=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
# CONFIG_TOUCHSCREEN_AD7879 is not set
# CONFIG_TOUCHSCREEN_ADC is not set
# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
# CONFIG_TOUCHSCREEN_BU21013 is not set
# CONFIG_TOUCHSCREEN_BU21029 is not set
# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set
# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
# CONFIG_TOUCHSCREEN_EETI is not set
# CONFIG_TOUCHSCREEN_EGALAX is not set
# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set
# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT5436 is not set
CONFIG_TOUCHSCREEN_FT5726=y
# CONFIG_TOUCHSCREEN_FT8206 is not set
# CONFIG_TOUCHSCREEN_FTS is not set

# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GSL3673=y
CONFIG_TOUCHSCREEN_GSL3673_800X1280=y
CONFIG_TOUCHSCREEN_GSLX680_PAD=y
CONFIG_TOUCHSCREEN_GT1X=y
# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=y
# CONFIG_TOUCHSCREEN_S6SY761 is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
# CONFIG_TOUCHSCREEN_ELAN is not set
CONFIG_TOUCHSCREEN_ELAN5515=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
# CONFIG_TOUCHSCREEN_WACOM_I2C is not set
# CONFIG_TOUCHSCREEN_MAX11801 is not set
# CONFIG_TOUCHSCREEN_MCS5000 is not set
# CONFIG_TOUCHSCREEN_MMS114 is not set
# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_PIXCIR is not set
# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
# CONFIG_TOUCHSCREEN_TSC_SERIO is not set
# CONFIG_TOUCHSCREEN_TSC2004 is not set
# CONFIG_TOUCHSCREEN_TSC2005 is not set
# CONFIG_TOUCHSCREEN_TSC2007 is not set
# CONFIG_TOUCHSCREEN_RM_TS is not set
# CONFIG_TOUCHSCREEN_SILEAD is not set
# CONFIG_TOUCHSCREEN_SIS_I2C is not set
# CONFIG_TOUCHSCREEN_ST1232 is not set
# CONFIG_TOUCHSCREEN_STMFTS is not set
# CONFIG_TOUCHSCREEN_SUR40 is not set
# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set
# CONFIG_TOUCHSCREEN_SX8654 is not set
# CONFIG_TOUCHSCREEN_TPS6507X is not set
# CONFIG_TOUCHSCREEN_ZET6223 is not set
# CONFIG_TOUCHSCREEN_ZFORCE is not set
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
# CONFIG_TOUCHSCREEN_IQS5XX is not set
# CONFIG_TOUCHSCREEN_ZINITIX is not set
CONFIG_TOUCHSCREEN_GT9XX=y
CONFIG_ROCKCHIP_REMOTECTL=y
CONFIG_ROCKCHIP_REMOTECTL_PWM=y


2、驅動修改部分【直接使用飛凌魔改版本!^_】
Z:\Android13.0\kernel-5.10\drivers\input\touchscreen\Kconfig
config TOUCHSCREEN_EDT_FT5X06
tristate "EDT FocalTech FT5x06 I2C Touchscreen support"
depends on I2C
help
Say Y here if you have an EDT "Polytouch" touchscreen based
on the FocalTech FT5x06 family of controllers connected to
your system.

?? ? ?If unsure, say N.

?? ? ?To compile this driver as a module, choose M here: the
module will be called edt-ft5x06.


Z:\Android13.0\kernel-5.10\drivers\input\touchscreen\Makefile
obj-$(CONFIG_TOUCHSCREEN_EDT_FT5X06)?? ?+= edt-ft5x06.o


Z:\Android13.0\kernel-5.10\drivers\input\touchscreen\edt-ft5x06.c


我看你們的 FT5X06的驅動程序 是修過的!
?要 這樣改?
這樣改 可以實現什么功能?


看上去好像是原廠的沒有申請gpio中斷號,所以我們添上去的gpio中斷注冊


Z:\14TB\versions\OK3588-android12-R5source\kernel-5.10\drivers\input\touchscreen\edt-ft5x06.c
Z:\14TB\versions\pro3566_Android13.0\kernel-5.10\drivers\input\touchscreen\edt-ft5x06.c

#include <asm/unaligned.h>
#include <linux/pinctrl/consumer.h>


struct edt_ft5x06_ts_data {
struct i2c_client *client;
struct input_dev *input;
struct touchscreen_properties prop;
u16 num_x;
u16 num_y;
struct regulator *vcc;

?? ?struct gpio_desc *reset_gpio;
struct gpio_desc *wake_gpio;
?? ?struct gpio_desc *int_gpio;

#if defined(CONFIG_DEBUG_FS)
struct dentry *debug_dir;
u8 *raw_buffer;
size_t raw_bufsize;
#endif

?? ?struct mutex mutex;
bool factory_mode;
enum edt_pmode suspend_mode;
int threshold;
int gain;
int offset;
int offset_x;
int offset_y;
int report_rate;
int max_support_points;

?? ?char name[EDT_NAME_LEN];

?? ?struct edt_reg_addr reg_addr;
enum edt_ver version;

?? ?struct pinctrl?? ??? ??? ?*pinctrl;
struct pinctrl_state ? ?*pins_default;

};


static int edt_ft5x06_ts_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
const struct edt_i2c_chip_data *chip_data;
struct edt_ft5x06_ts_data *tsdata;
u8 buf[2] = { 0xfc, 0x00 };
struct input_dev *input;
unsigned long irq_flags;
int error;
char fw_version[EDT_NAME_LEN];

?? ?dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");

?? ?u8 rdbuf[EDT_NAME_LEN];
memset(rdbuf, 0, sizeof(rdbuf));

?? ?tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
if (!tsdata) {
dev_err(&client->dev, "failed to allocate driver data.\n");
return -ENOMEM;
}

? ? error = edt_ft5x06_ts_readwrite(client, 1, "\xBB",
EDT_NAME_LEN - 1, rdbuf);
if (error)
return error;

?? ?tsdata->pinctrl = devm_pinctrl_get(&client->dev);
if (!IS_ERR(tsdata->pinctrl)) {
tsdata->pins_default = pinctrl_lookup_state(tsdata->pinctrl, "ft5x06_defaults");
if (IS_ERR(tsdata->pins_default))
dev_err(&client->dev, "could not get default pinstate\n");

? ? ? ? if (!IS_ERR_OR_NULL(tsdata->pins_default)) {
error = pinctrl_select_state(tsdata->pinctrl,
tsdata->pins_default);
if (error < 0)
dev_err(&client->dev, "could not set pins\n");
}
}

?? ?chip_data = device_get_match_data(&client->dev);
if (!chip_data)
chip_data = (const struct edt_i2c_chip_data *)id->driver_data;
if (!chip_data || !chip_data->max_support_points) {
dev_err(&client->dev, "invalid or missing chip data\n");
return -EINVAL;
}


touchscreen_parse_properties(input, true, &tsdata->prop);

?? ?error = input_mt_init_slots(input, tsdata->max_support_points,
INPUT_MT_DIRECT);
if (error) {
dev_err(&client->dev, "Unable to init MT slots.\n");
return error;
}

?? ?i2c_set_clientdata(client, tsdata);

?? ?irq_flags = irq_get_trigger_type(client->irq);
if (irq_flags == IRQF_TRIGGER_NONE)
irq_flags = IRQF_TRIGGER_FALLING;
irq_flags |= IRQF_ONESHOT;

?? ?tsdata->int_gpio = devm_gpiod_get_optional(&client->dev,?
"irq", GPIOD_OUT_HIGH);
if(IS_ERR(tsdata->int_gpio)){
error = PTR_ERR(tsdata->int_gpio);
dev_err(&client->dev, "Failed to request int gpio %d\n", error);
} else {
client->irq = gpiod_to_irq(tsdata->int_gpio);
irq_flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
}


error = devm_request_threaded_irq(&client->dev, client->irq,
NULL, edt_ft5x06_ts_isr, irq_flags,
client->name, tsdata);
if (error) {
dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
return error;
}

?? ?error = devm_device_add_group(&client->dev, &edt_ft5x06_attr_group);
if (error)
return error;

?? ?error = input_register_device(input);
if (error)
return error;

?? ?edt_ft5x06_ts_prepare_debugfs(tsdata, dev_driver_string(&client->dev));

?? ?dev_dbg(&client->dev,
"EDT FT5x06 initialized: IRQ %d, WAKE pin %d, Reset pin %d.\n",
client->irq,
tsdata->wake_gpio ? desc_to_gpio(tsdata->wake_gpio) : -1,
tsdata->reset_gpio ? desc_to_gpio(tsdata->reset_gpio) : -1);

?? ?return 0;
}

static int edt_ft5x06_ts_remove(struct i2c_client *client)


3、DTS部分:【直接使用飛凌版本^_】
Z:\14TB\versions\OK3588-android12-R5source\kernel-5.10\arch\arm64\boot\dts\rockchip\OK3588-C-common.dtsi


&i2c2 {
status = "okay";

?? ?extio: tca6424@23 {
compatible = "ti,tca6424";
reg = <0x23>;
interrupt-parent = <&gpio1>;
interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
gpio-controller;
pinctrl-0 = <&extio_int_gpio>;
pinctrl-names = "default";
#gpio-cells = <2>;
status = "okay";
};

?? ?ft5x06_dsi0: ft5x06@38 { //dsi0 tp
compatible = "edt,edt-ft5406", "edt,edt-ft5x06";
reg = <0x38>;
pinctrl-names = "ft5x06_defaults";
pinctrl-0 = <&ft5x06_dsi1_gpio>;
//?? ??? ?interrupt-parent = <&gpio3>;
//?? ??? ?interrupts = <RK_PC0 IRQ_TYPE_EDGE_FALLING>;
irq-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;
touchscreen-size-x = <1024>;
touchscreen-size-y = <600>;
status = "okay";
};

?? ?gt9xx_dsi0: gt9xx@14 {
compatible = "goodix,gt911";
reg = <0x14>;
pinctrl-names = "gt9xx_default";
pinctrl-0 = <&gt911_dsi1_gpio>;
//interrupt-parent = <&gpio3>;
//interrupts = <RK_PC0 IRQ_TYPE_EDGE_FALLING>;
irq-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;
reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_HIGH>;
touchscreen-size-x = <1024>;
touchscreen-size-y = <600>;
is-mutex;
filter-reg = <0x38>;
bus-reg = <0x02>;
status = "okay";
};
};


&pinctrl {


lcd {
mipi0_enable_gpio: mipi0-enable-gpio {
rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
};
mipi1_enable_gpio: mipi1-enable-gpio {
rockchip,pins = <3 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};

?? ?tp_int {
?? ??? ?ft5x06_dsi1_gpio: ?ft5x06-dsi1-gpio {
rockchip,pins = <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
};

?? ??? ?ft5x06_dsi2_gpio: ft5x06-dsi2-gpio {
rockchip,pins = <3 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
};


gt911_dsi1_gpio:gt911-dsi0-gpio {
rockchip,pins = <3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>,
<3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
};

?? ??? ?gt911_dsi2_gpio:gt911-dsi1-gpio {
rockchip,pins = <3 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>,
<3 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
};?? ??? ??? ??? ??? ?
};

?? ?hdmirxdet {
hdmirx_det_gpio: hdmirx-det-gpio {
rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>;
};
};


};


Z:\14TB\versions\pro3566_Android13.0\kernel-5.10\arch\arm64\boot\dts\rockchip\rk356x\pro-rk3566-single-lcd-gpio.dtsi

&i2c1 {
gt9xx: goodix_ts@5d {
status = "disabled";
/***** tp pin ******/
pinctrl-names = "default";
pinctrl-0 = <&goodix_irq>;
goodix_rst_gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
goodix_irq_gpio = <&gpio0 RK_PB5 IRQ_TYPE_EDGE_FALLING>;
};
gt1x: goodix_gt1x@5d {
status = "disabled";
/***** tp pin ******/
pinctrl-names = "default";
pinctrl-0 = <&goodix_irq>;
goodix,rst-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
goodix,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_EDGE_FALLING>;
};
};

&pinctrl {
lcd1 {
lcd_rst_gpio: lcd1-rst-gpio {
rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
? ? goodix {
goodix_irq: goodix-irq {
rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
};
};

};


最終效果圖:
Z:\Android13.0\kernel-5.10\arch\arm64\boot\dts\rockchip\rk356x\pro-rk3566-single-lcd-gpio.dtsi

&edp_panel {
power-supply = <&vcc3v3_lcd0_n>;
backlight = <&backlight4>;
};

&i2c1 {
// ? ?gt9xx: goodix_ts@5d {
// ? ? ? ?status = "disabled";
// ? ? ? ?/***** tp pin ******/
// ? ? ? ? ? ?pinctrl-names = "default";
// ? ? ? ? ? ?pinctrl-0 = <&goodix_irq>;
// ? ? ? ?goodix_rst_gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
// ? ? ? ?goodix_irq_gpio = <&gpio0 RK_PB5 IRQ_TYPE_EDGE_FALLING>;
// ? ?};
// ? ?
// ? ?gt1x: goodix_gt1x@5d {
// ? ? ? ?status = "disabled";
// ? ? ? ?/***** tp pin ******/
// ? ? ? ? ? ? ? ?pinctrl-names = "default";
// ? ? ? ? ? ? ? ?pinctrl-0 = <&goodix_irq>;
// ? ? ? ? ? ? ? ?goodix,rst-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
// ? ? ? ? ? ? ? ?goodix,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_EDGE_FALLING>;
// ? ?};

?? ?ft5x06: ft5x06@38 { //dsi0 tp
compatible = "edt,edt-ft5406", "edt,edt-ft5x06";
reg = <0x38>;
pinctrl-names = "ft5x06_defaults";
pinctrl-0 = <&ft5x06_dsi1_gpio>;
//?? ??? ?interrupt-parent = <&gpio0>;
//?? ??? ?interrupts = <RK_PB5 IRQ_TYPE_EDGE_FALLING>;
//irq-gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
irq-gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>;
//reset-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>;
touchscreen-size-x = <1200>;
touchscreen-size-y = <1920>;
//touchscreen-size-x = <1920>;
//touchscreen-size-y = <1200>;
status = "okay";
};

};

&pinctrl {
lcd1 {
lcd_rst_gpio: lcd1-rst-gpio {
rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
};
};

// ? ?goodix {
// ? ? ? ?goodix_irq: goodix-irq {
// ? ? ? ? ? ?rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
// ? ? ? ?};
// ? ?};

?? ?tp_int {
ft5x06_dsi1_gpio: ?ft5x06-dsi1-gpio {
rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
};?? ??? ??? ??? ??? ?
};


};
/********************************************/

測試效果:

使用 如上測試APK。
1根手指正常。
2根手指正常
3根手指也正常
4根手指還是正常。

5根手指。測試APK上 異常了。不能畫了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917008.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

異常檢測:算法分類及經典模型概覽

第一部分&#xff1a;異常檢測的核心概念 在深入算法細節之前&#xff0c;理解異常檢測的“語境”至關重要。 1. 什么是異常檢測&#xff1f; 異常檢測&#xff08;Anomaly Detection 或 Outlier Detection&#xff09;旨在通過數據挖掘技術&#xff0c;識別出數據集中與大多數…

技術干貨 | 矢網DTF測量技術:透視線纜、天線與波導內部缺陷的“射頻X光”(二)

無線通信、雷達等領域中&#xff0c;射頻組件與傳輸系統的性能至關重要&#xff0c;其內部微小損傷易導致信號問題甚至系統失效。傳統測試無法精確定位故障點&#xff0c;排查困難。DTF測量&#xff0c;矢網賦予的“透視眼”&#xff01;它能穿透“黑箱”&#xff0c;精確定位線…

【[CSP-J 2022] 上升點列】

題目 [CSP-J 2022] 上升點列 題目描述 在一個二維平面內&#xff0c;給定 n 個整數點 (x i ,y i? )&#xff0c;此外你還可以自由添加 k 個整數點。 你在自由添加 k 個點后&#xff0c;還需要從 nk 個點中選出若干個整數點并組成一個序列&#xff0c;使得序列中任意相鄰兩點間…

Kong API Gateway的十年進化史

一、技術基因的誕生&#xff08;2007-2015&#xff09; 2007年&#xff0c;三位意大利開發者Augusto Marietti、Marco Palladino和Michele Orru在博洛尼亞的一個小車庫中創立了Mashape公司。 最初他們開發了一個名為Mashup的API聚合平臺&#xff0c;試圖通過整合第三方API為開發…

藍牙設備配對:從機發現主機全過程

在藍牙 paging 過程中&#xff0c;從設備&#xff08;Slave&#xff09;是通過特定的掃描機制和跳頻方式來發現主設備發送的 ID 包的&#xff0c;具體過程如下&#xff1a;從設備處于特定掃描模式&#xff1a;從設備需要處于 Page Scan 模式&#xff0c;才能夠接收主設備發送的…

聚觀早報 | 三星獲特斯拉AI芯片訂單;小米16首發成安卓最強SOC;iPhone 17 Pro支持8倍光學變焦

聚觀早報每日整理最值得關注的行業重點事件&#xff0c;幫助大家及時了解最新行業動態&#xff0c;每日讀報&#xff0c;就讀聚觀365資訊簡報。整理丨肖羽7月29日消息三星獲特斯拉AI芯片訂單小米16首發成安卓最強SOCiPhone 17 Pro支持8倍光學變焦寧德時代滑板底盤公司啟動首輪融…

Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)

文章目錄參考資料說明Gemini Fullstack LangGraph QuickstartDeepSeek Fullstack LangGraph Quickstart項目部署完整源碼地址后端部署前端部署參考資料 DeepResearch應用開發實戰網盤課件資料 說明 本文僅供學習和交流使用&#xff0c;感謝賦范社區相關老師的辛苦付出&#…

鋼筋計數誤差↓78%!陌訊多模態融合算法在建筑地產AI質檢的落地實踐

?摘要??針對建筑地產行業鋼筋驗收場景的高誤差痛點&#xff0c;本文解析陌訊視覺算法的多模態融合架構如何實現毫米級精度目標檢測。實測顯示&#xff1a;在Jetson Xavier NX邊緣設備上&#xff0c;鋼筋計數mAP0.5達??92.4%??&#xff0c;較基線模型提升28個百分點&…

負載均衡 LoadBalance

問題引入 我們一個服務可能會進行多機部署&#xff0c;也就說多臺服務器組成的集群共同對外提供一致的服務&#xff0c;那么我們的微服務的代碼就需要拷貝多份&#xff0c;部署到不同的機器上。 我們使用 IDEA 來開啟多個相同的服務 這里以 product-service 為例&#xff1a;…

13. 若依框架中的 Sensitive 敏感字段過濾

若依框架中有Sensitive注解&#xff0c;但代碼中并未使用&#xff0c;但該注解的實現還是比較值的學習的。該注解是一個運行時注解該注解只能應用在字段上JacksonAnnotationsInside 表示當使用Jackson序列化時&#xff0c;Jackson會自動識別該注解下的其他Jackson相關注解&…

git本地倉庫,工作區和暫存區的知識

一 git工作原理 Git 的工作原理基于分布式版本控制&#xff0c;通過管理文件的不同版本狀態&#xff0c;實現代碼的追蹤、協作和回溯。除了常見的工作區&#xff08;Working Directory&#xff09; 和暫存區&#xff08;Staging Area/Index&#xff09;&#xff0c;核心還包括本…

MPU6050模塊

一&#xff1a;MPU6050簡介輸出一個隨姿態變化而變化的電壓&#xff0c;想要量化電壓&#xff0c;就得使用ADC轉化歐拉角偏航角&#xff08;Yaw&#xff09;&#xff1a;也叫航向角&#xff0c;通常是繞 z 軸旋轉的角度&#xff0c;以 x 軸正向為起始邊&#xff0c;旋轉后 x 軸…

jvm的棧和堆

在 JVM 中&#xff0c;棧&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;是兩種核心內存區域&#xff0c;用于存儲不同類型的數據&#xff0c;它們的設計和存儲規則有明確區分&#xff0c;主要體現在存儲內容、生命周期和管理方式上&#xff1a;一、棧&#xf…

自動駕駛車輛的敏捷安全檔案

簡介近年來&#xff0c;在開發安全關鍵軟件時&#xff0c;敏捷開發方法的使用日益增多。敏捷方法非常適合自動駕駛汽車軟件的增量改進、運行設計域的逐步擴展以及新型智能路側單元的開發。由于車輛和智能路側單元的預期改進&#xff0c;未來幾年將會有新的自動駕駛車輛試驗。因…

【時時三省】(C語言基礎)動態內存分配與它的指針變量

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省什么是內存的動態分配全局變量是分配在內存中的靜態存儲區的&#xff0c;非靜態的局部變量&#xff08;包括形參&#xff09;是分配在內存中的動態存儲區的&#xff0c;這個存儲區是一個稱為棧…

SpringMVC的核心架構與請求處理流程

Spring MVC 核心架構核心組件組件作用類比DispatcherServlet前端控制器&#xff0c;統一接收請求并協調各組件處理一個餐廳的前臺HandlerMapping根據請求URL映射到對應的處理器&#xff08;Controller&#xff09;路由表HandlerAdapter執行處理器方法&#xff0c;處理參數綁定、…

css 不錯的按鈕動畫

效果圖wxml <view class"{{status?active:}}"><view class"up-top btn"><text>向上</text></view><view class"up-left btn"><text>向左</text></view><view class"up-center b…

若依框架RuoYi-Vue-Plus-5.X的啟動,本地安裝docker,再部署 Redis、PG數據庫(智慧水務)SmartWaterServer

一、部署redis數據庫拉取鏡像 docker pull redis啟動Redis容器docker run -d --name redis-server -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123redis版本二、部署PostgreSQL 數據庫拉取鏡像docker pull postgres:15 創建數據存儲目錄、建議將數據掛…

Idea 清除無用的引用類

在IntelliJ IDEA中&#xff0c;你可以通過以下方式將選中的代碼設置為大寫&#xff1a;1. 使用快捷鍵(推薦)Windows/Linux&#xff1a;Ctrl Shift UMac&#xff1a;Cmd Shift U操作步驟&#xff1a;選中文本按下快捷鍵&#xff0c;即可在大小寫之間切換。2. 通過菜單操作選…

同個主機拉取不同權限倉庫的方法

背景&#xff1a;因為某些神奇的原因&#xff0c;無法同時授權倉庫權限給自己。 1.本地電腦只有權限訪問web倉庫地址&#xff0c;無權限訪問backend倉庫&#xff1b; 2.堡壘機服務器只有權限訪問backend倉庫&#xff0c;無權限訪問web倉庫地址。 web倉庫地址 &#xff1a;codeu…