N900模拟快捷键,加强版

 

可以模拟N900键盘上所有按键,随意组合。
按键列表:
ctrl      
backspace  退格(删除)
shift 
fn (蓝色箭头)
space 空格
enter 回车
comma 逗号
period 句号
up 上
down 下
left 左
right 右
a-z
 
使用方法:
1.拷贝virtkey到某个目录,如 /home/user/apps/,不要放在Mydocs目录下,然后以root身份设置执行权限 chmod +x /home/user/apps/virtkey。
2.要模拟的按键通过程序参数传入,例如要使用ctrl+v粘贴功能,命令为/home/user/apps/virtkey ctrl+v  "paste",ctrl+v为要模拟的快捷键,按键名称用+连起来,"paste"为提示信息,可以不带这个参数,则没有提示信息。
 
下载 virtkey

Posted by jie.lee 2011年5月01日 23:36


模拟快捷键的程序源码

这个程序只在N900上使用过,发送Ctrl+Shift+Fn+L快捷键,其它平台没试,不保证能用。

源程序: rotation.c

编译命令:gcc key.c -o key -Wall  -lX11 -lXtst

需要安装libx11t-dev libxt-dev libxtst-dev libxi-dev这几个库。

Posted by jie.lee 2011年4月20日 08:51


N900增加快捷键,强制切换窗口横竖屏显示

N900更新到社区版本之后可以竖屏显示,根据重力传感器来切换,不过非常不好用,至少我的手机是这样,经常切来切去,让人很崩溃。

其实目前系统版本下有一个快捷键Ctrl+Shift+Fn+L可以强制切换横竖屏的,关了重力传感器的情况下不会回到横屏,不过只对当前窗口有效,窗口有改变就恢复到横屏了。虽说这个快捷键也实在是太坑爹,但在有的时候还是挺有用的。例如在坐公交的时候,打开Opera,切到竖屏,就可以方便的单手操作了。另外这个快捷键还可以将桌面竖屏,不过图标排列有问题。

这个快捷键实在是不好按,于是我编了一个程序,只有一个功能,就是发出Ctrl+Shift+Fn+L,然后让这个程序通过shortcutd调用,设置成长按拍照键执行,这样就很方便了。

设置方法如下:

1.安装shortcutd,并下载这个文件 rotate

2.拷贝rotate到某个目录,如 /home/user/apps/,并且以root身份设置执行权限 chmod +x /home/user/apps/rotate

3.在控制面板打开shortcutd,设置某一个功能为Custom shell command,然后在command里面填上程序的执行路径/home/user/apps/rotate,确定就可以了。

Posted by jie.lee 2011年4月19日 08:40


douban FM for N900

运行截图:

screenshot-doubanFM

基于Python和PyQt4,需要安装运行环境。目前运行还不稳定,有问题请在这里留言。

doubanFM-0.01.zip (4.18日更新)

安装方法:

1.打开终端,cd到解压文件目录

2.使用root权限 sudo gainroot

3.拷贝,添加快捷方式:

cp -r -f  doubanFM  /home/user/apps
cp -f doubanFM.desktop  /usr/share/applications/hildon/
cp -f doubanFM.service  /usr/share/dbus-1/services/
cp -f doubanFM.png  /usr/share/icons/hicolor/scalable/hildon/
chmod +x /home/user/apps/doubanFM/*

卸载删除上面相关文件即可。

 

Posted by jie.lee 2011年4月15日 09:38


wxWidgets实现文件拖放

《使用wxwidgets进行跨平台的c++开发》第11章有介绍,参考例程在samples/dnd。其实很简单,只需几步:

#include <wx/dnd.h>
class DnDialogFile : public wxFileDropTarget
{
public:
    DnDialogFile(YourDialog *pOwner) { m_pOwner = pOwner; }

    virtual bool OnDropFiles(wxCoord x, wxCoord y,
                             const wxArrayString& filenames);
private:
    //对话框类,成员TextCtrlPath保存文件路径
    YourDialog *m_pOwner;

};

bool DnDialogFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)
{
    //设置文本框内容
    m_pOwner->TextCtrlPath->SetValue(filenames[0]);
    return true;
}

在对话框初始化时调用this->SetDropTarget(new DnDialogFile(this))。

Posted by jie.lee 2010年10月10日 00:15


IAR引入一个二进制文件到数组中

IAR如何引入一个二进制文件到数组中,类似汇编的INCBIN伪指令。

找到方法如下:

Project Options->Linker->Input->Raw binary image 中选文件,填数组名,段,对齐,如xx,readonly,1。

还要在Keep symbols中填上对应的数组名。

Posted by jie.lee 2010年8月31日 22:06


编译器中的weak属性

多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误,这样可以在其中的一个符号前加上weak属性,将其定义为弱符号,就不再与另外的全局符号冲突。

不同编译器的定义方式:
/// Weak attribute
#if defined   ( __CC_ARM   )
    #define WEAK __attribute__ ((weak))
#elif defined ( __ICCARM__ )
    #define WEAK __weak
#elif defined (  __GNUC__  )
    #define WEAK __attribute__ ((weak))
#endif

 参考资料:
1、http://infocenter.arm.com/help/index.jsp?topic= /com.arm.doc.dui0348bc/Cacdgifc.html
2、http://www.cnblogs.com/kernel_hcy/archive/2010/01/27/1657411.html

 

 

Posted by jie.lee 2010年6月22日 00:42


wxWidgets获取系统串口号

windows系统下获取存在的串口号,主要是读注册表相关键值。

void xxx::GetSerialPort()
{
    wxRegKey *m_pKey = new wxRegKey(_T("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM"));
    wxString strTemp;

    long l;
    bool bCont;
    wxString str;
    wxString strValue;
    Choice_com->Clear();

    bCont = m_pKey->GetFirstValue(str, l);
    while ( bCont )
    {
        m_pKey->QueryValue(str, strValue);
        Choice_com->Append(strValue);
        bCont = m_pKey->GetNextValue(str, l);
    }
    Choice_com->SetSelection(0);
    delete m_pKey;
}

 

Posted by jie.lee 2010年6月05日 01:17


Altium Designer错误

用Altium Designer画pcb,加载网络表之后许多元件都是绿色的,也不是间距的原因。实在没办法了,就把所有规则去掉,然后一个一个的添加,最后找到是SilkscreenOverComponentPads规则的原因。

“SilkscreenOverComponentPads”(丝印掠过焊盘),这个规则一般没有用,去掉了也没有关系。


Posted by jie.lee 2010年5月29日 01:06


USB复合设备的实现

USB复合设备一般用Interface Association Descriptor(IAD)实现,就是在要合并的接口前加上IAD描述符。

IAD描述符:

typedef struct _USBInterfaceAssociationDescriptor {
    BYTE  bLength:                  0x08        //描述符大小
    BYTE  bDescriptorType:          0x0B        //IAD描述符类型
    BYTE  bFirstInterface:          0x00        //起始接口
    BYTE  bInterfaceCount:          0x02        //接口数
    BYTE  bFunctionClass:           0x0E        //类型代码
    BYTE  bFunctionSubClass:        0x03        //子类型代码
    BYTE  bFunctionProtocol:        0x00        //协议代码
    BYTE  iFunction:                0x04        //描述字符串索引
}

参考资料  http://www.microsoft.com/whdc/archive/IAD.mspx

这里有我发布的stm32虚拟双串口的例子http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4028048 下载

Posted by jie.lee 2010年5月12日 02:00