Here is (again) the function I wrote to execute serial commands:

int DoSerialCmd(const char* szCmd)
{ FILE *fs_EmpegNotify=NULL;
fs_EmpegNotify = fopen("/proc/empeg_notify", "a");

if(NULL==fs_EmpegNotify)
{ DEBUGF("could not open empeg_notify to receive serial commands");
return 0;
}

fprintf(fs_EmpegNotify,"SERIAL=%s\n",szCmd);
fclose(fs_EmpegNotify);

return 1;
}

When I call DoSerialCmd("-");, the volume goes down
When I call DoSerialCmd("F");, fast forward begins,

So calling DoSerialCmd works for most things, including replacing, enqueuing, Fids, etc.

However DoSerialCmd("button=volup"); does not raise the volume, instead it returns to the start of the currently playing tune. Sometimes it switches visuals. Does weird things, but never raise the volume.

DoSerialCmd("%2B"); does raise the volume, so my particular problem is solved. At this point, the issue as to why this doesn't work is more of a curiosity for me. Do you see the flaw in the function above?