Code Monkey home page Code Monkey logo

fw-ac63_bt_sdk's Introduction

fw-AC63_BT_SDK tag

中文 | EN

AC63 系列通用蓝牙SDK 固件程序

本仓库包含SDK release 版本代码,线下线上支持同步发布,并且引用了其他开源项目(如Zephyr RTOS).

本工程提供的例子,需要结合对应命名规则的库文件(lib.a) 和对应的子仓库进行编译.

快速开始

欢迎使用杰理开源项目,在开始进入项目之前,请详细阅读SDK 介绍文档, 从而获得对杰理系列芯片和SDK 的大概认识,并且可以通过快速开始介绍来进行开发.

工具链

关于如何获取杰理工具链 和 如何进行环境搭建,请阅读以下内容:

  • 编译工具 :请安装杰理编译工具来搭建起编译环境, 下载链接

  • USB 升级工具 : 在开发完成后,需要使用杰理烧写工具将对应的hex文件烧录到目标板,进行开发调试, 关于如何获取工具请进入申请 链接 并详细阅读对应的文档,以及相关下载脚本配置

介绍文档

编译工程

请选择以下一个工程进行编译,下列目录包含了便于开发的工程文件:

  • 蓝牙应用 : SPP_LE, 适用领域:透传, 数传, 扫描设备, 广播设备, 信标, FindMy应用, 多机连接. Dongle(usb / bt). 文档链接

  • 蓝牙应用 : HID, 适用领域:遥控器, 自拍器, 键盘, 鼠标, 吃鸡王座, 语音遥控器. 文档链接

  • 蓝牙应用 : Mesh, 适用领域:物联网节点, 天猫精灵接入, 自组网应用. 文档链接

已发布版本详见 标签(Tags)。

即将发布:

  • 蓝牙应用 :IoT (ipv6 / 6lowpan)

  • 2.4G 应用 : Vendor Wireless

SDK 同时支持Codeblock 和 Make 编译环境,请确保编译前已经搭建好编译环境,

  • Codeblock 编译 : 进入对应的工程目录并找到后缀为 .cbp 的文件, 双击打开便可进行编译.

  • Makefile 编译 : 双击tools/make_prompt.bat,输入 make target(具体target的名字,参考Makefile开头的注释)

    在编译下载代码前,请确保USB 升级工具正确连接并且进入编程模式

  • 蓝牙OTA : OTA , 适用领域:单备份,双备份蓝牙升级

蓝牙官方认证

经典蓝牙LMP / 低功耗蓝牙Link Layer 层和Host 协议栈均支持蓝牙5.0 、5.1和5.4版本实现

硬件环境

  • 开发评估板 :开发板申请入口链接

  • 生产烧写工具 : 为量产和裸片烧写而设计, 申请入口 链接 并仔细阅读相关 文档

  • 无线测试盒 : 为空中升级/射频标定/快速产品测试而设计, 申请入口 链接, 阅读文档 获取更多详细信息.

社区

  • 技术交流群,钉钉群 ID: 3375034077

  • 常见问题集合链接

免责声明

AC63_BT_SDK 支持AC63 系列芯片开发. AC63 系列芯片支持了通用蓝牙常见应用,可以作为开发,评估,样品,甚至量产使用,对应SDK 版本见tag 和 release

fw-ac63_bt_sdk's People

Contributors

hhy-ccj avatar jielitech avatar jl-minxian avatar main010 avatar nocodenolife-404 avatar rixin-tech avatar tsai1005 avatar weilingyong avatar xjtuecho avatar yzb201611 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fw-ac63_bt_sdk's Issues

关于AC637N的红外接收

用原先AC636N的红外代码移植到AC637N中,发现无法正常使用,这个应该是与上次问道的定时中断类似,寄存器改变了,所以用不了,麻烦提供一份AC637N可用的红外代码,或者提供下irflt.c文件中的寄存器配置应该如何修改,谢谢

关于ble和uart双备份升级

要实现ble和uart双备份升级方式并存,需要配置和实现什么东西,目前只能从官方了解到一些模糊的说法,并没有具体的文档指导,如果涉及到一些接口的实现,例如之前给出的rcsp_ch_loader_download.c,官方历程里没有直观的注释,不容易理解。

PC4口电平异常

