Está en la página 1de 8

FG1998

AdvanceMenuModificandoasaesdosbotesdogamepad

PUBLICADOEM23deabrilde201325deabrilde2013porfg1998
NopostanteriorvocacompanhoucomopossvelusaroprprioAdvanceMenuparaduasfunesimportantesemconsolescomoPiHalt
eReboot.Poderdesligaroureiniciarseuconsolealgofundamentalemambientesquenosetemotecladofsicodisponvel,oqueexatamenteo
meucaso.Desligardatomadaseriamuitoarriscadoalmdedeselegante.

Pormaindatemosumproblemanoconsoleoadvmenuvemconguradodeformaqueoboto1dogamepadencerresuaexecuoeretorne
aobash.Seojogadordistradoapertarobotozinho(nomeucasoovermelho)dogamepadelesersumariamentecolocadoemumambientede
texto.Esemtecladonoserpossvelretornaraoadvmenunemdarumhalt,ouseja,estamosnamesmabarcafuradadeantes,snosrestando
retirarocabodeforaetorcerparanadadarerrado.

Procureiumaformadefazerissonasconguraesdoadvmenu,masconfessoquenoconsegui.Comeceiaacharqueoseventosdogamepad
estohardcodeadosnocdigonoadvmenu,equeanicaalternativaseriaumaalteradanocdigo.

Antesvamosdarumafuadanosbotesdogamepadedescobrirquemquem.Oprimeiropassoinstalarojoystickdigitando

pi@raspberrypi~$sudoaptgetinstalljoystick

Depoisvamosdarumatestadanessejoystickdigitandoocomando

pi@raspberrypi~$jstest/dev/input/js0

Serexibidaalgumasinformaesreferentesaogamepad
Driverversionis2.1.0
Joystick(USBGamepad)has2axes(X,Y)
and10buttons(Trigger,ThumbBtn,ThunbBtn2,TopBtn,TopBtn2,PinkieBTN,BaseBtn,BaseBtn2,BaseBtn3,BaseBtn4)
Axes:0:327671:0Buttons0:off1:off2:off3:off4:off5:off:6:off7:off:8:off:9:off

