• 背景
  • 耳机的分类
  • 调试Qcom耳机功能时常用修改
    • (1)qcom,msm-mbhc-hphl-swh = <1>;
    • (2)qcom,msm-hs-micbias-type=”internal”;
    • (3)耳机的micbias(常用micbias2)是否有外部电容
    • (4)耳机是否支持欧美标转换
    • (5)更改micbias电压
    • (6)修改识别耳机时候的阻抗
    • (7)Lineout设备
    • (8)如果没有兼容欧标美标开关,但是想播放音乐(不能通话),可以做如下修改
    • (9)对耳机按键阻值等调控
  • 软件逻辑
    • 在哪儿识别
    • 在哪儿上报
    • 按键识别
  • 综述

背景

耳机部分也是在工作范围内,所以有必要整理,方便回顾和查找。

耳机的分类

3.5mm耳机接口分为三段式和四段式, 三段式耳机即”左右地”,四段式则带麦分为”左右地麦”(美标)和”左右麦地”(欧标)。
type c和usb耳机则另算。我这边还没有研究,暂时就不写了。

调试Qcom耳机功能时常用修改

这一部分既是为了方便回顾和查询,也可以列举debug点。
先说dtsi的位置,常见配置都在dtsi里:
kernel/msm-4.9/arch/arm64/boot/dts/qcom/qm215-audio.dtsi

/*begin mod by fuhua for task: 8668750 on 2019-12-03 task id :8668750 */qcom,msm-hac-pa = <&tlmm 127 0>;qcom,msm-hac-pa-gpio = <&cdc_hac_pa_gpio>;
/*end   mod by fuhua for task: 8668750 on 2019-12-03 task id :8668750 */qcom,msm-mclk-freq = <9600000>;qcom,msm-mbhc-hphl-swh = <1>;
/*Begin Modified by fuhua.wang for defect_id: 8751408 on 2019 02.25 */qcom,msm-mbhc-gnd-swh = <0>;
/*End   Modified by fuhua.wang for defect_id: 8751408 on 2019 02.25 */
/*begin mod by fuhua for 4-plog headset on 2019-08-30 task id :8293309 */qcom,msm-hs-micbias-type = "internal";
/*end mod by fuhua for 4-plog headset on 2019-08-30 task id :8293309 */

(1)qcom,msm-mbhc-hphl-swh=<1>;

//0是NC,1是NO
NO是指耳机的accdet脚默认上拉到1.8v,插入耳机后,accdet脚跟左声道短接到一块,不插入耳机的时候左声道和det就是断开的,电平拉低。而NC是指耳机的accdet脚默认和左声道短接到一块,为低电平,插入耳机后,accdet脚与左声道断开,accdet脚变为高电平。
seoul项目就是不接的时候断开的,也可以设置为0做实验,发现开机就有耳机图标。

(2)qcom,msm-hs-micbias-type=”internal”;

这个是设置Handset/Headset micbias有没有外接电容。
seoul原理图画的是个电阻,但是却没贴。

如果micbias电压是内部接过去的:
qcom,msm-hs-micbias-type = “internal”;
“MIC BIAS Internal2”, “Headset Mic”,
“AMIC2”, “MIC BIAS Internal2”,
如果micbias电压是外部接过去的:
qcom,msm-hs-micbias-type = “external”;
“MIC BIAS External2”, “Headset Mic”,
“AMIC2”, “MIC BIAS External2”,

但是也有针对Handset进行设置的。
如果Handset用的是外部micbias,使用如下配置:
“MIC BIAS External”,”Handset Mic”,
“AMIC1”,”MIC BIAS External”,
如果Handset用的是内部Micbias,使用如下配置:
“MIC BIAS Internal”,”Handset Mic”,
“AMIC1”,”MIC BIAS Internal”,

上述应该是说的手持模式和耳机模式,针对这一块,seoul设置是对的。

