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:

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.


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 }