工作随笔2018-03-06

今天的主要工作在于写播放器的音量调节,昨晚解决了多线程的问题。

1.如何获取键盘输入?

方法是使用linux/input.h 用read /dev/input/event1的方式获取键盘事件,注意,event.type

是事件类型而非键值;一次按键会触发多个事件,我们只需要捕捉按下的事件即可,否则会导致异常按键的default分支多次执行。

2.如何在播放过程中,实现播放器音量的调节?

查到一条指令amixer set Master XX,但这调节的是全局声音而非播放器音量。
播放器修改音量需要调用scale函数,由于这部分层层嵌套调用,底层函数scale需要传新的参数时改动量大,而且部分顶层函数以函数作为参数,是黑箱的情况下 其参数表 难以擅自改动,解决办法是在对应的头文件中声明全局变量。

3.如何在播放过程中实现暂停,播放,上一曲下一曲?

目前的机制是计算要播放的音乐,开始解码播放,完毕后计算下一曲应播放什么音乐,其缺点在于播放过程中无法利用键盘端的事件进行调节

看了一下,在output函数中判断flag改变输出值,可以打断播放,但是无法恢复

目前只能在一首歌放完后才会判断下一首是什么,比较合理的方法是,在播放过程中不断的判断当前歌曲,如果不一致,则跳出播放,改为播放新的歌曲。

说到底,用现成的函数,就无法掌控解码播放的全过程,不清楚其工作原理。

目前看到的暂停的修改方式是不断改continue打断input的解码

又看了一篇博客,加深了对机制的理解,考虑将input和output分离开

中间可以插入控制,即控制指令只在帧的间隔生效。

目前实现了播放和解码的分离,但是多曲连播不正常,原因待查


接手了查找程序崩溃原因的任务,拿到了core_dump和使用-g编译的gdb程序

发现崩溃发生在uClibc中,无法查看对应的库代码,也找不到对应的顶层代码

1.考虑先确认发生在哪个线程中,思路是程序初始化创建线程时,记录下对应线程号和功能供后续查看。【经确认,gdb中的线程号ID和实际的tid是不同的,暂时未找到如何一一对应的办法,需确认程序是否只在一开始的时候进行线程的创建——配网过程会起线程,配网结束则销毁,可确认并非该线程导致的错误】

2.因为使用了动态库,程序中没有对应的符号表,导致无法定位,考虑改用静态编译方法,需要准备好对应的静态库,若已有对应的静态库,则需要修改makefile文件。

目前已经有的线索只有该崩溃时间不定,已经确认该崩溃发生在网关模块



配网问题

失败以后

A:nr    B:reboot    C:firstboot    D:修改config/wireless中的wifi信息

交叉测试A,0    AD,0    B,0    BD,0   C,1

对比了配网前后的wireless文件,发现存在三处不同:


第一处是auto的单引号有无

第二处 hidden是单双引号

第三处 ssid的顺序

从origin出发单变量依次全部排除

发现是脚本ssid和passwd反了,发现ios app 端写反了,导致ikcc端写反。













猜你喜欢

转载自blog.csdn.net/linearf/article/details/79457362
今日推荐