Wednesday, January 29, 2014

OSX UART serial terminal




In OSX, turn on the terminal, plug in your FTDI USB-serial dongle, you should see a new usbserial device created under /dev.  Use "screen" to start the session, remember to state the baudrate at the end of the command:
$ screen /dev/cu.usbserial-FTVLVQ6M 115200
To detach:
Ctrl-a d
To re-attach:
$ screen -r
To kill the screen:
Ctrl-a k

Tuesday, September 17, 2013

difference between insmod and modprobe

Time to refresh memory:

modprobe reads the modules and its dependencies from /lib/modules/$(uname -r)/modules.dep or modules.dep.bin.  modprobe is a smarter tool which will also load the dependent modules.

modprobe accepts the name of a .ko file in /lib/modules/$(uname -r) and aliases (modules.alias.bin).

insmod takes file name or the exact paths to files. The module does not have to reside in /lib/modules/$(uname -r), but dependencies are not automatically loaded. This is the lower program used by modprobe to load modules.

rmmod removes a kernel name based on the name from /proc/modules. This name does not necessarily have to be the same as the one passed to modprobe (for the nvidia-current file, this is nvidia for example).

modinfo accepts a filename, or the filename without .ko suffix in /lib/modules/$(uname -r).

Monday, August 19, 2013

guake - a cool top down terminal for Gnome

http://guake.org/

It's just cool....
try it:
# sudo aptitude install guake

Sunday, August 18, 2013

nohup - run a command immune to hangups (terminal close)

Say you're on business trip, ssh to a remote server, run a command to compile some huge source code which take hours, or process date which takes days, but then you need to close your laptop and run the next site.  Closing the terminal will also kill all the process you started.  What should you do?

nohup is is there to help you.:
NAME
       nohup - run a command immune to hangups, with output to a non-tty

SYNOPSIS
       nohup COMMAND [ARG]...
       nohup OPTION

DESCRIPTION
       Run COMMAND, ignoring hangup signals.

Take an example of compiling a fresh configured buildroot, depends on the packages selected it takes hours/days to download the sources and compile:
EXAMPLE
       $ nohup make buildroot &

Then the buildroot compilation will continue after you close your terminal/laptop.

Saturday, August 17, 2013

Audacious Headless and Keyboard Shortucts

Audacious is an open source audio player, a descendant of XMMS, light-weighted and very similar to MS Windows winamp.

However, by default it does not recognize keyboard shortcuts play/pause/prev/next.

In Audacious preferences (right click on the the right lower corner "a" logo, in the pop-up menu choose preference), -->plugins  --> general tab --> check the "Global Hotkey" plugin, then it would recognize those shortcut keys.  I would prefer Audacious to enable this by default..

Saturday, July 13, 2013

Gaming mouse too fast (sensitive) under Ubuntu Linux

I've got a set of RAPOO keyboard and mouse.  I bought it just because it's a set of really compact and quiet keyboard and mouse, but after I got it I figured it's for gaming so the speed is crazily fast when I use it under Linux.  I went to the "Mouse and Touchpad" to turn Acceleration and Sensitivity to the minimum value but it doesn't work.  Finally I've done the following to slow it down.

