Update of /cvsroot/playerstage/code/player/server/drivers/ptz
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9485/server/drivers/ptz
Modified Files:
Tag: release-2-0-patches
ptu46.cc
Log Message:
merged many changes from HEAD
Index: ptu46.cc
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/ptz/ptu46.cc,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -C2 -d -r1.20 -r1.20.2.1
*** ptu46.cc 27 Mar 2006 18:10:33 -0000 1.20
--- ptu46.cc 22 Sep 2006 23:58:35 -0000 1.20.2.1
***************
*** 66,70 ****
- The serial port to which the unit is attached.
! @author Toby Collett
*/
--- 66,70 ----
- The serial port to which the unit is attached.
! @author Toby Collett, Radu Bogdan Rusu
*/
***************
*** 117,146 ****
//
-
-
class PTU46
{
! public:
PTU46(char * port, int rate);
~PTU46();
// get count/degree resolution
! float GetRes(char type);
// get position limit
! int GetLimit(char type, char LimType);
// get/set position in degrees
! int GetPos(char type);
! bool SetPos(char type, int pos, bool Block = false);
// get/set speed in degrees/sec
! bool SetSpeed(char type, int speed);
! int GetSpeed(char type);
// get/set move mode
! bool SetMode(char type);
! char GetMode();
! bool Open() {return fd >0;};
// Position Limits
--- 117,144 ----
//
class PTU46
{
! public:
PTU46(char * port, int rate);
~PTU46();
// get count/degree resolution
! float GetRes (char type);
// get position limit
! int GetLimit (char type, char LimType);
// get/set position in degrees
! float GetPos (char type);
! bool SetPos (char type, float pos, bool Block = false);
// get/set speed in degrees/sec
! bool SetSpeed (char type, float speed);
! float GetSpeed (char type);
// get/set move mode
! bool SetMode (char type);
! char GetMode ();
! bool Open () {return fd >0;};
// Position Limits
***************
*** 148,153 ****
// Speed Limits
int TSMin, TSMax, PSMin, PSMax;
!
! protected:
// pan and tilt resolution
float tr,pr;
--- 146,151 ----
// Speed Limits
int TSMin, TSMax, PSMin, PSMax;
!
! protected:
// pan and tilt resolution
float tr,pr;
***************
*** 218,223 ****
tcflush(fd, TCIFLUSH);
-
-
// get pan tilt encoder res
tr = GetRes(PTU46_TILT);
--- 216,219 ----
***************
*** 233,237 ****
TSMax = GetLimit(PTU46_TILT, PTU46_MAX_SPEED);
-
if (tr <= 0 || pr <= 0 || PMin == 0 || PMax == 0 || TMin == 0 || TMax
== 0)
{
--- 229,232 ----
***************
*** 365,453 ****
// get position in degrees
! int PTU46::GetPos(char type)
{
! if (fd < 0)
! return -1;
! char cmd[4] = " p ";
! cmd[0] = type;
!
! // get pan pos
! int len = 0;
! Write(cmd);
! len = read(fd, buffer, PTU46_BUFFER_LEN );
! if (len < 3 || buffer[0] != '*')
! {
! fprintf(stderr,"Error getting pan-tilt pos\n");
! return -1;
! }
! buffer[len] = '\0';
! return static_cast<int> (rint(strtod(&buffer[2],NULL) * (type ==
PTU46_TILT ? tr : pr)));
}
// set position in degrees
! bool PTU46::SetPos(char type, int pos, bool Block)
{
! if (fd < 0)
! return false;
!
! // get raw encoder count to move
! int Count = static_cast<int> (pos/(type == PTU46_TILT ? tr : pr));
! // Check limits
! if (Count < (type == PTU46_TILT ? TMin : PMin) || Count > (type ==
PTU46_TILT ? TMax : PMax))
! {
! fprintf(stderr,"Pan Tilt Value out of Range: %c %d(%d)
(%d-%d)\n", type, pos, Count, (type == PTU46_TILT ? TMin : PMin),(type ==
PTU46_TILT ? TMax : PMax));
! return false;
! }
! char cmd[16];
! snprintf(cmd,16,"%cp%d ",type,Count);
!
! // set pos
! int len = 0;
! Write(cmd);
! len = read(fd, buffer, PTU46_BUFFER_LEN );
! if (len <= 0 || buffer[0] != '*')
! {
! fprintf(stderr,"Error setting pan-tilt pos\n");
! return false;
! }
! if (Block)
! {
! while (GetPos(type)!=pos);
! }
! return true;
}
// get speed in degrees/sec
! int PTU46::GetSpeed(char type)
{
! if (fd < 0)
! return -1;
! char cmd[4] = " s ";
! cmd[0] = type;
! // get speed
! int len = 0;
! Write(cmd);
! len = read(fd, buffer, PTU46_BUFFER_LEN );
! if (len < 3 || buffer[0] != '*')
! {
! fprintf(stderr,"Error getting pan-tilt speed\n");
! return -1;
! }
! buffer[len] = '\0';
!
! return static_cast<int> (rint(strtod(&buffer[2],NULL) * (type ==
PTU46_TILT ? tr : pr)));
}
--- 360,447 ----
// get position in degrees
! float PTU46::GetPos (char type)
{
! if (fd < 0)
! return -1;
! char cmd[4] = " p ";
! cmd[0] = type;
! // get pan pos
! int len = 0;
! Write (cmd);
! len = read (fd, buffer, PTU46_BUFFER_LEN );
!
! if (len < 3 || buffer[0] != '*')
! {
! fprintf(stderr,"Error getting pan-tilt pos\n");
! return -1;
! }
! buffer[len] = '\0';
! return strtod (&buffer[2],NULL) * (type == PTU46_TILT ? tr : pr);
}
// set position in degrees
! bool PTU46::SetPos (char type, float pos, bool Block)
{
+ if (fd < 0)
+ return false;
! // get raw encoder count to move
! int Count = static_cast<int> (pos/(type == PTU46_TILT ? tr : pr));
! // Check limits
! if (Count < (type == PTU46_TILT ? TMin : PMin) || Count > (type ==
PTU46_TILT ? TMax : PMax))
! {
! fprintf (stderr,"Pan Tilt Value out of Range: %c %f(%d) (%d-%d)\n",
type, pos, Count, (type == PTU46_TILT ? TMin : PMin),(type == PTU46_TILT ? TMax
: PMax));
! return false;
! }
! char cmd[16];
! snprintf (cmd,16,"%cp%d ",type,Count);
! // set pos
! int len = 0;
! Write (cmd);
! len = read (fd, buffer, PTU46_BUFFER_LEN );
!
! if (len <= 0 || buffer[0] != '*')
! {
! fprintf(stderr,"Error setting pan-tilt pos\n");
! return false;
! }
!
! if (Block)
! while (GetPos (type) != pos);
!
! return true;
}
// get speed in degrees/sec
! float PTU46::GetSpeed (char type)
{
! if (fd < 0)
! return -1;
! char cmd[4] = " s ";
! cmd[0] = type;
! // get speed
! int len = 0;
! Write (cmd);
! len = read (fd, buffer, PTU46_BUFFER_LEN );
! if (len < 3 || buffer[0] != '*')
! {
! fprintf (stderr,"Error getting pan-tilt speed\n");
! return -1;
! }
! buffer[len] = '\0';
!
! return strtod(&buffer[2],NULL) * (type == PTU46_TILT ? tr : pr);
}
***************
*** 455,686 ****
// set speed in degrees/sec
! bool PTU46::SetSpeed(char type, int pos)
{
! if (fd < 0)
! return false;
! // get raw encoder speed to move
! int Count = static_cast<int> (pos/(type == PTU46_TILT ? tr : pr));
! // Check limits
! if (abs(Count) < (type == PTU46_TILT ? TSMin : PSMin) || abs(Count) >
(type == PTU46_TILT ? TSMax : PSMax))
! {
! fprintf(stderr,"Pan Tilt Speed Value out of Range: %c %d(%d)
(%d-%d)\n", type, pos, Count, (type == PTU46_TILT ? TSMin : PSMin),(type ==
PTU46_TILT ? TSMax : PSMax));
! return false;
! }
! char cmd[16];
! snprintf(cmd,16,"%cs%d ",type,Count);
! // set speed
! int len = 0;
! Write(cmd);
! len = read(fd, buffer, PTU46_BUFFER_LEN );
!
! if (len <= 0 || buffer[0] != '*')
! {
! fprintf(stderr,"Error setting pan-tilt speed\n");
! return false;
! }
! return true;
}
// set movement mode (position/velocity)
! bool PTU46::SetMode(char type)
{
! if (fd < 0)
! return false;
! char cmd[4] = "c ";
! cmd[1] = type;
! // set mode
! int len = 0;
! Write(cmd);
! len = read(fd, buffer, PTU46_BUFFER_LEN );
! if (len <= 0 || buffer[0] != '*')
! {
! fprintf(stderr,"Error setting pan-tilt move mode\n");
! return false;
! }
! return true;
}
// get position in degrees
! char PTU46::GetMode()
{
! if (fd < 0)
! return -1;
! // get pan tilt mode
! int len = 0;
! Write("c ");
! len = read(fd, buffer, PTU46_BUFFER_LEN );
!
! if (len < 3 || buffer[0] != '*')
! {
! fprintf(stderr,"Error getting pan-tilt pos\n");
! return -1;
! }
! if (buffer[2] == 'p')
! return PTU46_VELOCITY;
! else if (buffer[2] == 'i')
! return PTU46_POSITION;
! else
! return -1;
}
-
-
///////////////////////////////////////////////////////////////
// Player Driver Class //
///////////////////////////////////////////////////////////////
-
class PTU46_Device:public Driver
{
! protected:
! // this function will be run in a separate thread
! virtual void Main();
! player_ptz_data_t data;
! player_ptz_cmd_t cmd;
! public:
! PTU46 * pantilt;
! // config params
! char ptz_serial_port[MAX_FILENAME_SIZE];
! int Rate;
! unsigned char MoveMode;
! PTU46_Device( ConfigFile* cf, int section);
! virtual int Setup();
! virtual int Shutdown();
! // MessageHandler
! int ProcessMessage(MessageQueue* resp_queue, player_msghdr *
hdr, void * data);
};
// initialization function
! Driver* PTU46_Init( ConfigFile* cf, int section)
{
! return static_cast<Driver*> (new PTU46_Device( cf, section));
}
// a driver registration function
void
! PTU46_Register(DriverTable* table)
{
! table->AddDriver("ptu46", PTU46_Init);
}
! PTU46_Device::PTU46_Device( ConfigFile* cf, int section) :
! Driver(cf, section, true, PLAYER_MSGQUEUE_DEFAULT_MAXLEN, PLAYER_PTZ_CODE)
{
! data.pan = data.tilt = data.zoom = data.panspeed = data.tiltspeed = 0;
! cmd.pan = cmd.tilt = cmd.zoom = cmd.panspeed = data.tiltspeed = 0;
!
! //PutData((void*)&data,sizeof(data),NULL);
! //PutCommand(this->device_id,(void*)&cmd,sizeof(cmd),NULL);
! MoveMode = PLAYER_PTZ_POSITION_CONTROL;
! strncpy(ptz_serial_port,
! cf->ReadString(section, "port", DEFAULT_PTZ_PORT),
! sizeof(ptz_serial_port));
! Rate = cf->ReadInt(section, "baudrate", PTU46_DEFAULT_BAUD);
!
}
int
! PTU46_Device::Setup()
{
! printf("PTZ connection initializing (%s)...", ptz_serial_port);
! fflush(stdout);
!
! pantilt = new PTU46(ptz_serial_port,Rate);
! if (pantilt != NULL && pantilt->Open())
! printf("Success\n");
! else
! {
! printf("Failed\n");
! return -1;
! }
!
! player_ptz_cmd_t cmd;
! cmd.pan = cmd.tilt = 0;
! cmd.zoom = 0;
! cmd.panspeed = 0;
! cmd.tiltspeed = 0;
!
!
! // zero the command buffer
! //PutCommand(this->device_id,(unsigned char*)&cmd,sizeof(cmd),NULL);
! // start the thread to talk with the camera
! StartThread();
! return(0);
}
int
! PTU46_Device::Shutdown()
{
! puts("PTU46_Device::Shutdown");
!
! StopThread();
! delete pantilt;
! puts("PTZ camera has been shutdown");
! return(0);
}
! int PTU46_Device::ProcessMessage(MessageQueue * resp_queue, player_msghdr *
hdr, void * data)
{
! assert(hdr);
! assert(data);
!
! if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
PLAYER_PTZ_REQ_GENERIC, device_addr))
! {
! Publish(device_addr, resp_queue, PLAYER_MSGTYPE_RESP_NACK,
hdr->subtype);
! }
! else if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ,
PLAYER_PTZ_REQ_CONTROL_MODE, device_addr))
{
! player_ptz_req_control_mode * control_mode =
reinterpret_cast<player_ptz_req_control_mode *> (data);
! if(control_mode->mode != MoveMode)
! {
! uint8_t NewMode;
! if (control_mode->mode == PLAYER_PTZ_VELOCITY_CONTROL)
! NewMode = PTU46_VELOCITY;
! else if (control_mode->mode ==
PLAYER_PTZ_POSITION_CONTROL)
! NewMode = PTU46_POSITION;
! else
! {
! Publish(device_addr, resp_queue,
PLAYER_MSGTYPE_RESP_NACK, hdr->subtype);
! return 0;
! }
! if(pantilt->SetMode(NewMode))
! MoveMode = NewMode;
! else
! {
! Publish(device_addr, resp_queue,
PLAYER_MSGTYPE_RESP_NACK, hdr->subtype);
! return 0;
! }
! }
! Publish(device_addr, resp_queue, PLAYER_MSGTYPE_RESP_ACK,
hdr->subtype);
}
! else if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_CMD,
PLAYER_PTZ_CMD_STATE, device_addr))
! {
player_ptz_cmd_t * new_command =
reinterpret_cast<player_ptz_cmd_t *> (data);
--- 449,675 ----
// set speed in degrees/sec
! bool PTU46::SetSpeed (char type, float pos)
{
! if (fd < 0)
! return false;
! // get raw encoder speed to move
! int Count = static_cast<int> (pos/(type == PTU46_TILT ? tr : pr));
! // Check limits
! if (abs(Count) < (type == PTU46_TILT ? TSMin : PSMin) || abs(Count) >
(type == PTU46_TILT ? TSMax : PSMax))
! {
! fprintf (stderr,"Pan Tilt Speed Value out of Range: %c %f(%d)
(%d-%d)\n", type, pos, Count, (type == PTU46_TILT ? TSMin : PSMin),(type ==
PTU46_TILT ? TSMax : PSMax));
! return false;
! }
! char cmd[16];
! snprintf (cmd,16,"%cs%d ",type,Count);
! // set speed
! int len = 0;
! Write (cmd);
! len = read (fd, buffer, PTU46_BUFFER_LEN );
!
! if (len <= 0 || buffer[0] != '*')
! {
! fprintf (stderr,"Error setting pan-tilt speed\n");
! return false;
! }
! return true;
}
// set movement mode (position/velocity)
! bool PTU46::SetMode (char type)
{
! if (fd < 0)
! return false;
! char cmd[4] = "c ";
! cmd[1] = type;
! // set mode
! int len = 0;
! Write (cmd);
! len = read (fd, buffer, PTU46_BUFFER_LEN );
! if (len <= 0 || buffer[0] != '*')
! {
! fprintf (stderr,"Error setting pan-tilt move mode\n");
! return false;
! }
! return true;
}
// get position in degrees
! char PTU46::GetMode ()
{
! if (fd < 0)
! return -1;
! // get pan tilt mode
! int len = 0;
! Write ("c ");
! len = read (fd, buffer, PTU46_BUFFER_LEN );
!
! if (len < 3 || buffer[0] != '*')
! {
! fprintf (stderr,"Error getting pan-tilt pos\n");
! return -1;
! }
! if (buffer[2] == 'p')
! return PTU46_VELOCITY;
! else if (buffer[2] == 'i')
! return PTU46_POSITION;
! else
! return -1;
}
///////////////////////////////////////////////////////////////
// Player Driver Class //
///////////////////////////////////////////////////////////////
class PTU46_Device:public Driver
{
! protected:
! // this function will be run in a separate thread
! virtual void Main ();
! player_ptz_data_t data;
! player_ptz_cmd_t cmd;
! public:
! PTU46 * pantilt;
! // config params
! char ptz_serial_port[MAX_FILENAME_SIZE];
! int Rate;
! unsigned char MoveMode;
! PTU46_Device (ConfigFile* cf, int section);
! virtual int Setup ();
! virtual int Shutdown ();
! // MessageHandler
! int ProcessMessage (MessageQueue* resp_queue, player_msghdr * hdr, void
* data);
};
+
////////////////////////////////////////////////////////////////////////////////
// initialization function
! Driver* PTU46_Init (ConfigFile* cf, int section)
{
! return static_cast<Driver*> (new PTU46_Device (cf, section));
}
+
////////////////////////////////////////////////////////////////////////////////
// a driver registration function
void
! PTU46_Register (DriverTable* table)
{
! table->AddDriver ("ptu46", PTU46_Init);
}
!
////////////////////////////////////////////////////////////////////////////////
! PTU46_Device::PTU46_Device (ConfigFile* cf, int section) :
! Driver (cf, section, true, PLAYER_MSGQUEUE_DEFAULT_MAXLEN,
PLAYER_PTZ_CODE)
{
! data.pan = data.tilt = data.zoom = data.panspeed = data.tiltspeed = 0;
! cmd.pan = cmd.tilt = cmd.zoom = cmd.panspeed = data.tiltspeed = 0;
! MoveMode = PLAYER_PTZ_POSITION_CONTROL;
! strncpy (ptz_serial_port,
! cf->ReadString (section, "port", DEFAULT_PTZ_PORT),
! sizeof (ptz_serial_port));
! Rate = cf->ReadInt (section, "baudrate", PTU46_DEFAULT_BAUD);
}
+
////////////////////////////////////////////////////////////////////////////////
int
! PTU46_Device::Setup ()
{
+ printf ("> PTU46 connection initializing (%s)...", ptz_serial_port);
+ fflush (stdout);
! pantilt = new PTU46 (ptz_serial_port, Rate);
! if (pantilt != NULL && pantilt->Open ())
! printf ("[success]\n");
! else
! {
! printf ("[failed]\n");
! return -1;
! }
! player_ptz_cmd_t cmd;
! cmd.pan = cmd.tilt = 0;
! cmd.zoom = 0;
! cmd.panspeed = 0;
! cmd.tiltspeed = 0;
! // start the thread to talk with the pan-tilt-zoom unit
! StartThread ();
! return (0);
}
+
////////////////////////////////////////////////////////////////////////////////
int
! PTU46_Device::Shutdown ()
{
! StopThread ();
! delete pantilt;
! PLAYER_MSG0 (1, "> PTU46 driver shutting down... [done]");
! return (0);
}
!
////////////////////////////////////////////////////////////////////////////////
! int
! PTU46_Device::ProcessMessage (MessageQueue * resp_queue, player_msghdr * hdr,
void * data)
{
! assert (hdr);
! assert (data);
! // No REQ_GENERIC
! if (Message::MatchMessage (hdr, PLAYER_MSGTYPE_REQ,
PLAYER_PTZ_REQ_GENERIC, device_addr))
! Publish (device_addr, resp_queue, PLAYER_MSGTYPE_RESP_NACK,
hdr->subtype);
! else
! // REQ_CONTROL_MODE: position or velocity?
! if (Message::MatchMessage (hdr, PLAYER_MSGTYPE_REQ,
PLAYER_PTZ_REQ_CONTROL_MODE, device_addr))
{
! player_ptz_req_control_mode * control_mode =
reinterpret_cast<player_ptz_req_control_mode *> (data);
! if (control_mode->mode != MoveMode)
! {
! uint8_t NewMode;
! if (control_mode->mode == PLAYER_PTZ_VELOCITY_CONTROL)
! NewMode = PTU46_VELOCITY;
! else
! if (control_mode->mode == PLAYER_PTZ_POSITION_CONTROL)
! NewMode = PTU46_POSITION;
! else
! {
! Publish (device_addr, resp_queue,
PLAYER_MSGTYPE_RESP_NACK, hdr->subtype);
! return 0;
! }
! if (pantilt->SetMode (NewMode))
! MoveMode = NewMode;
! else
! {
! Publish (device_addr, resp_queue,
PLAYER_MSGTYPE_RESP_NACK, hdr->subtype);
! return 0;
! }
! }
! Publish (device_addr, resp_queue, PLAYER_MSGTYPE_RESP_ACK,
hdr->subtype);
}
! else
! // CMD mode
! if (Message::MatchMessage (hdr, PLAYER_MSGTYPE_CMD,
PLAYER_PTZ_CMD_STATE, device_addr))
! {
player_ptz_cmd_t * new_command =
reinterpret_cast<player_ptz_cmd_t *> (data);
***************
*** 689,744 ****
if (MoveMode == PLAYER_PTZ_VELOCITY_CONTROL)
{
! // ignore pan and tilt, just use velocity
! if (cmd.panspeed != new_command->panspeed)
! {
! if(pantilt->SetSpeed(PTU46_PAN,static_cast<int>
(RTOD(new_command->panspeed))))
! cmd.panspeed = new_command->panspeed;
! else
! success = false;
! }
! if (cmd.tiltspeed != new_command->tiltspeed)
! {
!
if(pantilt->SetSpeed(PTU46_TILT,static_cast<int>
(RTOD(new_command->tiltspeed))))
! cmd.tiltspeed = new_command->tiltspeed;
! else
! success = false;
! }
}
else
{
! // position move mode, ignore zero velocities, set pan
tilt pos
! if (cmd.pan != new_command->pan)
! {
! if(pantilt->SetPos(PTU46_PAN,static_cast<int>
(RTOD(new_command->pan))))
! cmd.pan = new_command->pan;
! else
! success = false;
! }
! if (cmd.tilt != new_command->tilt)
! {
! if(pantilt->SetPos(PTU46_TILT,static_cast<int>
(RTOD(new_command->tilt))))
! cmd.tilt = new_command->tilt;
! else
! success = false;
! }
! if (cmd.panspeed != new_command->panspeed &&
new_command->panspeed != 0)
! {
! if(pantilt->SetSpeed(PTU46_PAN,static_cast<int>
(RTOD(new_command->panspeed))))
! cmd.panspeed = new_command->panspeed;
! else
! success = false;
! }
! if (cmd.tiltspeed != new_command->tiltspeed &&
new_command->tiltspeed != 0)
! {
!
if(pantilt->SetSpeed(PTU46_TILT,static_cast<int>
(RTOD(new_command->tiltspeed))))
! cmd.tiltspeed = new_command->tiltspeed;
! else
! success = false;
! }
}
!
! Publish(device_addr, resp_queue, PLAYER_MSGTYPE_RESP_ACK,
hdr->subtype);
! }
! else
return -1;
return 0;
--- 678,732 ----
if (MoveMode == PLAYER_PTZ_VELOCITY_CONTROL)
{
! // ignore pan and tilt, just use velocity
! if (cmd.panspeed != new_command->panspeed)
! {
! if (pantilt->SetSpeed (PTU46_PAN,
RTOD(new_command->panspeed)))
! cmd.panspeed = new_command->panspeed;
! else
! success = false;
! }
! if (cmd.tiltspeed != new_command->tiltspeed)
! {
! if (pantilt->SetSpeed (PTU46_TILT,
RTOD(new_command->tiltspeed)))
! cmd.tiltspeed = new_command->tiltspeed;
! else
! success = false;
! }
}
else
{
! // position move mode, ignore zero velocities, set pan tilt
pos
! if (cmd.pan != new_command->pan)
! {
! if (pantilt->SetPos (PTU46_PAN, RTOD
(new_command->pan)))
! cmd.pan = new_command->pan;
! else
! success = false;
! }
! if (cmd.tilt != new_command->tilt)
! {
! if (pantilt->SetPos (PTU46_TILT, RTOD
(new_command->tilt)))
! cmd.tilt = new_command->tilt;
! else
! success = false;
! }
! if (cmd.panspeed != new_command->panspeed &&
new_command->panspeed != 0)
! {
! if (pantilt->SetSpeed (PTU46_PAN,
RTOD(new_command->panspeed)))
! cmd.panspeed = new_command->panspeed;
! else
! success = false;
! }
! if (cmd.tiltspeed != new_command->tiltspeed &&
new_command->tiltspeed != 0)
! {
! if (pantilt->SetSpeed (PTU46_TILT, RTOD
(new_command->tiltspeed)))
! cmd.tiltspeed = new_command->tiltspeed;
! else
! success = false;
! }
}
! Publish (device_addr, resp_queue, PLAYER_MSGTYPE_RESP_ACK,
hdr->subtype);
! }
! else
return -1;
return 0;
***************
*** 746,772 ****
// this function will be run in a separate thread
void
! PTU46_Device::Main()
{
! for(;;)
! {
! ProcessMessages();
!
! // Copy the data.
! data.pan = DTOR(pantilt->GetPos(PTU46_PAN));
! data.tilt = DTOR(pantilt->GetPos(PTU46_TILT));
! data.zoom = 0;
! data.panspeed = DTOR(pantilt->GetSpeed(PTU46_PAN));
! data.tiltspeed = DTOR(pantilt->GetSpeed(PTU46_TILT));
!
! /* test if we are supposed to cancel */
! pthread_testcancel();
! Publish(device_addr, NULL, PLAYER_MSGTYPE_DATA,
PLAYER_PTZ_DATA_STATE, (unsigned char*)&data, sizeof(player_ptz_data_t),NULL);
!
! // repeat frequency (default to 10 Hz)
! usleep(PTZ_SLEEP_TIME_USEC);
! }
! }
--- 734,761 ----
+
////////////////////////////////////////////////////////////////////////////////
// this function will be run in a separate thread
void
! PTU46_Device::Main ()
{
! for (;;)
! {
! // test if we are supposed to cancel
! pthread_testcancel();
!
! ProcessMessages ();
!
! // Copy the data.
! data.pan = DTOR (pantilt->GetPos (PTU46_PAN));
! data.tilt = DTOR (pantilt->GetPos (PTU46_TILT));
! data.zoom = 0;
! data.panspeed = DTOR (pantilt->GetSpeed (PTU46_PAN));
! data.tiltspeed = DTOR (pantilt->GetSpeed (PTU46_TILT));
+ Publish (device_addr, NULL, PLAYER_MSGTYPE_DATA, PLAYER_PTZ_DATA_STATE,
+ &data, sizeof (player_ptz_data_t), NULL);
+ // repeat frequency (default to 10 Hz)
+ usleep (PTZ_SLEEP_TIME_USEC);
+ }
+ }
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit