[Touch CDMA Android Development] kallt_kaffe:
static struct keymap keys_normal[]={
{KAISER_GPIO_KEY_LEFT,0,KEY_LEFT,1, KEY_LEFT},
{KAISER_GPIO_KEY_RIGHT,0,KEY_RIGHT,1, KEY_RIGHT},
{KAISER_GPIO_KEY_UP,0,KEY_UP,1, KEY_UP},
{KAISER_GPIO_KEY_DOWN,0,KEY_DOWN,1, KEY_DOWN},

{KAISER_GPIO_KBD_LEFT,0,KEY_DOWN,1, KEY_SEMICOLON}, //have to be flipped so they work correctly - believe me.
{KAISER_GPIO_KBD_RIGHT,0,KEY_UP,1, KEY_APOSTROPHE},
{KAISER_GPIO_KBD_UP,0,KEY_LEFT,1, KEY_PAGEUP},
{KAISER_GPIO_KBD_DOWN,0,KEY_RIGHT,1, KEY_PAGEDOWN},
{KAISER_GPIO_KEY_CENTRE,0,KEY_ANDROID_OK,1, KEY_ANDROID_OK},
};

static struct matrix_buttons matrix_buttons_normal[MAX_ROW][MAX_COL] = {
//0
{
{KEY_LEFTCTRL, KEY_SEMICOLON, SHIFT_BIT, "Menu/:"}, //<- I repleace this key with ctrl
{KEY_BACK, KEY_WLAN, FALSE, "OK/WLAN"},
{KEY_TAB, KEY_TAB, FALSE, "TAB"},
{KEY_V, KEY_8, SHIFT_BIT, "V/*"},
{KEY_SPACE, KEY_COMMA, FALSE, "SPACE/,"},
{KEY_DOT, KEY_0, FALSE, "DOT/0"},
{KEY_ENTER, KEY_ENTER, FALSE, "ENTER"}
},
//1
{
{KEY_MAX, KEY_MAX, FALSE, "none"},
{KEY_MAX, KEY_MAX, FALSE, "none"},
{KEY_MAX, KEY_MAX, FALSE, "none"},
{KEY_MENU, KEY_MENU, FALSE, "Pad Menu"},
{KEY_END, KEY_END, FALSE, "End"}, //red
{KEY_BACK, KEY_BACK, FALSE, "Pad OK"},//we don't have Back or C key ,so I remaped OK
{KEY_SEND, KEY_SEND, FALSE, "Send"} //call
},
//2
{
{KEY_FN, KEY_FN, FALSE, "Fn"},
{KEY_X, KEY_7, SHIFT_BIT, "X/&"},
{KEY_C, KEY_MINUS, FALSE, "C/-"},
{KEY_G, KEY_EQUAL, SHIFT_BIT, "G/+"},
{KEY_B, KEY_7, FALSE, "B/7"},
{KEY_M, KEY_9, FALSE, "M/9"},
{KEY_BACKSPACE, KEY_DELETE, FALSE, "Back./Del"}
},
//3
{
{KEY_RIGHTSHIFT, KEY_RIGHTSHIFT, FALSE, "Shift"},
{KEY_Z, KEY_APOSTROPHE, FALSE, "Z/'"},
{KEY_F, KEY_SLASH, FALSE, "F//"},
{KEY_Y, KEY_1, FALSE, "Y/1"},
{KEY_H, KEY_4, FALSE, "H/4"},
{KEY_N, KEY_8, FALSE, "N/8"},
{KEY_L, KEY_BACKSLASH, SHIFT_BIT, "L/|"}
},
//4
{
{KEY_A, KEY_MINUS, SHIFT_BIT, "A/_"},
{KEY_S, KEY_1, SHIFT_BIT, "S/!"},
{KEY_D, KEY_BACKSLASH, FALSE, "D/\\"},
{KEY_T, KEY_EQUAL, FALSE, "T/="},
{KEY_J, KEY_5, FALSE, "J/5"},
{KEY_K, KEY_6, FALSE, "K/6"},
{KEY_P, KEY_2, SHIFT_BIT, "P/@"}
},
//5
{
{KEY_Q, KEY_SLASH, SHIFT_BIT, "Q/?"},
{KEY_W, KEY_3, SHIFT_BIT, "W/#"},
{KEY_E, KEY_9, SHIFT_BIT, "E/("},
{KEY_R, KEY_0, SHIFT_BIT, "R/)"},
{KEY_U, KEY_2, FALSE, "U/2"},
{KEY_I, KEY_3, FALSE, "I/3"},
{KEY_O, KEY_APOSTROPHE, SHIFT_BIT, "0/\""}
},
//6
{
{KEY_MAX, KEY_MAX, FALSE, "61"},
{KEY_MAX, KEY_MAX, FALSE, "62"},
{KEY_MAX, KEY_MAX, FALSE, "63"},
{KEY_LEFTBRACE, KEY_F1, FALSE, "Kbd LeftSoft"},
{KEY_MAX, KEY_MAX, FALSE, "65"},
{KEY_RIGHTBRACE, KEY_F6, FALSE, "Kbd RightSoft"},
{KEY_MAX, KEY_MAX, FALSE, "67"}
},
//7
{
{KEY_BACK, KEY_SEMICOLON, FALSE, "Left side OK"},
{KEY_MAX, KEY_MAX, FALSE, "72"},
{KEY_TAB, KEY_F7, FALSE, "VoiceMemo"},
{KEY_HOME, KEY_HOME, FALSE, "Pad IE"},
{KEY_VOLUMEUP, KEY_RIGHT, FALSE, "Pad RightSoft"},
{KEY_MAIL, KEY_MAIL, FALSE, "Pad Mail"},
{KEY_VOLUMEDOWN, KEY_LEFT, FALSE, "Pad LeftSoft"}
},
};

I've just modified the normal layout so you will have to change _normal to _nordic and then add some code to make it selectable with a parameter. I could propably do that myself given enough time but I guess what will take to 5 or 10 minutes will take half the day or more for me.

I've found a picture of the azerty layout on the internet so I may have a go at it so make sure the new parameter is generic enough so more layouts can be added.

btw, great work! And I don't feel comfortable enough with git to be allowed to push changes just yet... It was scary enough when I reverted the bluetooth changes and I wasn't sure if it did it locally just for me or if it would affect the real thing. I'm still learning.

Next thing will be to try to make my own NBH's. I'd hate to have to wait for others to do it when the kernel is updated. I'm currently HARET booting though as I want to be able to use the GPS (I'm a geocacher). GPS on Kaiser Android isn't stable. In Myn Warm Donut and Polymod it usually freeze the whole phone. Sometimes almost as soon as it is being accessed by some GPS software and sometimes after being used successfully for some time. With mssmison's Eclair V7 (which I currently use) it doesn't seem to freeze completely. It gets really, really slow but it usually responds to the long powerbutton press so that I can turn it off the normal way. I wish I knew enough of the inner workings of this to be able to help but I don't.