Systemanrop i c++

Här diskuteras programmering och utveckling
jansson
Inlägg: 527
Blev medlem: 31 okt 2006, 13:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Sverige

Systemanrop i c++

Inlägg av jansson »

Tjena.

Jag har fått en idé om att göra ett tillägg i källkoden till wiiremote-servern (lr vad man ska kalla det) i xbmc.
Här är filerna. http://xbmc.svn.sourceforge.net/svnroot ... WiiRemote/

Den är skriven i c++ och jag har bara programerat java (nästan bara).

Det jag vill göra är att starta XBMC när en wiiremote ansluter till servern.
Hur gör man ett systemanrop (till Ubuntu Hardy) från c++ klassen?
Jag vill ge ubuntu komandot

Kod: Markera allt

DISPLAY=:0.1 xbmc //Startat xmbc i x-session 0, skärm 1
Dessutom står det "// Compiles with g++ WiiRemote.cpp -lcwiid -o WiiRemote
// Preferably with libcwiid >= 6.0" i toppen på filen.

Betyder det att jag ska ha paket motsvarande g++ och libcwiid installerade? Antar att g++ är compilatorn.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Systemanrop i c++

Inlägg av Konservburk »

jansson skrev:Hur gör man ett systemanrop (till Ubuntu Hardy) från c++ klassen?
Jag vill ge ubuntu komandot

Kod: Markera allt

DISPLAY=:0.1 xbmc //Startat xmbc i x-session 0, skärm 1
Typ så här om jag förstår frågan rätt:

Kod: Markera allt

#include <stdlib.h>
main() {
        system("DISPLAY=:0.1 xbmc");
}
jansson skrev:Dessutom står det "// Compiles with g++ WiiRemote.cpp -lcwiid -o WiiRemote
// Preferably with libcwiid >= 6.0" i toppen på filen.

Betyder det att jag ska ha paket motsvarande g++ och libcwiid installerade? Antar att g++ är compilatorn.
Det stämmer bra att g++ är kompilatorn, och ja, du måste ha de grejerna installerade.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Systemanrop i c++

Inlägg av Lars »

Jo, g++ är kompilatorn. Installera förslagsvis build-essential och libcwiid1-dev, det bör räcka för att kunna köra kommandot.
jansson
Inlägg: 527
Blev medlem: 31 okt 2006, 13:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Sverige

Re: Systemanrop i c++

Inlägg av jansson »

Lars skrev:Jo, g++ är kompilatorn. Installera förslagsvis build-essential och libcwiid1-dev, det bör räcka för att kunna köra kommandot.
Med dessa paket installerade och följande ändringar i filen WiiRemote.cpp:

Kod: Markera allt

// Compiles with g++ WiiRemote.cpp -lcwiid -o WiiRemote
// Preferably with libcwiid >= 6.0

#include "WiiRemote.h"
#include <stdlib.h>               <----Min ändring

bool g_AllowReconnect = true;
bool g_AllowMouse     = true;
bool g_AllowNunchuck  = true;
(Leta efter <----Min ändring)

och...

Kod: Markera allt

void CWiiRemote::Initialize(CAddress Addr, int Socket)
{
  m_connected = false;
  m_lastKeyPressed          = 0;
  m_LastKey                 = 0;
  m_buttonRepeat            = false;
  m_lastKeyPressedNunchuck  = 0;
  m_LastKeyNunchuck         = 0;
  m_buttonRepeatNunchuck    = false;
  m_useIRMouse              = true;
  m_rptMode                 = 0;

  m_Socket = Socket;
  m_MyAddr = Addr;

  m_NumSamples = WIIREMOTE_SAMPLES;

  m_MaxX = WIIREMOTE_X_MAX;
  m_MaxY = WIIREMOTE_Y_MAX;
  m_MinX = WIIREMOTE_X_MIN;
  m_MinY = WIIREMOTE_Y_MIN;
#ifdef CWIID_OLD
  m_LastMsgTime = getTicks();
#endif

  //All control bits are set to false when cwiid is started
  //Report Button presses
  ToggleBit(m_rptMode, CWIID_RPT_BTN);
  if (g_AllowNunchuck)
    ToggleBit(m_rptMode, CWIID_RPT_NUNCHUK);

  //If wiiremote is used as a mouse, then report the IR sources
#ifndef CWIID_OLD  
  if (m_useIRMouse) 
#endif
    ToggleBit(m_rptMode, CWIID_RPT_IR);	

  //Have the first and fourth LED on the Wiiremote shine when connected
  ToggleBit(m_ledState, CWIID_LED1_ON);	
  ToggleBit(m_ledState, CWIID_LED4_ON);

  //@edit by Funkyjansson
  //Starts XBMC in Display 0.1
  system("DISPLAY=:0.1 xbmc");      <-----Min ändring
}
(Ändringen ligger längst ned)

