<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.jackslab.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B</id>
		<title>Wowwee Rovio 核心库 libNS 逆向工程 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B"/>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B&amp;action=history"/>
		<updated>2026-05-18T07:37:14Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B&amp;diff=2337&amp;oldid=prev</id>
		<title>2014年5月24日 (六) 10:38 Comcat</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B&amp;diff=2337&amp;oldid=prev"/>
				<updated>2014-05-24T10:38:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.jackslab.org/index.php?title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B&amp;amp;diff=2337&amp;amp;oldid=2334&quot;&gt;显示差异&lt;/a&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B&amp;diff=2334&amp;oldid=prev</id>
		<title>Comcat：以“== Undocumented Rovio API ==  === debug.cgi ===  detailed information is located in 'Host/LibCamera/Src/LibIPCamera.c'  &lt;pre&gt;   http://YOUR_ROVIO_IP/debug.cgi?action...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Wowwee_Rovio_%E6%A0%B8%E5%BF%83%E5%BA%93_libNS_%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B&amp;diff=2334&amp;oldid=prev"/>
				<updated>2014-05-24T10:36:33Z</updated>
		
		<summary type="html">&lt;p&gt;以“== Undocumented Rovio API ==  === debug.cgi ===  detailed information is located in &amp;#039;Host/LibCamera/Src/LibIPCamera.c&amp;#039;  &amp;lt;pre&amp;gt;   http://YOUR_ROVIO_IP/debug.cgi?action...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Undocumented Rovio API ==&lt;br /&gt;