106 		qcom,audio-routing =
107 				"RX_BIAS", "MCLK",
108 				"SPK_RX_BIAS", "MCLK",
109 				"INT_LDO_H", "MCLK",
110 				"RX_I2S_CLK", "MCLK",
111 				"TX_I2S_CLK", "MCLK",
112 				"MIC BIAS External", "Handset Mic",
113 /*begin mod by fuhua for 4-plog headset on 2019-08-30 task id :8293309 */
114 				"MIC BIAS Internal2", "Headset Mic",
115 /*end mod by fuhua for 4-plog headset on 2019-08-30 task id :8293309 */
116 				"MIC BIAS External", "Secondary Mic",
117 				"AMIC1", "MIC BIAS External",
118 /*begin mod by fuhua for 4-plog headset on 2019-08-30 task id :8293309 */
119 				"AMIC2", "MIC BIAS Internal2",
120 /*end mod by fuhua for 4-plog headset on 2019-08-30 task id :8293309 */
121 				"AMIC3", "MIC BIAS External",
122 				"ADC1_IN", "ADC1_OUT",
123 				"ADC2_IN", "ADC2_OUT",
124 				"ADC3_IN", "ADC3_OUT",
125 				"PDM_IN_RX1", "PDM_OUT_RX1",
126 				"PDM_IN_RX2", "PDM_OUT_RX2",
127 				"PDM_IN_RX3", "PDM_OUT_RX3";

(3)耳机的micbias(常用micbias2)是否有外部电容

如果有,需添加,而seoul是没有的
qcom,msm-micbias2-ext-cap
针对micbias1也可以检查是否连有外部电容,seoul是有的。
qcom,msm-micbias1-ext-cap;

(4)耳机是否支持欧美标转换

欧标耳机绝缘环是白色的,美标一般为黑色。
如果要支持转换,一般硬件要额外添加开关。
另外要注意如下pinctrl的GPIO口。

 
cross-conn-det {
qcom,pins = <&gp 97>;
qcom,num-grp-pins = <1>;
qcom,pin-func = <0>;
label = "cross-conn-det-sw";cross_conn_det_act: lines_on {drive-strength = <8>;output-low;bias-pull-down;};cross_conn_det_sus: lines_off {drive-strength = <2>;bias-disable;};
};

如果不支持,最好删除对pinctrl的引用。

pinctrl-names = "cdc_lines_act",
"cdc_lines_sus",
//"cross_conn_det_act",
//"cross_conn_det_sus",
"vdd_spkdrv_act",
"vdd_spkdrv_sus";
pinctrl-0 = <&cdc_pdm_lines_act &vdd_spkdrv_act>;
pinctrl-1 = <&cdc_pdm_lines_sus &vdd_spkdrv_sus>;
// pinctrl-2 = <&cross_conn_det_act>;
// pinctrl-3 = <&cross_conn_det_sus>;
// qcom,cdc-us-euro-gpios = <&msm_gpio 97 0>;

(5)更改micbias电压

如苹果耳机,它的mic的工作电压是大于1.8v,所以为了能正常使用苹果耳机,需要增加micbias电压。
qcom,cdc-micbias-cfilt-mv = <2700>;
seoul项目上没有这个属性,但是代码中有去读的代码。

或者更改代码: kernel/sound/soc/codecs/msm8x16-wcd.c #define MICBIAS_DEFAULT_VAL 2700000
seoul项目上路径是: vendor/qcom/opensource/audio-kernel/asoc/codecs/sdm660_cdc/msm-analog-cdc.c

(6)修改识别耳机时候的阻抗

kernel/sound/soc/codecs/wcd-mbhc-v2.c #define HS_VREF_MIN_VAL 1400
1.4v,最大只能识别7700欧阻抗的耳机, 这个阻抗指的是mic对地的阻抗,耳机的后两节之间的阻抗
1.5v,最大能识别11k
1.6v,最大能识别17.6k
1.7v,最大能识别37.4k
seoul项目是在vendor/qcom/opensource/audio-kernel/asoc/codecs/wcd-mbhc-v2.h这个文件里面。

(7)Lineout设备

Qcom平台会上报SND_JACK_LINEOUR设备,但是Android层是不支持LINEOUT设备的,不会对事件做出任何响应,如果非要支持,那么就需要做如下修改:
kernel/sound/soc/msm/msm8x16.c .linein_th = 5000,改为 .linein_th = 0,

