发新帖本帖赏金 8.00元(功能说明)我要提问
返回列表
打印

准裸奔--基于VSF的网络收音机+MP3播放器

[复制链接]
5245|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Simon21ic|  楼主 | 2015-12-29 13:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Simon21ic 于 2016-1-6 15:19 编辑

VSF构架已经类似操作系统了,只是还不能完全算是抢占式的,所以,这里就准裸奔一下。

【硬件】
主控:NUC505(内置Audio Codec)无线:bcm43362A2模块或者bcm43438模块
其他硬件:Audio PA驱动喇叭,USB主机和从机接口,MIC

【功能】
1. wifi(以后会增加蓝牙,目前USB接口的CSR蓝牙已经搞定,以后根据情况,选择是否移植到bcm43438)
tcpip使用vsfip协议栈,实测SDIO 32M下,TCP吞吐量在1.5MB/s左右(可实现大数据量不压缩wav播放)。
2. 基于云的语音识别和语音综合
可以实现语音点歌,实现MP3软解。以后还可以实现语音机器人
3. tcpip的各种应用,socket接口
webserver、各种FM电台。有兴趣的话,还可以玩dlna、airplay等。
4. 通用usb主机协议栈vsfusbh,可以扩展各种设备驱动
5. 协作式多任务平台
多个应用可以同时跑,类似RTOS里多线程的开发方式

【命令行输出】

这个是命令行输出,命令行界面也是自己做的

【软件】硬件比较简单,软件上可以玩的东西就比较多了:
bcm43362A2驱动 -- 参考并完全重写了博通的WICED里的驱动,有兴趣的话,自己看WICED里的代码吧,我就不公开我们的驱动了
tcpip协议栈 -- vsfip,今年年初自己写的协议栈,目前经过一些测试,基本稳定,代码占用接近uip(ram占用要多,因为使用了不止1个缓冲),功能接近lwip,应用使用socket方式开发
蓝牙协议栈 -- 参照btstack,不过做了大量的修改,还未完全改完,这个应该不会公开了,目前使用USB接口的CSR蓝牙模块测试
MP3软解 -- 使用helix MP3,开源部分会使用libmad,因为helix的开源协议和GPL不兼容,不过libmad占用的资源略大
各种tcpip应用,甚至包括iSCSI,其实是移植linux里的应用代码,由于VSF本省就是多任务环境,vsfip也是基于socket编程,移植起来还算比较顺利。当然,其他的应用也可以移植,比如dlna什么的。
通用USB主从机协议栈 -- 通用USB从机协议栈我很久以前就做了,可以在不同的处理器上运行,需要移植USB的EP等基本驱动。USB主机协议栈是我们公司的一个同事开发的,也是基于VSF的构架,也做了一些设备的驱动,甚至包括UVC驱动。
xmlparser -- 我们的一个兼职人员开发的简易xml解析程序
airkiss目前也不会公布,airkiss固件博通本来就没公开
各种云 -- 待续
固件模块的动态加载 -- 这个是计划中的,比如,我们服务器上增加了豆瓣FM的模块,那么当用户说“豆瓣FM”的时候,我们的硬件可以自动从服务器上下载固件模块,并载入运行

【待续】最近有些忙,稍微等一会发布代码






打赏榜单

21ic小喇叭 打赏了 8.00 元 2016-01-06
理由:原创~~

相关帖子

沙发
thl168168| | 2015-12-29 16:38 | 只看该作者
楼主强大!!做出来传个图看看!!高大上!!!

使用特权

评论回复
板凳
keer_zu| | 2015-12-29 17:30 | 只看该作者
公布些细节啊

使用特权

评论回复
地板
Simon21ic|  楼主 | 2015-12-29 20:53 | 只看该作者
本帖最后由 Simon21ic 于 2015-12-29 21:01 编辑

一点一点加了,还在考虑怎么开源呢,确实有一部分代码不会开源
硬件目前还没搞定,这个在测试版上弄的,不过外壳已经选好了
上外壳的图片吧


使用特权