ger

Kod: Markera allt

g++ WiiRemote.cpp -lcwiid -o WiiRemote
följande svar i konsolen.

Kod: Markera allt

In file included from WiiRemote.h:47,
                 from WiiRemote.cpp:24:
/usr/include/cwiid.h:63:48: error: bluetooth/bluetooth.h: No such file or directory
In file included from WiiRemote.cpp:24:
WiiRemote.h:51:27: error: bluetooth/hci.h: No such file or directory
WiiRemote.h:52:31: error: bluetooth/hci_lib.h: No such file or directory
In file included from WiiRemote.h:47,
                 from WiiRemote.cpp:24:
/usr/include/cwiid.h:295: error: ‘bdaddr_t’ does not name a type
/usr/include/cwiid.h:311: error: ‘bdaddr_t’ was not declared in this scope
/usr/include/cwiid.h:311: error: ‘bdaddr’ was not declared in this scope
/usr/include/cwiid.h:311: error: expected primary-expression before ‘int’
/usr/include/cwiid.h:311: error: initializer expression list treated as compound expression
/usr/include/cwiid.h:345: error: ‘bdaddr_t’ was not declared in this scope
/usr/include/cwiid.h:345: error: ‘bdaddr’ was not declared in this scope
/usr/include/cwiid.h:345: error: expected primary-expression before ‘int’
/usr/include/cwiid.h:345: error: initializer expression list treated as compound expression
In file included from WiiRemote.cpp:24:
WiiRemote.h:127: error: ‘bdaddr_t’ does not name a type
WiiRemote.cpp: In member function ‘void CWiiRemote::SetBluetoothAddress(const char*)’:
WiiRemote.cpp:156: error: ‘m_btaddr’ was not declared in this scope
WiiRemote.cpp:156: error: ‘str2ba’ was not declared in this scope
WiiRemote.cpp:158: error: ‘m_btaddr’ was not declared in this scope
WiiRemote.cpp:158: error: ‘BDADDR_ANY’ was not declared in this scope
WiiRemote.cpp:158: error: ‘bacpy’ was not declared in this scope
WiiRemote.cpp: In member function ‘bool CWiiRemote::Connect()’:
WiiRemote.cpp:338: error: ‘m_btaddr’ was not declared in this scope
WiiRemote.cpp:338: error: ‘cwiid_open’ cannot be used as a function
WiiRemote.cpp: In function ‘int main(int, char**)’:
WiiRemote.cpp:738: error: ‘hci_get_route’ was not declared in this scope
micke@micke-desktop:~/Binära_program/wiiremote_server/sourcecode/XBMC/tools/EventClients/Clients/WiiRemote$ 
Måste jag kompilera WiiRemote.h först lr vaddå?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Systemanrop i c++

Inlägg av Konservburk »

Nej, du kan/ska inte kompilera header-filer. Om du läser felmeddelandet så ser du följande:
usr/include/cwiid.h:63:48: error: bluetooth/bluetooth.h: No such file or directory
WiiRemote.h:51:27: error: bluetooth/hci.h: No such file or directory
WiiRemote.h:52:31: error: bluetooth/hci_lib.h: No such file or directory
Du saknar helt enkelt header-filerna som har att göra med bluetooth. De finns i libbluetooth-dev, vilket du med andra ord behöver installera.
jansson
Inlägg: 527
Blev medlem: 31 okt 2006, 13:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Sverige

Re: Systemanrop i c++

Inlägg av jansson »

Tack så mycket. Nu funkar programet som det ska.

Men... Självklart ett men ;) ... jag lade till det i system-> preferences-> sessions och startade om X (Ctrl+Alt+backspace) och när jag loggade in så fungerade det inte som det skulle. Kollar man i System-> Administration-> System monitor så finns där två XBMC-WiiRemote som jag döpte det till i sessions.

Om jag startar XBMC manuellt så kan jag använda wiiremoten utan problem med min egen kompilering.
Lika så om jag dödar de processer som ligger där och dubbelklickar på filen (wiiremote filen) så fungerar det och XBMC startar när jag kopplar upp wiiremoteen till datorn.

Jag har testat att logga ut och logga in igen. Men jag fick samma resultat.

Idéer?
jansson
Inlägg: 527
Blev medlem: 31 okt 2006, 13:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Sverige

Re: Systemanrop i c++

Inlägg av jansson »

Jag startade om datorn helt och nu värkar allt fungera som det ska.

Tack för all hjälp. Kul att se lite hur c++ funkar och så.
Skriv svar

Återgå till "Programmering och webbdesign"