芯片6965,上电后PC4一直默认输出高?即使在int main()中立即拉低PC4还是会有15ms的高电平,如何解决?
int main()
{

gpio_set_pull_up(IO_PORTC_04,0);
gpio_set_pull_down(IO_PORTC_04,0);
gpio_set_direction(IO_PORTC_04,0);
gpio_set_output_value(IO_PORTC_04,0);
。
。

更新0.7.1SDK后OTA问题

从0.5SDK更新到0.7.1SDK后. 编译工程得到update.ufw 升级文件并放到云服务器上。 设备通过OTA升级update.ufw. 升级后出现了如下问题。

OTA升级后不能回退之前版本了(现象是手机软件端点击回到之前的某个版本,在升级中,然后卡死,然后蓝牙名字变为xx_OTA,手机无法连接此蓝牙)

用 AC63_BT_SDK 开发 AC6969A

'关于AC63xx 命名规则' 提到 AC636X 和 AC696X 系列 只是 Flash 电压不同.

那可以用 AC63_BT_SDK 开发 AC696X 系列吗? ( AC6965A, AC6969A, etc )

有什么注意事项? ( 比如电压检测是不是要该. )

关于Mesh 烧写信息

为配合客户生产,现在需要整理Mesh 方案预烧录的信息项:

  • 三元组
  • App key
  • Net key

Note 暂定烧写器与OTA 分别支持,如需要其他信息,请Comment 添加

696x 1.2sdk , 想用硬件定时器做较为准确的us_delay ,发现定时器时间很不均匀,如何解决?

下图是io在中断里取反:image

如下是定时器配置:
#if (1)
#define TCFG_USER_TIMER_ENABLE
#endif

#ifdef TCFG_USER_TIMER_ENABLE

struct timer_hdl {
int index;
int prd;
};

static struct timer_hdl hdl;

#define __this (&hdl)

static const u32 timer_div[] = {
/0000/ 1,
/0001/ 4,
/0010/ 16,
/0011/ 64,
/0100/ 2,
/0101/ 8,
/0110/ 32,
/0111/ 128,
/1000/ 256,
/1001/ 4 * 256,
/1010/ 16 * 256,
/1011/ 64 * 256,
/1100/ 2 * 256,
/1101/ 8 * 256,
/1110/ 32 * 256,
/1111/ 128 * 256,
};

#define APP_TIMER_CLK clk_get("timer")
#define MAX_TIME_CNT 0x7fff
#define MIN_TIME_CNT 0x100

#define TIMER_CON JL_TIMER3->CON
#define TIMER_CNT JL_TIMER3->CNT
#define TIMER_PRD JL_TIMER3->PRD
#define TIMER_VETOR IRQ_TIME3_IDX

#define TIMER_UNIT_MS 1 //1ms起一次中断
#define MAX_TIMER_PERIOD_MS (1000/TIMER_UNIT_MS)

/-----------------------------------------------------------/

/////下面函数调用的使用函数都必须放在ram
volatile unsigned long cut =0;
volatile unsigned char cut_flag=0;

___interrupt
AT_VOLATILE_RAM_CODE
static void timer3_isr()
{
// static u32 cnt1 = 0;

TIMER_CON |= BIT(14);

// if(cut_flag)
// {
// cut++;
// }
JL_PORTB->OUT ^= BIT(7);
//

}
void timer2_delay(unsigned int time)
{
cut_flag=1;
cut=0;
while(1)
{
if(cut>time)
break;
}
cut_flag =0;
}
int timer3_init()
{
u32 prd_cnt;
u8 index;

printf("------------%s :%d", __func__, __LINE__);

for (index = 0; index < (sizeof(timer_div) / sizeof(timer_div[0])); index++) {
    prd_cnt = TIMER_UNIT_MS * (APP_TIMER_CLK / 6000) / timer_div[index];
    if (prd_cnt > MIN_TIME_CNT && prd_cnt < MAX_TIME_CNT) {
        break;
    }
}
__this->index   = index;
__this->prd     = prd_cnt;

TIMER_CNT = 0;
TIMER_PRD = prd_cnt; //1ms
request_irq(TIMER_VETOR, 1, timer3_isr, 0);
TIMER_CON = (index << 4) | BIT(0) | BIT(3);

printf("PRD : 0x%x / %d", TIMER_PRD, clk_get("timer"));

return 0;

}
__initcall(timer3_init);

DUT Q&A

  • Q1、dut 测试(性能测试) 把 CONFIG_BT_MODE PER 或者通过 bredr_set_dut_enble 函数设置是否支持仪器链接,可以在蓝牙初始化完调用或者按键来触发,使能可以被仪器链接,或者是否可以被手机链接,

    en: 是否可以被4010、8852等仪器链接
    phone:在en 开启的同时是否可以被手机链接
    void bredr_set_dut_enble(u8 en, u8 phone);

A:这个测试的功率和正常使用的功率表示一样的!

  • Q2、bqb 测试 需要去实验室过认证的时候,必须使用CONFIG_BT_MODE BT_BQB来去测试、

A:这个功率和正常功率不一样

  • Q3、fcc 测试需要去实验室过认证的时候,必须使用CONFIG_BT_MODE BT_FCC来去测试、

A:这个功率和正常功率不一样

  • Q4、定频测试,客户量产需要测试频偏就通过设置定频就可以

    bredr 的定频接口函数
    bt_fix_fre_api
    客户可以通过按键或者串口来触发进入定频,
    客户知道频偏后可以调用下面接口设置频偏来实现校正
    void bt_osc_offset_ext_save(s32 offset);

A:现在ble还没有弄好定频接口,后续会给出来,最大功率是正常使用的最大功率!

关于AC63xx 命名规则

AC6[3]13 A [2] [H]
-----|---------|---|-->[H] Temperture H = -40~105℃ / T = -40~125℃ / 空 = -40~85℃
-----|---------|
-----|---------|----->[2] Flash Size 2 = 2Mbits / 4 = 4Mbits
-----|
-----|--------------->[3] Flash Voltage : 1.8V / 9 : 2.4V

现有的芯片高温版本,只有AC6368A2H和AC6369F2H。如果有其他型号需要用高压版本,请反馈。

串口升级

通过 串口接受升级包,然后芯片升级, 这个方案可行么?难度怎么样?可以提供升级流程及相关资料么?AC6368A

使能音量同步后,通过按键将音量减到没有声音后,继续按音量减,此时再按音量加后发现音量就再也加不上去了。只有切换模式或者重启音量才能恢复正常。什么原因?如何解决?

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

nRF Mesh unable to Connect node after provisioned

用 'nRF Mesh' Android App 'Add node' ( SIG Generic_On_Off_Server ) 后, 无法再次连接. SDK 0.7.0 and 0.8.0 都试过了.
如果用 bt_mesh_reset 强制 reset, 再用 'nRF Mesh' delete node, 可以重新 'Add Node'.
是不是和定期广播有关?

Describe the bug
After using 'nRF Mesh' Android App to 'Add Node', unable to connect after disconnect the node.

To Reproduce
Steps to reproduce the behavior:

  1. Use 'nRF Mesh' to 'Add Node', bind key.
  2. Disconnect or exit the 'nRF Mesh' App
  3. Click 'connect'
  4. Scanner keep looking but unable to find the provisioned nodes

Expected behavior
'nRF Mesh' App should be able to find provisioned nodes

Smartphone (please complete the following information):

  • Device: LG G7
  • OS: Android
  • Browser [e.g. chrome, safari]
  • SDK Version, tried both 0.7.0 and 0.8.0

AC6311 SDK0.3.0 使用相关问题

1.  isd_config.ini定义了配置数据项。 在编译完成后, 如何查看分配给配置数据项的地址? 
    比如BTIF_ADR , VM_ADR , USERIF_ADR 的分配值 ? 
    
2.  isd_config.ini仅由isd_download.exe使用吗 ?     

3.  isd_download.exe工具生成jl_isd.bin ,由uboot+app+cfg_tool这3文件组成, 有加密处理?
    cfg_tool的内容是如何设定, 与isd_config.ini定义的配置数据项有何关联 ? 
    
4.  如何查看HEAP剩余空间, 调用xPortGetFreeHeapSize() ? 
        
5.  如何查看任务的堆栈使用情况, 是否有溢出?

6.  如何查看系统所有任务的运行状态( 任务名,任务堆栈大小, 当前状态等) ?  

7.  如何查看SDK版本号? 

关于bootloader

我们想自己写boot, 可以实现么,如果可以实现,能不能提供下资料参考

关于选型与替换

【方案切换替换策略】

AC631 - > AC636 优先功能
封装替换:
6313A -> 6363F (非 pin2pin)
6318A -> 6368A/B (pin2pin)
6319A -> 6369C/F (非pin2pin)

AC631 -> AC637 优先功耗
6313A -> 6373B (非 pin2pin)
6319A -> 6379B (非 pin2pin)
6311A -> 6376F (非pin2pin)

更新0.7.1SDK后蓝牙地址问题

从0.5SDK更新到0.7.1SDK后. 编译工程得到update.ufw 升级文件并放到云服务器上。 设备通过OTA升级update.ufw. 升级后出现了问题。

BLE蓝牙MAC地址改变了.(例如原来最后两位是35,变为了23)

'MESH App' 打开 OTA - APP 升级(BLE) , 编译错误

在 app_config.h 打开相关的宏定义:
#define RCSP_BTMATE_EN 1
#define RCSP_UPDATE_EN 1
#define UPDATE_MD5_ENABLE 0

编译报错:
C:\Firmware\Test\fw-AC63_BT_SDK\apps\common\update\update.c:24:10: fatal error: 'rcsp_user_update.h' file not found
#include "rcsp_user_update.h"
^~~~~~~~~~~~~~~~~~~~

SDK: 0.8.0
Chip: AC6369F

如果只打开:
#define CONFIG_DOUBLE_BANK_ENABLE 1
可以编译通过

MESH 支持 OTA 吗?

关于系统重启

在后台任务或定时器中断中调用哪个API能重启系统 ? 同时提供重启后get_power_reset_source_info()的返回值 。 谢谢!

关于637N的定时中断与PWM

用’AC630N_bt_data_transfer_sdk_release_v0.5.0->spp_and_le->br30‘这个SDK,AC6373B的芯片,用原先AC630N的方式写定时中断和PWM,发现用不了,代码移植烧录到AC6318上是没问题的,这两个是有什么差别么,能提供一个例程么

关于测试盒频偏校正

测试盒频偏校正 功能需要前置 条件 频偏测试,
即,拨码开关5 不能独立使用,必须搭配开关4 一起使用,请注意

内置充电

有些芯片型号带: 内置充电 ( 250 mA)

是什么意思?
怎么使用呢?

关于usr_timeout_add()

我们调用usr_timeout_add ()的实例如下:
timerSeq = usr_timeout_add(NULL , LsUartDev_CbFuncOfUsrTimer , 20 , 0 ) ;

请问超时调用回调函数后, 该定时器是否会被系统自动删除 ?

AC6366C的串口

在使用AC6366C的串口UART1RXC时,无法收到信息,而且发外设的TX也被拉低了。
但是我用AC6311A,相同的程序就正常,只是接口定义不同,其他程序都相同。
AC6366C的接口定义:
#define UART_TX IO_PORTA_00
#define UART_RX IO_PORTA_01
AC6311A的接口定义:
#define UART_TX IO_PORTA_05
#define UART_RX IO_PORTA_06

是不是把IO_PORTA_01的串口接收功能关闭了?

关于Flash 容量

通用蓝牙系列型号均为2M 版本,只有AC6366C4和AC6363F4两个型号有4M的版本,有特殊需求的型号可以反馈。

[AC6311] 如何通过定时器实现GPIO引脚(PB9)的脉冲宽度检测, 请给出demo 。

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

AC637N实现硬件触摸

功能:在AC637N上用四个IO口实现四个硬件触摸,但SDK中没有对应的硬件触摸驱动,“lp_touch_key.c”和“lp_touch_key.h”
需求:麻烦提供实现硬件触摸所需要的文件,谢谢

输出数据会被无规律打断

#define WS_OUT IO_PORTA_08//IO_PORTB_08
void Ws_SendByte(u8 data)
{
u8 i=8,j;
for(i=0; i<8; i++)
{
if(data&0x80) //send 1
{
gpio_write(WS_OUT, 1);
delay(0);
gpio_write(WS_OUT, 0);
data<<=1; //左移一位
}
else // send 0
{
gpio_write(WS_OUT, 1);
data<<=1; //左移一位
gpio_write(WS_OUT, 0);
delay(0);
}
}
}
void Ws_play()
{
int i;

for(i=0;i<6;i++)
{
	Ws_SendByte(RainBow[i]);
	Ws_SendByte(RainBow[i]);
	Ws_SendByte(RainBow[i]);
}

}
正确波形

QQ截图20201209094718

错误波形:

1
21
041

关于flash分布

可以给个内存布局图么?
image

image
这是有没有开ble ota对比,只能看到vm和flash减少, 入口地址是0x1E00120, 那么从上图来看,FLASH_BIN_SIZE的起始地址应该是0, 根据你们所说,boot的起始地址为1e000100, 那么boot有多大了?

关于从Github 下载SDK源代码

针对使用压缩包下载的用户,编译工程时会发现批处理格式不正常,到时无法下载,需要转换格式,文件的编码改成windows档案,gbk

image

6368a 只开了ble 从机at模式, 关了edr ,广播间隔设置成1s ,信道开了37 ,发射功率(0~9)设置成2,在蓝牙只广播状态下,任然还是有4ma的功耗,请教一下4ma是否是正常的?若还要降功耗还能做什么?at模式下这颗料能做到多低的功耗?

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

MESH 可以用 CODED PHY 吗?

现在的 SDK 支持 coded phy 吗?

代码里: set_connection_data_phy 注释掉了, 去掉就可以吗?

MESH 可以用 CODED PHY 吗?

关于各种OTA方式所需容量

单位(Byte) 测试盒edr 测试盒ble BLE OTA 串口 U盘 SD卡
AC631x 31496 39228 59180 x x x
AC635x 29698 36242 52744 13368 16863 16555
AC636x 29498 36253 52890 12436 16100 15903

实现AC6311快速关机

目前分析到: 为实现AC6311快速开机功能(整机灭屏后快速按键唤醒), 首先要实现快速软关机或IO引脚低电平唤醒 。
具体事项如下:

         1. AC6311 在软关机状态下实现IO引脚低电平唤醒,请确认该项功能的可行性并给出完成时间 。

        2. 修改AC6311 SDK , 实现快速软关机动作,即调整power_set_soft_poweroff()函数的执行时间为10ms 。
       (在调用前power_set_soft_poweroff(),是有4个任务在运行: 乐心自定义的2个任务, 系统主任务,系统空闲任务) , 请确认该项功能的可行性及完成时间 。 

        目前产品已到MB试产阶段 , 请安排人员解决此问题, 谢谢!  

关于芯片烧录电压

注意所选封装规格书是否VDDIO & VBAT 短接,
若是,则需要按照规格书VDDIO要求,耐压不能超过3.6V
若不是,则按照规格书VDDIO要求,耐压可支持5.5V

关于启动电压

【烧写注意】

631 LVD 烧写 最低档 155V
636 LVD 烧写 最低档 190V

【Uboot】

631 配置 ini 用户设置 最低档 155V
636 配置 ini 用户设置 最低档 190V

lvd离散型比较大,启动电压会不太准,偏差会有+-250mV

Makefile - linker error

我下载了0.5.0的源码,试着去编译一下 - Makefile 方式,得到了这个错误提示,请问一下这是什么原因?

+ CC D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/apps/common/usb/device/task_pc.c
+ CC D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/apps/spp_and_le/board/br30/board_ac637n_demo.c
+ CC D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/apps/spp_and_le/board/br30/board_ac6373b_demo.c
+ CC D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/apps/spp_and_le/board/br30/board_ac6376f_demo.c
+ CC D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/apps/spp_and_le/board/br30/board_ac6379b_demo.c
C:\JL\pi32\bin\pi32v2-ld.exe: cannot open linker script file D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/cpu/br30/sdk.ld: Invalid argument
D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/rule.mk:16: recipe for target 'out' failed
make[1]: *** [out] Error 1
make[1]: Leaving directory 'D:/lang/fw-AC63_BT_SDK-ac63_bt_sdk_release_v0.5.0/apps'
Makefile:80: recipe for target 'all' failed
make: *** [all] Error 1

关于AC635N的sniff

芯片仅开了ble,在sniff时唤醒后处理完,多长时间会重新进入sniff,这个时间可调整么,修改哪个参数调整

关于烧写器芯片版本匹配

说明:烧写器新增芯片版本匹配功能,对应ini 文件制定芯片版本,匹配才能进行烧写;
目的:防止错误的程序烧录到不对应的芯片版本,程序必须与芯片版本对应。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.