gideon@gideon-desktop-i5:~$ xinput --list --short
⎡ Virtual core pointer                     id=2 [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer               id=4 [slave  pointer  (2)]
⎜   ↳ RAPOO RAPOO 5G Wireless Device           id=9 [slave  pointer  (2)]
⎜   ↳ MemsArt MA144 RF Controller              id=11 [slave  pointer  (2)]
⎜   ↳ MemsArt MA144 RF Controller              id=12 [slave  pointer  (2)]
⎣ Virtual core keyboard                    id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
    ↳ Power Button                             id=6 [slave  keyboard (3)]
    ↳ Power Button                             id=7 [slave  keyboard (3)]
    ↳ RAPOO RAPOO 5G Wireless Device           id=8 [slave  keyboard (3)]
    ↳ MemsArt MA144 RF Controller              id=10 [slave  keyboard (3)]
    ↳ MemsArt MA144 RF Controller              id=13 [slave  keyboard (3)]
gideon@gideon-desktop-i5:~$ xinput --set-prop 9 "Device Accel Velocity Scaling" 1
gideon@gideon-desktop-i5:~$ xinput --set-prop 9 "Device Accel Constant Deceleration" 2

For your mouse, the last 2 commands you may need to play around with the numbers to find the optimum value.

Friday, February 08, 2013

DS89C450 SDCC getchar() function

After the putchar() function you probably need the getchar() function.  The function is also quite simple. Just check the Receive Interrupt flag instead of Transmit Interrupt in the putchar().  I'm using mode 0 for the serial port, the RI_0 is set at the end of the 8th bit. When the flag is set, clear it then read and return the data:
char getchar(void) {
        char c;
        while (!RI_0)
        ;
        RI_0 = 0;
        c = SBUF0;
        return c;
}

If you want to read a line input you can use gets():
char line[100];

gets(line);

Thursday, February 07, 2013

DS89C450 SDCC serial init and printf putchar functions

sdcc is a very handy tool but it isn't magic.  For embedded system even a "hello world" printf function isn't easy. If you just put printf in your code and ask sdcc to compile, it will complain because it doesn't know how the system connects to the serial port:
?ASlink-Warning-Undefined Global '_putchar' referenced by module 'hello'
make: *** [hello] Error 1
You get the same error for similar printf stdio.h functions (e.g. vprintf, sprintf, vsprintf, puts etc...)

The solution is easy; just define the putchar() function to describe which buffer (e.g. UART0 or UART1) the characters should go to.  Here is my example code of "Hello World" and blinking some LED on the DS89C450 evaluation kit:
#include <stdio.h>
#include "sdcc_reg420.h"

void delay(void)
{
 unsigned int i, j;

 for(j=0; j<12; j++)
 {
  for(i=0; i<3000; i++)
  {
  }
 }
}

void serialInit()
{
 TMOD = 0x21;    // Timer 1: 8-bit autoreload from TH1
 TH1 = 220;      // 14400 baud rate
 CKMOD = 0x38;   // Use system clock for timer inputs
 T2CON = 0x00;   // Serial 0 runs off timer 1 overflow
 TCON = 0x50;    // Enable timers 0 and 1
 SCON0 = 0x50;   // Enable serial port 0
 SBUF0 = ' ';
}

void putchar (char c) {
 while (!TI_0) /* assumes UART is initialized */
 ;
 TI_0 = 0;
 SBUF0 = c;
}

void main(void)
{
 serialInit(); // Initialize serial port 0

 printf("\rHello World!!\n");

 while(1)
 {
  P1 = 0x01;
  delay();
  P1 = 0x02;
  delay();
  P1 = 0x04;
  delay();
  P1 = 0x08;
  delay();
 }
}
Then it works! Download your firmware to the evKit and then you can see the "Hello World" displaying on your terminal! If nothing comes up then check if the LED are blinking. If LED are not blinking then the firmware is not running.. something is probably really wrong. I set 14400 as baudrate because the evKit uses the same baudrate for the in-system programming. I just don't want the hassles of changing the baudrate of my terminal all the time. If you need the register file sdcc_reg420.h of the above example code, you can get it in the following link:

http://www.maximintegrated.com/app-notes/index.mvp/id/3477

Only this document was written some time ago and now sdcc will warn it uses some deprecated macros. But the file still works fine and updating the keywords are trivial task.

Wednesday, February 06, 2013

git clone --mirror and update

To create a git repository mirror is fairly easy:
$ git clone --mirror ssh://user@example.com/path/to/repo
To update the mirror from the original source:
$ git remote update



ssh-add "Could not open a connection to your authentication agent"


I came accross some occurence when I use ssh-add to add a ssh key it gives me the following error:

Could not open a connection to your authentication agent.



and the following command did the trick sometimes...
$ exec ssh-agent bash
but I still have the problem when I use ssh-add under Cygwin in Windows system.... couldn't find a solution :(