N900模拟快捷键,加强版
模拟快捷键的程序源码
这个程序只在N900上使用过,发送Ctrl+Shift+Fn+L快捷键,其它平台没试,不保证能用。
源程序: rotation.c
编译命令:gcc key.c -o key -Wall -lX11 -lXtst
需要安装libx11t-dev libxt-dev libxtst-dev libxi-dev这几个库。
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,确定就可以了。
douban FM for N900
运行截图:
基于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/*
卸载删除上面相关文件即可。
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))。
IAR引入一个二进制文件到数组中
IAR如何引入一个二进制文件到数组中,类似汇编的INCBIN伪指令。
找到方法如下:
Project Options->Linker->Input->Raw binary image 中选文件,填数组名,段,对齐,如xx,readonly,1。
还要在Keep symbols中填上对应的数组名。
编译器中的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
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; }
Altium Designer错误
用Altium Designer画pcb,加载网络表之后许多元件都是绿色的,也不是间距的原因。实在没办法了,就把所有规则去掉,然后一个一个的添加,最后找到是SilkscreenOverComponentPads规则的原因。
“SilkscreenOverComponentPads”(丝印掠过焊盘),这个规则一般没有用,去掉了也没有关系。
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 下载