Brinqueumpoucocomosbotesdoseujoystick/gamepadparadescobrirquemquem.Nomeucasoaconguraocouassim
(hps://fg1998.les.wordpress.com/2013/04/gamepad_numerado1.png)

Olhlobotozinho1(overmelho)queencerraoadvmenuejogaousurionobash.Piorlugarparaestarnopoderia.colocarnamodeum
jogadoreelevaiacabarencerrandoomenuecandonoprompodobash.

Bom,vamospartirentoparaaalteraodocdigo.Baixeosfontesdoadvmenu(casovocaindanotenha).Euprerousaraverso2.5queachei
maissuavequea2.6(altimadisponvel).Baixenosourceforgeaqui
(hp://sourceforge.net/projects/advancemame/les/advancemenu/2.5.0/advancemenu2.5.0.tar.gz/download).Descompacteoarquivo.tarcomo
comandotarxvfadvancemenu2.5.0.tar.gz.Sercriadaumapastaadvancemenu2.5.0.

Oarquivoquequeremosmudartext.cceestnapastaadvancemenu2.5.0/advance/menu.Useseueditordetextospreferidoparaeditaro
arquivo(nomeucaso,opreferidocomojditoojoesowneditor)

pi@raspberrypi~/advancemenu2.5.0/advance/menu$joetext.cc

Procurepelalinhastaticvoidint_joystick_button_raw_poll()evocencontrarumtrechodecdigoondecadabotodogamepadest
associadoaumevento.Ocdigoalgoassim
staticvoidint_joystick_button_raw_poll()
{
for(inti=0;i<joystickb_count_get();++i){
for(intj=0;j<joystickb_button_count_get(i);++j){
if(joystickb_button_get(i,j)){
switch(j){
case0:
event_push(EVENT_ENTER);
break;
case1:
event_push(EVENT_ESC);
break;
case2:
event_push(EVENT_MENU);
break;
case3:
event_push(EVENT_PREVIEW);
break;
case4:
event_push(EVENT_MODE);
break;
}
}
}
}
}
}

Notequeosbotes0,1,2,3e4dojoystick/gamepadestoassociadosaeventosdoadvmenu.Dandoumafuadanocdigofonte,descobrialguns
eventosdoadvmenuquevocpodeassociarabotesdojoystick.Oseventossolistadosnoarquivomenu.h
#defineEVENT_NONE(1<<16)
#defineEVENT_UP(2<<16)
#defineEVENT_DOWN(3<<16)
#defineEVENT_LEFT(4<<16)
#defineEVENT_RIGHT(5<<16)
#defineEVENT_ENTER(6<<16)
#defineEVENT_ESC(7<<16)
#defineEVENT_SPACE(8<<16)
#defineEVENT_HOME(10<<16)
#defineEVENT_END(11<<16)
#defineEVENT_PGUP(12<<16)
#defineEVENT_PGDN(13<<16)
#defineEVENT_INS(25<<16)
#defineEVENT_DEL(26<<16)
#defineEVENT_MODE(9<<16)
#defineEVENT_HELP(14<<16)
#defineEVENT_GROUP(15<<16)
#defineEVENT_TYPE(16<<16)
#defineEVENT_ATTRIB(17<<16)
#defineEVENT_SORT(18<<16)
#defineEVENT_SETGROUP(19<<16)
#defineEVENT_SETTYPE(20<<16)
#defineEVENT_CLONE(21<<16)
#defineEVENT_IDLE_0(22<<16)
#defineEVENT_IDLE_1(23<<16)
#defineEVENT_COMMAND(27<<16)
#defineEVENT_OFF(28<<16)
#defineEVENT_MENU(29<<16)
#defineEVENT_EMU(30<<16)
#defineEVENT_ROTATE(31<<16)
#defineEVENT_LOCK(32<<16)
#defineEVENT_PREVIEW(34<<16)
#defineEVENT_MUTE(35<<16)

Olhaquelegal,dpraassociarumbotopararodarumclone(EVENT_CLONE),pararotacionaratela(EVENT_ROTATE),paratrocarde
Olhaquelegal,dpraassociarumbotopararodarumclone(EVENT_CLONE),pararotacionaratela(EVENT_ROTATE),paratrocarde
emulador(EVENT_EMU),paraordenaralista(EVENT_SORT)eassimvai,bastandoumpoucodeinterpretaodocdigomostradoacima.
VamosfazerentoduasalteraesRetiraraopodeencerraroadvmenudoboto1enolugarcolocaraopoderodarumclone(tilparajogar
Popeye)evamoscriarumanovaopotrocardeemuladorpelobotoselectdogamepad.Paratanto,nossocdigooriginalmostradolemcima
devecarassim(noteasdiferenasmarcadasemnegrito)
staticvoidint_joystick_button_raw_poll()
{
for(inti=0;i<joystickb_count_get();++i){
for(intj=0;j<joystickb_button_count_get(i);++j){
if(joystickb_button_get(i,j)){
switch(j){
case0:
event_push(EVENT_ENTER);
break;
case1:
//event_push(EVENT_ESC);
event_push(EVENT_CLONE);
break;
case2:
event_push(EVENT_MENU);
break;
case3:
event_push(EVENT_PREVIEW);
break;
case4:
event_push(EVENT_MODE);
break;
case8:
event_push(EVENT_EMU);
break;
}
}
}
}
}

Ouseja,poderiamosassociaroutroseventosaosbotesdojoystickdeacordocomanossavontade.Lembraqueeufaleilemcimaqueoseventos
pareciamhardcodeadosnocdigo?Aiestotrechoquemostraisso.
Nonaldamudanasalvetudo(CTRL+K+Xnojoe)erecompileocdigoestandonaraizquevocdescompactouosarquivosdoadvmenu
Nonaldamudanasalvetudo(CTRL+K+Xnojoe)erecompileocdigoestandonaraizquevocdescompactouosarquivosdoadvmenu

pi@raspberrupi~/advancemenu2.5.0$sudomake
pi@raspberrupi~/advancemenu2.5.0$sudomakeinstall

Sedererronacompilaonoprecisacarnervoso.Bastaumalidanomeuoutropost(hps://fg1998.wordpress.com/2013/04/15/advance
menu/)sobreoadvmenuquevocencontrararespostal

Rodeoadvmenuevocverqueagoraoboto1nomaisencerraaexecuodoprograma,massimabreummenulistandoasopesdeclonedos
jogosdoMame.Eobotoselectagoraserveparaselecionarentreosemuladoresquevoctempreviamenteconguradosnoseuarquivoadvmenu.rc.

Claroquenossoqueridousurioaindapodesairdoadvmenusimplesmenteselecionandoaopoexitdomenudoprograma.Masaitapana
orelhadeleporsertoteimoso.Numaprximaversovamosversepossveltiraressaopodeltambm.Lembrandoquecasovcprecise
alteraralgumacoisaeligarumteclado,ateclaESCcontinuacomsuafunonormal.

Gostaram?Entomosaobraeboasorteparatodos.
Anncios

CATEGORIAS ADVMENU,EMULADOR,RASPBERRY

BlognoWordPress.com.

También podría gustarte