评论回复
5
keer_zu| | 2015-12-30 11:05 | 只看该作者
Simon21ic 发表于 2015-12-29 20:53
一点一点加了,还在考虑怎么开源呢,确实有一部分代码不会开源
硬件目前还没搞定,这个在测试版上弄的,不 ...

放在github吧

使用特权

评论回复
6
Simon21ic|  楼主 | 2015-12-30 11:35 | 只看该作者

开源的部分就在github里,github.com/versaloon/vsf

使用特权

评论回复
7
keer_zu| | 2015-12-30 11:55 | 只看该作者
Simon21ic 发表于 2015-12-30 11:35
开源的部分就在github里,github.com/versaloon/vsf

使用特权

评论回复
8
Simon21ic|  楼主 | 2016-1-3 21:16 | 只看该作者
本帖最后由 Simon21ic 于 2016-1-4 01:08 编辑

先发布一些代码吧:
        mp3->mp3_fifo.buffer.buffer = (uint8_t *)mp3->mem_mp3;
        mp3->mp3_fifo.buffer.size = MP3_CACHE_SIZE;
        mp3->stream_mp3.op = fifo_stream_op;
        mp3->stream_mp3.user_mem = &mp3->mp3_fifo;
        mp3->wav_fifo.buffer.buffer = (uint8_t *)mp3->mem_wav;
        mp3->wav_fifo.buffer.size = WAV_CACHE_SIZE;
        mp3->stream_wav.op = fifo_stream_op;
        mp3->stream_wav.user_mem = &mp3->wav_fifo;

        stream_init(&mp3->stream_mp3);
        stream_init(&mp3->stream_wav);

        audiodrv_op.connect_output(&audiodrv, &mp3->stream_wav);

        mp3filter_op.init(&mp3filter);
        mp3filter_op.connect_in(&mp3filter, &mp3->stream_mp3);
        mp3filter_op.connect_out(&mp3filter, &mp3->stream_wav);

        mp3->httpc.port = 80;
        mp3->httpc.op = vsfip_httpc_op_stream;
        mp3->local_pt.user_data = &mp3->httpc;
        mp3->local_pt.state = 0;
        vsfsm_pt_entry(pt);
        err = httpc_get(&mp3->local_pt, evt, &mp3->stream_mp3, "XXXX.com/TEST.mp3");
        if(err > 0) return err; if(err < 0) goto handler_thread_end;

设置了MP3流和wav流,http_get工作在流模式,收到数据后,直接流进mp3解码器,然后mp3解码后,流进wav流,最后从音频驱动输出
这几行代码就可以实现HTTP下载MP3并同步解码播放了
不过这个是我们兼职人员开发的,还有不少东西需要修改

使用特权

评论回复
9
Simon21ic|  楼主 | 2016-1-5 12:12 | 只看该作者
本帖最后由 Simon21ic 于 2016-1-5 12:18 编辑
yyy71cj 发表于 2016-1-5 09:17
我觉得重在讲解,而不是急于公布代码,公布代码只要一个压缩包就可以了 ...

代码还在整理中,涉及到的需要修改的部分还是挺多的
讲解的话,其实我以前的帖子也都提到过了,比如流驱动,音频解码和播放只是流驱动的一个应用
而且,要讲解的应该不是应用部分代码,而是各个模块的代码,貌似有些多

使用特权

评论回复
10
keer_zu| | 2016-1-5 20:49 | 只看该作者
不错

使用特权

评论回复
11
yeekum| | 2016-1-11 17:15 | 只看该作者
期望完整的代码

使用特权

评论回复
12
Simon21ic|  楼主 | 2016-1-12 01:03 | 只看该作者
本帖最后由 Simon21ic 于 2016-1-12 01:22 编辑
yeekum 发表于 2016-1-11 17:15
期望完整的代码