&lt;br /&gt;
=== debug.cgi ===&lt;br /&gt;
&lt;br /&gt;
detailed information is located in 'Host/LibCamera/Src/LibIPCamera.c'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  http://YOUR_ROVIO_IP/debug.cgi?action=DEBUG_CMD[&amp;amp;param1=value[&amp;amp;param2=value[...]]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEBUG_CMD:&lt;br /&gt;
&lt;br /&gt;
* net&lt;br /&gt;
* print&lt;br /&gt;
* pppip&lt;br /&gt;
* dppp&lt;br /&gt;
* ppp&lt;br /&gt;
* rtsp&lt;br /&gt;
* channel&lt;br /&gt;
* upnp&lt;br /&gt;
* malloc&lt;br /&gt;
* checkip&lt;br /&gt;
* ddns&lt;br /&gt;
* line&lt;br /&gt;
* uart (MCU debug)&lt;br /&gt;
* mcu&lt;br /&gt;
* break&lt;br /&gt;
* ps (wlan ps mode)&lt;br /&gt;
* cfg (set wlan sleep cfg 5)&lt;br /&gt;
* gpiob19 (set gpiob for mcu)&lt;br /&gt;
* mall (return mall info, including arena, ordblks, smblks, hblks, hblkhd, usmblks, fsmblks ... maxfree)&lt;br /&gt;
* write_mp4 [bitrate]&lt;br /&gt;
* read_flash [address, size]&lt;br /&gt;
* read_mem [address, size]&lt;br /&gt;
* write_mem [address, size, value]&lt;br /&gt;
* write_register [address, value, size]&lt;br /&gt;
* set_oe [out, dir, size]&lt;br /&gt;
* set_dat [out, dat, size]&lt;br /&gt;
* get_oe [address, value, size]&lt;br /&gt;
* read_i2c [address]&lt;br /&gt;
* write_i2c [address, value]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mcu ===&lt;br /&gt;
&lt;br /&gt;
此为控制 mcu 的 cgi 接口&lt;br /&gt;
&lt;br /&gt;
这个 mcu 是指驱动板上的牛屎块 MCU，其用于负责三个轮子的方向和里程计数、head 的高中低角度、head 上的 LED 灯控制、IR radar 电源和状态、电池电量检测、电源控制（电量低则切断电源），可见 Rovio 的核心控制都在这&lt;br /&gt;
&lt;br /&gt;
主控 SoC 通过串口 /dev/ser1 和其通讯，其相关代码位于 Host/LibCamera/Src/MCU.c&lt;br /&gt;
&lt;br /&gt;
GPIOB19 作为外部中断，用于唤醒 MCU。欲唤醒时，软件模拟一个中断脉冲即可：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
void mcuWakeup()&lt;br /&gt;
{&lt;br /&gt;
    /* Set GPIO for MCU */&lt;br /&gt;
    mcuLock();&lt;br /&gt;
    outpw(REG_GPIOB_OE,inpw(REG_GPIOB_OE) &amp;amp; ~MCU_GPIO);  	//GPIOB19 output;&lt;br /&gt;
    outpw(REG_GPIOB_DAT,inpw(REG_GPIOB_DAT) &amp;amp; ~MCU_GPIO);	//GPIOB19 low&lt;br /&gt;
    tt_msleep(100);&lt;br /&gt;
    outpw(REG_GPIOB_DAT,inpw(REG_GPIOB_DAT) | MCU_GPIO);	//GPIOB19 high&lt;br /&gt;
    tt_msleep(100);&lt;br /&gt;
    mcuUnlock();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''命令语法：'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://YOUR_ROVIO_IP/mcu?parameters=CMD_ID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;CMD_ID&amp;lt;/b&amp;gt; 是一串 16 进制数字，只能有 36 个，否则会报 'responses = error_length'&lt;br /&gt;
&lt;br /&gt;
貌似 CMD_ID 的 28 个前缀始终为：114d 4d00 0100 5348 5254 0001 0001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Get Battery state ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://YOUR_ROVIO_IP/mcu?parameters=114d4d0001FF53485254000100010b000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上述命令结果返回 responses = 0E0100000000000000000003CB744A&lt;br /&gt;
&lt;br /&gt;
最后的 74 和 4A 分别为电池的电量（&amp;lt;100 turn itself off; 100 ~ 106 try to go back home; 106 ~ 127 normal）和充电状态（0~79 not charging; 80 charging）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rovio 顶灯控制 ====&lt;br /&gt;
&lt;br /&gt;
以下命令仅适用于 Rovio 离开充电底座的情形&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://YOUR_ROVIO_IP/mcu?parameters=114D4D00010053485254000100011A000000    # turn off all lights&lt;br /&gt;
http://YOUR_ROVIO_IP/mcu?parameters=114D4D00010053485254000100011AFF0000    # turn on all lights&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
命令字 114D4D00010053485254000100011A&amp;lt;b&amp;gt;XY&amp;lt;/b&amp;gt;0000 中的 XY 是个 16 进制值，其与各 LED 的对应关系为：&lt;br /&gt;
&lt;br /&gt;
  LED6 LED5 | LED4 LED3 LED2 LED1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LED 编号如下所示：&lt;br /&gt;
&lt;br /&gt;
[[文件:Rovio-led.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
则 3F 就可将所有 LED 打开；0F 则 打开 LED4 ~ LED1；12 则打开 LED5 和 LED2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# LED1 0x01&lt;br /&gt;
# LED2 0x02&lt;br /&gt;
# LED3 0x04&lt;br /&gt;
# LED4 0x08&lt;br /&gt;
# LED5 0x10&lt;br /&gt;
# LED6 0x20&lt;br /&gt;
&lt;br /&gt;
for ((c=1; c&amp;lt;5; c++))&lt;br /&gt;
do&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A000000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011AFF0000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for ((c=1; c&amp;lt;5; c++))&lt;br /&gt;
do&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A010000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A020000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A040000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A080000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A100000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A200000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
for ((c=1; c&amp;lt;5; c++))&lt;br /&gt;
do&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A000000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011AFF0000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
sleep 1;&lt;br /&gt;
curl -u username:password -d &amp;quot;parameters=114D4D00010053485254000100011A3F0000&amp;quot; http://192.168.1.254/mcu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rovio 车轮精确控制 ===&lt;br /&gt;
&lt;br /&gt;
虽然 API 提供有 Motion Control，但无法精确控制，这个还得直接来操作 MCU&lt;br /&gt;
&lt;br /&gt;
libNS.a 分析得知：&lt;br /&gt;
&lt;br /&gt;
send_wheel_speed_cmd 用的命令字是：&lt;br /&gt;
&lt;br /&gt;
1b xx xx xx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
后面的三个字段分别代表 右轮、左轮、后轮&lt;br /&gt;
&lt;br /&gt;
00 ~ 7F 为正转；80 ~ FF 为反转。如：1b818100 为后退，1b010100 为前进&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
send_wheel_pwm_cmd，用的命令字是：&lt;br /&gt;
&lt;br /&gt;
17 xx xx xx&lt;br /&gt;
&lt;br /&gt;
后面的三个字段分别代表 右轮、左轮、后轮&lt;br /&gt;
&lt;br /&gt;
xx 取值 09 ~ 28 轮子才有明显的前进移动。后退移动则 xx 取值应在 88 ~ a8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Key Control Rovio API ==&lt;br /&gt;
&lt;br /&gt;
=== Movement Control ===&lt;br /&gt;
&lt;br /&gt;
语法：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://YOUR_ROVIO_IP/rev.cgi?Cmd=nav&amp;amp;action=value&amp;amp;drive=d_value&amp;amp;speed=s_value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
value = 18&lt;br /&gt;
&lt;br /&gt;
d_value = 0 (Stop)&lt;br /&gt;
  1 (Forward)&lt;br /&gt;
  2 (Backward)&lt;br /&gt;
  3 (Straight left)&lt;br /&gt;
  4 (Straight right)&lt;br /&gt;
  5 (Rotate left by speed)&lt;br /&gt;
  6 (Rotate right by speed)&lt;br /&gt;
  7 (Diagonal forward left)&lt;br /&gt;
  8 (Diagonal forward right)&lt;br /&gt;
  9 (Diagonal backward left)&lt;br /&gt;
  10 (Diagonal backward right)&lt;br /&gt;
  11 (Head up)&lt;br /&gt;
  12 (Head down)&lt;br /&gt;
  13 (Head middle)&lt;br /&gt;
  14 (Reserved)&lt;br /&gt;
  15 (Reserved)&lt;br /&gt;
  16 (Reserved)&lt;br /&gt;
  17 (Rotate left by 20 degree angle increments)&lt;br /&gt;
  18 (Rotate right by 20 degree angle increments)&lt;br /&gt;
&lt;br /&gt;
s_value = 1 (fastest) – 10 (slowest)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
简单的，如下的命令实现持续前进：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
  for ((i=0; i&amp;lt;18; i++));&lt;br /&gt;
    do curl -u username:password -d &amp;quot;Cmd=nav&amp;amp;action=18&amp;amp;drive=1&amp;amp;speed=1&amp;quot; http://YOUR_ROVIO_IP/rev.cgi;&lt;br /&gt;
  done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 摄像头抬头控制 ====&lt;br /&gt;
&lt;br /&gt;
一般的，摄像头抬头有三个位置：低、中、高&lt;br /&gt;
&lt;br /&gt;
其对应的命令为：&lt;br /&gt;
&lt;br /&gt;
  /rev.cgi?Cmd=nav&amp;amp;action=18&amp;amp;drive=12&lt;br /&gt;
  /rev.cgi?Cmd=nav&amp;amp;action=18&amp;amp;drive=13&lt;br /&gt;
  /rev.cgi?Cmd=nav&amp;amp;action=18&amp;amp;drive=11&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
更精确地，通过连续执行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  http://YOUR_ROVIO_IP/rev.cgi?Cmd=nav&amp;amp;action=18&amp;amp;drive=11&amp;amp;speed=1&lt;br /&gt;
  http://YOUR_ROVIO_IP/rev.cgi?Cmd=nav&amp;amp;action=18&amp;amp;drive=0&amp;amp;speed=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可将摄像头抬高的过程改为 4 个点，视角要比原高、中、低三个点的要好，可用如下命令行实现之：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
curl -u username:password -d &amp;quot;Cmd=nav&amp;amp;action=18&amp;amp;drive=11&amp;amp;speed=1&amp;quot; http://YOUR_ROVIO_IP/rev.cgi &amp;amp;&amp;amp;        \&lt;br /&gt;
curl -u username:password -d &amp;quot;Cmd=nav&amp;amp;action=18&amp;amp;drive=0&amp;amp;speed=1&amp;quot; http://YOUR_ROVIO_IP/rev.cgi &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Rovio 回家 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
curl -u username:password -d &amp;quot;Cmd=nav&amp;amp;action=13&amp;quot; http://YOUR_ROVIO_IP/rev.cgi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 获取当前图像 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;改变图像分辨率&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  /ChangeResolution.cgi?ResType=value&lt;br /&gt;
&lt;br /&gt;
value 取 0 (176x144), 1 (352x288), 2 (320x240), 3 (640x480)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
curl -u username:password -d &amp;quot;ResType=3&amp;quot; http://YOUR_ROVIO_IP/ChangeResolution.cgi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;改变图像压缩质量&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  /ChangeCompressRatio.cgi?Ratio=value&lt;br /&gt;
&lt;br /&gt;
value 取 0（低质量）, 1（中等质量）, 2（高质量)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;如下直接获取实时高质量图像：&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  /Jpeg/CamImg.jpg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
curl -u username:password -d &amp;quot;ResType=3&amp;quot; http://YOUR_ROVIO_IP/ChangeResolution.cgi&lt;br /&gt;
curl -u username:password -d &amp;quot;Ratio=2&amp;quot; http://YOUR_ROVIO_IP/ChangeCompressRatio.cgi&lt;br /&gt;
curl -u username:password http://YOUR_ROVIO_IP/Jpeg/CamImg.jpg &amp;gt; realtime-img.jpg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	</feed>