seoul项目对应如下修改位置:
/vendor/qcom/opensource/audio-kernel/asoc/msm8952.c .linein_th = 5000,

(8)如果没有兼容欧标美标开关,但是想播放音乐(不能通话),可以做如下修改

595  static void wcd_correct_swch_plug(struct work_struct *work)
596  {......745  			if ((pt_gnd_mic_swap_cnt == mbhc->swap_thr) &&
746  				(plug_type == MBHC_PLUG_TYPE_GND_MIC_SWAP)) {
747  				/*
748  				 * if switch is toggled, check again,
749  				 * otherwise report unsupported plug
750  				 */
+++					plug_type = MBHC_PLUG_TYPE_HEADPHONE;
751  				if (mbhc->mbhc_cfg->swap_gnd_mic &&
752  					mbhc->mbhc_cfg->swap_gnd_mic(codec,
753  					true)) {
754  					pr_debug("%s: US_EU gpio present,flip switch\n"
755  						, __func__);
756  					continue;
757  				}
758  			}

(9)对耳机按键阻值等调控

耳机上报的键值定义(和(7)linein_th定义在一个文件中的):

88  	.key_code[0] = KEY_MEDIA,
89  	.key_code[1] = KEY_VOICECOMMAND,
90  	.key_code[2] = KEY_VOLUMEUP,
91  	.key_code[3] = KEY_VOLUMEDOWN,
92  	.key_code[4] = 0,
93  	.key_code[5] = 0,
94  	.key_code[6] = 0,
95  	.key_code[7] = 0,

#define WCD_MBHC_DEF_BUTTONS 8
seoul项目耳机按键的数量定义在vendor/qcom/opensource/audio-kernel/asoc/codecs/wcd-mbhc-v2.h这个文件里面。
耳机按键的阈值定义在:static void *def_msm8x16_wcd_mbhc_cal(void)
seoul项目则是定义在vendor/qcom/opensource/audio-kernel/asoc/msm8952.c目录,static void *def_msm8952_wcd_mbhc_cal(void)函数当中。

1588  	/*
1589  	 * In SW we are maintaining two sets of threshold register
1590  	 * one for current source and another for Micbias.
1591  	 * all btn_low corresponds to threshold for current source
1592  	 * all bt_high corresponds to threshold for Micbias
1593  	 * Below thresholds are based on following resistances
1594  	 * 0-70    == Button 0
1595  	 * 110-180 == Button 1
1596  	 * 210-290 == Button 2
1597  	 * 360-680 == Button 3
1598  	 */
1599  	btn_low[0] = 75;
1600  	btn_high[0] = 75;
1601  /*Begin Modified by fuhua.wang for defect_id: 8697471 on 2019 12.19 */
1602  	btn_low[1] = 120;
1603  	btn_high[1] = 120;
1604  /*End   Modified by fuhua.wang for defect_id: 8697471 on 2019 12.19 */
1605  	btn_low[2] = 225;
1606  	btn_high[2] = 225;
1607  	btn_low[3] = 450;
1608  	btn_high[3] = 450;
1609  	btn_low[4] = 500;
1610  	btn_high[4] = 500;
1611  
1612  	return msm8952_wcd_cal;

如果想调试按键的阈值:
分别配置MBHC为CS(Current Source)和MB(MIC BIAS)模式:
CS mode : 0x144 = 0x00, 0x151 = 0xB0
MB mode : 0x144 = 0x80, 0x151 = 0x80
adb root
cd sys/kernel/debug/soc//msm8x16_wcd_codec/
echo “” > codec_reg
类如: echo “0x121 0xA0” > codec_reg
按下耳机按键,分别测量两个模式下的耳机mic上的电压值,把测量的值分别填入高通提供的表格,或者按照80-NK808-15的Table3-3和Table3-4计算出最后的阀值。

以上信息可以参考其他的blog,但是我认为写得有点啰嗦。

软件逻辑

识别,按键,上报等关键细节
接下来都以Seoul项目为模板
目录位置:vendor/qcom/opensource/audio-kernel/asoc/codecs
耳机操作主要是带MBHC(Multibutton headset control)字样的文件。

在哪儿识别

vendor/qcom/opensource/audio-kernel/asoc/codecs/wcd-mbhc-v2.c
wcd_mbhc_mech_plug_detect_irq这个函数作为入口,其中的wcd_mbhc_swch_irq_handler作为实现。
根据mbhc->current_plugdetection_type判断耳机当前状态。
以插入耳机为例,正常流程则会进入到调用mbhc->mbhc_fn->wcd_mbhc_detect_plug_type(mbhc);函数,到wcd-mbhc-adc.cwcd_mbhc_adc_detect_plug_type函数中。

/* called under codec_resource_lock acquisition */
static void wcd_mbhc_adc_detect_plug_type(struct wcd_mbhc *mbhc)
{struct snd_soc_codec *codec = mbhc->codec;pr_debug("%s: enter\n", __func__);WCD_MBHC_RSC_ASSERT_LOCKED(mbhc);if (mbhc->mbhc_cb->hph_pull_down_ctrl)mbhc->mbhc_cb->hph_pull_down_ctrl(codec, false);WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_DETECTION_DONE, 0);if (mbhc->mbhc_cb->mbhc_micbias_control) {mbhc->mbhc_cb->mbhc_micbias_control(codec, MIC_BIAS_2,MICB_ENABLE);} else {pr_err("%s: Mic Bias is not enabled\n", __func__);return;}/* Re-initialize button press completion object */reinit_completion(&mbhc->btn_press_compl);wcd_schedule_hs_detect_plug(mbhc, &mbhc->correct_plug_swch);pr_debug("%s: leave\n", __func__);
}

