shield android key code problem

hi there,
when I develop on shield, I found the key code of dpad and left stick is same.
For example,
when i output the log of keyCode using the following code snippet:
public boolean onKeyDown(int keyCode, KeyEvent event)
{
Logger.LogOut( "onKeyDown " + keyCode + event);
}
I found that the key codes of dpad and left stick are exactly the same, they are:
21 KEYCODE_DPAD_LEFT
20 KEYCODE_DPAD_DOWN
22 KEYCODE_DPAD_RIGHT
19 KEYCODE_DPAD_UP

Is it designed that way?
Does it means they are the same key, if not how can we differentiate the dpad and left stick?

In addition, is the right stick can only be used as a mouse device? As,the onKeyDown() function will not be called if I shake the right stick. Can I use it as right stick? If yes, how can I do.

THX.

here is the relevent logs:
onKeyDown 21KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DPAD_LEFT, scanCode=0, metaState=0, flags=0x400, repeatCount=0, eventTime=3633502, downTime=3633502, deviceId=5, source=0x1000010 }

onKeyDown 20KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DPAD_DOWN, scanCode=0, metaState=0, flags=0x400, repeatCount=0, eventTime=3711266, downTime=3711266, deviceId=5, source=0x1000010 }

onKeyDown 22KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DPAD_RIGHT, scanCode=0, metaState=0, flags=0x400, repeatCount=0, eventTime=3734280, downTime=3734280, deviceId=5, source=0x1000010 }

onKeyDown 19KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DPAD_UP, scanCode=0, metaState=0, flags=0x400, repeatCount=0, eventTime=3749236, downTime=3749236, deviceId=5, source=0x1000010 }