会有完整的应用部分的代码,不过系统部分,至少蓝牙协议栈以及wifi芯片驱动不会公开。
所以,这个软件的结构是系统+应用,类似linux等,不过说实话,快过年了,而且自己又有很多产品要开发,所以时间上不可能很快,开发过程也可以通过github上的vsf看到,每一步的代码都会在里面更新。只能一点一点秀一些代码,那就秀一个应用的main函数代码吧:
static void app_on_pendsv(void *param)
{
        struct vsfsm_evtq_t *evtq_cur = param, *evtq_old = vsfsm_evtq_get();

        vsfsm_evtq_set(evtq_cur);
        while (vsfsm_get_event_pending())
        {
                vsfsm_poll();
        }
        vsfsm_evtq_set(evtq_old);
}

int main(void)
{
        vsf_enter_critical();
        vsfsm_evtq_init(&app.pendsvq);
        vsfsm_evtq_init(&app.mainq);

        vsfsm_evtq_set(&app.pendsvq);
        vsfsm_init(&app.sm);

        vsfhal_core_pendsv_config(app_on_pendsv, &app.pendsvq);
        vsf_leave_critical();

        vsfsm_evtq_set(&app.mainq);
        while (1)
        {
                // no thread runs in mainq, just sleep in main loop
                vsfhal_core_sleep(SLEEP_WFI);
        }
}

使用特权

评论回复
13
yeekum| | 2016-1-12 11:35 | 只看该作者
Simon21ic 发表于 2016-1-12 01:03
会有完整的应用部分的代码,不过系统部分,至少蓝牙协议栈以及wifi芯片驱动不会公开。
所以,这个软件的结 ...

谢谢,能不能给点蓝牙协议栈的资料?

使用特权

评论回复
14
Simon21ic|  楼主 | 2016-1-12 11:55 | 只看该作者
本帖最后由 Simon21ic 于 2016-1-12 11:56 编辑
yeekum 发表于 2016-1-12 11:35
谢谢,能不能给点蓝牙协议栈的资料?

我们自己做的协议栈吗?代码不会公开,也不没打算提供给别人用,所以有资料也没啥用
大概功能无非是EDR+BLE,可以支持各种profile,已经测试过的是SPP+HID同时运行
不过这个东西到实用还有不少路要走,稳定性和兼容性测试相当花成本

使用特权

评论回复
15
yanxinboy| | 2016-1-13 12:27 | 只看该作者
流弊,可以开公司了。

使用特权

评论回复
16
Simon21ic|  楼主 | 2016-1-14 09:50 | 只看该作者
yanxinboy 发表于 2016-1-13 12:27
流弊,可以开公司了。

这样就能开公司了?

使用特权

评论回复
17
keer_zu| | 2016-1-14 09:59 | 只看该作者
后面遇到蓝牙的问题要像你请教一下:lol

使用特权

评论回复
18
Simon21ic|  楼主 | 2016-1-16 02:35 | 只看该作者
keer_zu 发表于 2016-1-14 09:59
后面遇到蓝牙的问题要像你请教一下

蓝牙是我这里的一个兼职人员开发的,我只是看过大致协议,具体细节不一定会很清楚

使用特权

评论回复
19
Simon21ic|  楼主 | 2016-1-16 02:46 | 只看该作者
进度:新的模块化动态加载的代码已经完成,这部分由于会决定软件平台如何运行,所以就亲自处理了
对老的模块化的代码增强了很多,应用的灵活性更大
老的方法在模块之间调用API的时候限制比较大,模块也不能有全局变量,不过新的模块的实现方式,解决了这些问题
我们的一些不公开代码的功能,会使用模块的方式发布,应用程序载入模块后,可以调用相应的功能

注意,这里说的模块化,是指可以动态加载的模块,模块是在flash里的程序和数据,载入前不占用系统资源,载入后才会占用相应的RAM。甚至真对诸如NUC505,代码都需要复制到内存运行的芯片来说,可以更佳合理的按需分配芯片资源

使用特权

评论回复
20
Simon21ic|  楼主 | 2016-1-26 16:41 | 只看该作者
进度:USB设备端协议栈优化完成,同步整理以前的一些代码

使用特权

评论回复
发新帖 本帖赏金 8.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

266

主题

2597

帖子

104

粉丝