正常情况下就能走到wcd_schedule_hs_detect_plug(mbhc, &mbhc->correct_plug_swch);开始执行wcd_correct_swch_plug。这个函数就是识别设备的主要逻辑了,详细可以看源码。

在哪儿上报

上述的wcd_correct_swch_plug函数就是上报之前的临门一脚。
其中可以看到有多次检测是否欧美标转换,

static void wcd_correct_swch_plug(struct work_struct *work)
{......do {cross_conn = wcd_check_cross_conn(mbhc);try++;} while (try < mbhc->swap_thr);if (cross_conn > 0) {plug_type = MBHC_PLUG_TYPE_GND_MIC_SWAP;pr_debug("%s: cross connection found, Plug type %d\n",__func__, plug_type);goto correct_plug_type;}//如果设置了交叉检测,即欧美标转换,那么则进入继续确认的步骤,否则直接通过`wcd_mbhc_find_plug_and_report`上报耳机type了。  ....../** Report plug type if it is either headset or headphone* else start the 3 sec loop*/if ((plug_type == MBHC_PLUG_TYPE_HEADSET ||plug_type == MBHC_PLUG_TYPE_HEADPHONE) &&(!wcd_swch_level_remove(mbhc))) {WCD_MBHC_RSC_LOCK(mbhc);wcd_mbhc_find_plug_and_report(mbhc, plug_type);//直接通过`wcd_mbhc_find_plug_and_report`上报耳机typeWCD_MBHC_RSC_UNLOCK(mbhc);}......//进入继续确认的步
correct_plug_type:timeout = jiffies + msecs_to_jiffies(HS_DETECT_PLUG_TIME_MS);while (!time_after(jiffies, timeout)) {

继续确认主要是针对欧美标转换设置的,为了兼容更多的耳机,即使硬件没有转换开关,多半还是选择识别成三段式耳机,不过耳机状态基本都给到了wcd_mbhc_find_plug_and_report函数接口,通过它给wcd_mbhc_report_plug函数做逻辑判断,然后上报,上报类型为SND_JACK_UNSUPPORTED等。

//wcd-mbhc-v2.c
void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion,enum snd_jack_types jack_type)
{......else{jack_type = SND_JACK_LINEOUT;mbhc->force_linein = true;mbhc->current_plug = MBHC_PLUG_TYPE_HIGH_HPH;if (mbhc->hph_status) {mbhc->hph_status &= ~(SND_JACK_HEADSET |SND_JACK_LINEOUT |SND_JACK_UNSUPPORTED);wcd_mbhc_jack_report(mbhc,&mbhc->headset_jack,mbhc->hph_status,WCD_MBHC_JACK_MASK);}

按键识别

中断的注册是在init函数中的wcd_mbhc_btn_press_handler

int wcd_mbhc_init(struct wcd_mbhc *mbhc, struct snd_soc_codec *codec,const struct wcd_mbhc_cb *mbhc_cb,const struct wcd_mbhc_intr *mbhc_cdc_intr_ids,struct wcd_mbhc_register *wcd_mbhc_regs,bool impedance_det_en)
{......ret = mbhc->mbhc_cb->request_irq(codec,mbhc->intr_ids->mbhc_btn_press_intr,wcd_mbhc_btn_press_handler,"Button Press detect", mbhc);

进入static irqreturn_t wcd_mbhc_btn_press_handler(int irq, void *data)函数之前,中断已经触发了,其中的

mbhc->is_btn_press = true;
msec_val = jiffies_to_msecs(jiffies - mbhc->jiffies_atreport);....../* If switch interrupt already kicked in, ignore button press */
if (mbhc->in_swch_irq_handler) {pr_debug("%s: Swtich level changed, ignore button press\n",__func__);goto done;
}
mask = wcd_mbhc_get_button_mask(mbhc);
if (mask == SND_JACK_BTN_0)mbhc->btn_press_intr = true;//Begin-modify-by-fuhua.wang-for-task 8384912 on 20190926//if (mbhc->current_plug != MBHC_PLUG_TYPE_HEADSET) {if (mbhc->current_plug != MBHC_PLUG_TYPE_HEADSET && !mbhc->is_selfie_stick_insert) { //End-add-by-fuhua.wang-for-task 8384912 on 20190926pr_err("%s: Plug isn't headset, ignore button press\n",__func__);goto done;
}

作为开始处理按键的标志。
mask = wcd_mbhc_get_button_mask(mbhc);则是哪个按键的标志。深究可以发现是调用msm-analog-cdc.c中的msm_anlg_cdc_mbhc_map_btn_code_to_num函数,其中的snd_soc_read则是读取codec的寄存器了,这个接口是kernel/msm-4.9/sound/soc/soc-io.c中定义。

当放开按键的时候,则会调用wcd_mbhc_release_handler上报jack。

static irqreturn_t wcd_mbhc_release_handler(int irq, void *data)
{......wcd_mbhc_jack_report(mbhc, &mbhc->button_jack,0, mbhc->buttons_pressed);} else {if (mbhc->in_swch_irq_handler) {pr_debug("%s: Switch irq kicked in, ignore\n",__func__);} else {pr_debug("%s: Reporting btn press\n",__func__);wcd_mbhc_jack_report(mbhc,&mbhc->button_jack,mbhc->buttons_pressed,mbhc->buttons_pressed);pr_debug("%s: Reporting btn release\n",__func__);wcd_mbhc_jack_report(mbhc,&mbhc->button_jack,0, mbhc->buttons_pressed);

短按都在这里了,长按则会进入wcd_btn_lpress_fn:

static void wcd_btn_lpress_fn(struct work_struct *work)
{struct delayed_work *dwork;struct wcd_mbhc *mbhc;s16 btn_result = 0;pr_debug("%s: Enter\n", __func__);dwork = to_delayed_work(work);mbhc = container_of(dwork, struct wcd_mbhc, mbhc_btn_dwork);WCD_MBHC_REG_READ(WCD_MBHC_BTN_RESULT, btn_result);if (mbhc->current_plug == MBHC_PLUG_TYPE_HEADSET) {pr_debug("%s: Reporting long button press event, btn_result: %d\n",__func__, btn_result);wcd_mbhc_jack_report(mbhc, &mbhc->button_jack,mbhc->buttons_pressed, mbhc->buttons_pressed);}pr_debug("%s: leave\n", __func__);mbhc->mbhc_cb->lock_sleep(mbhc, false);
}

综述

如果只是为了应付项目里常见修改,文章开头列举的足矣。

但有可能会遇到更难的情况,或者更棘手的需求,或者需要创新,这个时候就需要深入了解软件接口和框架了,而且具体问题具体分析,本文仅仅针对了重要的接口,详细问题,比如增加自拍杆等重新定义一个特征按键等,需要另起分析,否则篇幅过长,不利于把握。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Symbol基本数据类型

    symbol 是一种基本数据类型 (primitive data type)。每个从Symbol()返回的symbol值都是唯一的。不支持语法:"new Symbol()":从 ECMAScript 6 开始不再被支持原始数据类型创建一个显式包装器对象。 然而,现有的原始包装器对象,如 new Boolean、new String以及ne…...

    2024/4/24 14:58:45
  2. 删除链表中的元素(java实现)

    给定一个链表,删除链表中的某个元素, 例如给定链表:1->2->3->4->5->6 删除节点元素5后输出:1->2->3->4->6 链表类 ListNode.java public class ListNode {int val;ListNode next;public ListNode(int val) {this.val = val;}/*** 将int[]数组转…...

    2024/4/24 14:58:46
  3. js:操作html dom节点

    1、创建新节点 document.createElement("li"); //创建一个元素document.createTextNode("文本内容"); //创建一个文本节点2、添加、移除、替换、插入 父节点.appendChild("子节点") //父节点的最后插入一个新的子节点。父节点.insertBefore(新子…...

    2024/5/7 13:04:24
  4. springboot maven pom.xml 第一行报错

    1、报错 unknow ,在 pom.xml 中添加<properties><spring-cloud.version>Greenwich.SR1</spring-cloud.version><maven-jar-plugin.version>3.1.1</maven-jar-plugin.version></properties>2、若还未解决,报错 org.apache.maven.archiver…...

    2024/4/24 14:58:43
  5. 【2020新版】六家云厂商价格比较:AWS、阿里云、Azure、Google Cloud、华为云、腾讯云

    去年8月,我们选择了国内外六家云厂商做了份资源价格报告,将近一年过去了,我们上个新。 做事呢,最重要的就是有始有终。今年,我们依旧选择了这六家公有云厂商AWS、阿里云、Azure、Google Cloud、华为云、腾讯云进行整体比较,对比内容包括以下四项: 整体情况:地域分布/计…...

    2024/4/15 2:59:57
  6. C++实现非极大抑制(NMS)算法

    1、NMS算法 1.1、算法原理 1、将同一类的检测结果按照得分排序。 2、计算得分最高的检测框与其他检测框的重叠度(IOU),删除大于设定的重叠度阈值的检测框。 3、对于小于重叠度阈值的检测框重复1、2的操作,直到遍历完所有的检测框 1.2、算法实现(只有一类) std::vector<int…...

    2024/4/30 7:26:28
  7. 00 - 问题导向

    1. 源代码到可执行代码,以及查看方法。2. 可执行代码到源代码的反推。3. 操作系统组成部分4. 操作系统运行机制5. 操作系统发展历史6. 操作系统设计原理...

    2024/4/19 8:35:59
  8. element中动态切换设置prop无效的解决方案

    问题描述:通过checkbox动态给表单加验证,选中表单项就加上表单验证思路:原本是想给el-form-item动态设置prop属性,但是切换之后发现无效,从网上搜寻无果,便想着通过v-if来控制prop的两个属性值,选中时,能验证的展示注意,一定要加上key值,否则v-if渲染时,还是无法加上…...

    2024/4/30 23:04:27
  9. petalinux-build error: Failed to copy images to TFTPBOOT /tftpboot

    去掉tftpboot的设置petalinux-config -> Image Packaging Configuration -> Copy final images to tftpboot...

    2024/4/16 11:44:50
  10. 求助如何用C语言编写三个小球的动态碰撞

    在屏幕上显示三个小球,其中一个是静止的,而另外两个小球在同一水平线上(设备坐标系)。当第一个小球运动撞击另一个小球后,前者将静止,后者运动。 1.小球运动过程是连续的。 2.小球撞击到屏幕的边界后,应能返回(沿发射方向)。 3.任何时刻只有一个小球在运动。...

    2024/4/28 15:11:06
  11. hive清空外部表的三种方式

    本文总结hive中清空外部表的三种方式hive版本:2.1.1环境准备新建一张外部表:create external table test_external (name String,age int,sex String) stored as orc;插入数据:insert into table test_external values("johnson",18,"男");查看数据:如…...

    2024/4/15 2:59:51
  12. C语言为何不会过时?你需要掌握多少种语言?

    01 为什么C语言不会过时 评价任何一门编程语言,都是招人骂的。永远是这样。就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:“傻逼!”这个在心理学上有个专业的名字:叫做“二逼”现象! 那我为啥还要做这个挨骂的事呢?作为《C语…...

    2024/4/28 15:21:43
  13. MultipartFile 转为File 工具类

    MultipartFile 转为File 工具类 public static File multipartFileToFile(MultipartFile file) throws Exception {File toFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {InputStream ins = null;ins = file.getInputStream();t…...

    2024/4/24 14:58:41
  14. BaseHTTPServer模块解析

    转载自:https://blog.csdn.net/xhw88398569/article/details/49179967 #coding=utf-8Created on 2015-7-20 @author: xhw @explain: 实现GET方法和POST方法请求from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler import urllibclass ServerHTTP(BaseHTTPReq…...

    2024/5/7 17:46:24
  15. Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse

    问题描述: 后端正常返回数据 前端报错:Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse 处理方法:如图无需再转JSON了,可以直接使用。...

    2024/4/30 23:02:11
  16. Java学习笔记:static关键字

    静态属性:非静态变量score不能直接这么用,但是可以通过s1对象进行访问;静态变量age是可以直接用的,静态变量多用于多线程。run()方法无法调用,必须新建一个对象,然后才可以调用run()方法 建go()方法可以直接调用,static可以扩大使用范围。 非静态方法可以去调用静态方法…...

    2024/4/30 18:53:40
  17. XML的语法以及约束

    XML语法以及约束 1.文档声明:声明XML文档的类型(<?xml version="1.0" encoding="UTF-8"?>) 2.标签(元素) 2.1文件有且仅有一个根标签,其他标签都必须封装在根标签中 2.2非空标签必须有“开始标签”和“结束标签”组成,空标签没有开始标签 2…...

    2024/5/3 18:17:13
  18. Excel查找2列相同的数据,并且返回对应列的另1列数据

    代码: =INDEX(A:A,MATCH(B2,C:C,0))...

    2024/4/30 16:14:24
  19. Pyspark Dataframe 根据一个list的内容来 filter

    意思就是df.filter(df.name in [a,b,c,d,e,f,g]) 大概这个意思from pyspark.sql.functions import col df.filter(col("name").isin(a_list)).show()...

    2024/4/30 22:17:39
  20. Python+Django项目部署到Ubuntu腾讯云服务器

    1.申请腾讯云服务器https://console.cloud.tencent.com新用户三年288RMB,一年95RMB。只能选一次,新用户福利。...

    2024/4/30 16:18:43

最新文章

  1. u段麦克风方案无线技术的特点与优势

    UHF无线麦克风相比其他无线技术具有多个优势&#xff1a; 低成本和高效率&#xff1a;UHF无线麦克风系统可以实现低成本的解决方案&#xff0c;特别是在短距离应用中&#xff0c;如教室中的助听设备。这种系统不仅成本较低&#xff0c;还能提供与电话质量相近的声音质量&#…...

    2024/5/7 21:21:38
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/5/5 15:55:12
  4. Python读取文件里内容

    如果要读取一个文件里的内容是 # 文件名&#xff1a;db.txt 1 2 3 4代码如下 import requests f open("db.txt", mode"rb") content f.read() f.close()data content.decode(utf-8)# 存到 list 里 data_list data.split(\r\n) print(data_list)# 结果…...

    2024/5/5 8:37:34
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57