查看Hacking the Wowwee Rovio的源代码
←
Hacking the Wowwee Rovio
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== Undocumented Rovio API == === debug.cgi === detailed information is located in 'Host/LibCamera/Src/LibIPCamera.c' <pre> http://YOUR_ROVIO_IP/debug.cgi?action=DEBUG_CMD[¶m1=value[¶m2=value[...]]] </pre> DEBUG_CMD: * net * print * pppip * dppp * ppp * rtsp * channel * upnp * malloc * checkip * ddns * line * uart (MCU debug) * mcu * break * ps (wlan ps mode) * cfg (set wlan sleep cfg 5) * gpiob19 (set gpiob for mcu) * mall (return mall info, including arena, ordblks, smblks, hblks, hblkhd, usmblks, fsmblks ... maxfree) * write_mp4 [bitrate] * read_flash [address, size] * read_mem [address, size] * write_mem [address, size, value] * write_register [address, value, size] * set_oe [out, dir, size] * set_dat [out, dat, size] * get_oe [address, value, size] * read_i2c [address] * write_i2c [address, value] <br><br> === mcu === 此为控制 mcu 的 cgi 接口 这个 mcu 是指驱动板上的牛屎块 MCU,其用于负责三个轮子的方向和里程计数、head 的高中低角度、head 上的 LED 灯控制、IR radar 电源和状态、电池电量检测、电源控制(电量低则切断电源),可见 Rovio 的核心控制都在这 主控 SoC 通过串口 /dev/ser1 和其通讯,其相关代码位于 Host/LibCamera/Src/MCU.c GPIOB19 作为外部中断,用于唤醒 MCU。欲唤醒时,软件模拟一个中断脉冲即可: <source lang=cpp> void mcuWakeup() { /* Set GPIO for MCU */ mcuLock(); outpw(REG_GPIOB_OE,inpw(REG_GPIOB_OE) & ~MCU_GPIO); //GPIOB19 output; outpw(REG_GPIOB_DAT,inpw(REG_GPIOB_DAT) & ~MCU_GPIO); //GPIOB19 low tt_msleep(100); outpw(REG_GPIOB_DAT,inpw(REG_GPIOB_DAT) | MCU_GPIO); //GPIOB19 high tt_msleep(100); mcuUnlock(); } </source> '''命令语法:''' <pre> http://YOUR_ROVIO_IP/mcu?parameters=CMD_ID </pre> <b>CMD_ID</b> 是一串 16 进制数字,只能有 36 个,否则会报 'responses = error_length' 貌似 CMD_ID 的 28 个前缀始终为:114d 4d00 0100 5348 5254 0001 0001 ==== Get Battery state ==== <pre> http://YOUR_ROVIO_IP/mcu?parameters=114d4d0001FF53485254000100010b000000 </pre> 上述命令结果返回 responses = 0E0100000000000000000003CB744A 最后的 74 和 4A 分别为电池的电量(<100 turn itself off; 100 ~ 106 try to go back home; 106 ~ 127 normal)和充电状态(0~79 not charging; 80 charging) ==== Rovio 顶灯控制 ==== 以下命令仅适用于 Rovio 离开充电底座的情形 <pre> http://YOUR_ROVIO_IP/mcu?parameters=114D4D00010053485254000100011A000000 # turn off all lights http://YOUR_ROVIO_IP/mcu?parameters=114D4D00010053485254000100011AFF0000 # turn on all lights </pre> 命令字 114D4D00010053485254000100011A<b>XY</b>0000 中的 XY 是个 16 进制值,其与各 LED 的对应关系为: LED6 LED5 | LED4 LED3 LED2 LED1 LED 编号如下所示: [[文件:Rovio-led.jpg]] 则 3F 就可将所有 LED 打开;0F 则 打开 LED4 ~ LED1;12 则打开 LED5 和 LED2 <source lang=bash> #!/bin/sh # LED1 0x01 # LED2 0x02 # LED3 0x04 # LED4 0x08 # LED5 0x10 # LED6 0x20 for ((c=1; c<5; c++)) do curl -u username:password -d "parameters=114D4D00010053485254000100011A000000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011AFF0000" http://192.168.1.254/mcu done for ((c=1; c<5; c++)) do curl -u username:password -d "parameters=114D4D00010053485254000100011A010000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011A020000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011A040000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011A080000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011A100000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011A200000" http://192.168.1.254/mcu done for ((c=1; c<5; c++)) do curl -u username:password -d "parameters=114D4D00010053485254000100011A000000" http://192.168.1.254/mcu curl -u username:password -d "parameters=114D4D00010053485254000100011AFF0000" http://192.168.1.254/mcu done sleep 1; curl -u username:password -d "parameters=114D4D00010053485254000100011A3F0000" http://192.168.1.254/mcu </source> === Rovio 车轮精确控制 === 虽然 API 提供有 Motion Control,但无法精确控制,这个还得直接来操作 MCU libNS.a 分析得知: send_wheel_speed_cmd 用的命令字是: 1b xx xx xx 后面的三个字段分别代表 右轮、左轮、后轮 00 ~ 7F 为正转;80 ~ FF 为反转。如:1b818100 为后退,1b010100 为前进 send_wheel_pwm_cmd,用的命令字是: 17 xx xx xx 后面的三个字段分别代表 右轮、左轮、后轮 xx 取值 09 ~ 28 轮子才有明显的前进移动。后退移动则 xx 取值应在 88 ~ a8 <br><br>
返回到
Hacking the Wowwee Rovio
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面