亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? playerdevice.cc

?? 一個機器人平臺
?? CC
?? 第 1 頁 / 共 2 頁
字號:
  // just to be sure  this->m_info_io->drivername[sizeof(this->m_info_io->drivername)-1] = '\0';  Unlock();}////////////////////////////////////////////////////////////////////////////// Copy the data into shared memory & update the info buffersize_t CPlayerEntity::PutData( void* data, size_t len ){  // tell the server to export this data to anyone that needs it  this->SetDirty( PropData, 1 );    //PRINT_DEBUG4( "Putting %d bytes of data into device (%d,%d,%d)\n",  //	len, m_player.port, m_player.type, m_player.index );    // copy the data into the mmapped data buffer.  // also set the timestamp and available fields for the data  size_t retval = PutIOData( (void*)m_data_io, m_data_len,			     data, len,			     &m_info_io->data_timestamp_sec,			     &m_info_io->data_timestamp_usec,			     &m_info_io->data_avail );    // give the GUI a chance to display this data  GuiEntityPropertyChange( this, PropData );  return retval;}////////////////////////////////////////////////////////////////////////////// Copy the command into shared memory & update the info buffersize_t CPlayerEntity::PutCommand( void* data, size_t len ){  // tell the server to export this command to anyone that needs it  this->SetDirty( PropCommand, 1 );    // copy the data into the mmapped command buffer.  // also set the timestamp and available fields for the command  return PutIOData( m_command_io, m_command_len,		    data, len,		    &m_info_io->command_timestamp_sec,		    &m_info_io->command_timestamp_usec,		    &m_info_io->command_avail );    }///////////////////////////////////////////////////////////////////////////// Read a configuration from the shared memorysize_t CPlayerEntity::GetConfig(void** client, void* config, size_t len ){  int size;  player_device_id_t id;  Lock();  if((size = m_reqqueue->Pop(&id, client, (unsigned char*)config, len)) < 0)  {    Unlock();    return(0);  }  // tell the server to export this config to anyone that needs it  this->SetDirty( PropConfig, 1 );  Unlock();  return(size);}size_t CPlayerEntity::PutReply(void* client, unsigned short type,                         struct timeval* ts, void* reply, size_t len){  double seconds;  struct timeval curr;    // tell the server to export this reply to anyone that needs it  this->SetDirty( PropReply, 1 );  if(ts)    curr = *ts;  else  {    seconds = m_world->GetTime();    curr.tv_sec = (long)seconds;    curr.tv_usec = (long)((seconds - curr.tv_sec)*1000000);  }  Lock();  m_repqueue->Push(NULL, client, type, &curr, (unsigned char*)reply, len);  Unlock();  return(0);}///////////////////////////////////////////////////////////////////////////// Put a reply back on the reply queue.size_t CPlayerEntity::PutReply(void* client, unsigned short type){  return(PutReply(client, type, NULL, NULL, 0));} ///////////////////////////////////////////////////////////////////////////// See if the PlayerDevice is subscribedint CPlayerEntity::Subscribed() {  int subscribed = 0;     if( m_info_io ) // if we have player connection at all    {       Lock();      // see if a player client is connected to this entity      subscribed = m_info_io->subscribed;      Unlock();    }    //printf( "SUBS: %d\n", subscribed );  return( subscribed );}void CPlayerEntity::FamilySubscribe(){  CHILDLOOP( ch )    ch->FamilySubscribe();  this->Subscribe();}void CPlayerEntity::FamilyUnsubscribe(){  CHILDLOOP( ch )    ch->FamilyUnsubscribe();  this->Unsubscribe();}/////////////////////////////////////////////////////////////////////////////// subscribe to the device (used by other devices that depend on this one)void CPlayerEntity::Subscribe() {  Lock();  m_info_io->subscribed++;    Unlock();     //printf( "player %d.%d.%d subs %d\n",   //  this->m_player.port,    //  this->m_player.code,    //  this->m_player.index,  //  m_info_io->subscribed );  CEntity::Subscribe();}///////////////////////////////////////////////////////////////////////////// unsubscribe from the device (used by other devices that depend on this one)void CPlayerEntity::Unsubscribe(){   //puts( "PUNSUB" );    Lock();  if( m_info_io->subscribed > 0 )    m_info_io->subscribed--;  Unlock();  CEntity::Unsubscribe();} ///////////////////////////////////////////////////////////////////////////// lock the shared mem// Returns true on success//bool CPlayerEntity::Lock( void ){  assert(m_world);  return m_world->LockByte( this->lock_byte );}///////////////////////////////////////////////////////////////////////////// unlock the shared mem//bool CPlayerEntity::Unlock( void ){  assert(m_world);  return m_world->UnlockByte( this->lock_byte );}int CPlayerEntity::SetProperty( int con, EntityProperty property, 			  void* value, size_t len ){  PRINT_DEBUG( "" );  assert( value );  assert( len > 0 );  assert( (int)len < MAX_PROPERTY_DATA_LEN );  switch( property )  {    case PropPlayerSubscriptions:      PRINT_DEBUG1( "PLAYER SUBSCRIPTIONS %d", *(int*) value);            if( m_info_io )      {        Lock();        m_info_io->subscribed = *(int*)value;        Unlock();      }            break;          case PropPlayerId:      memcpy( &m_player, (player_device_id_t*)value, sizeof(m_player) );      break;            // these properties manipulate the player IO buffers    case PropCommand:      PutCommand( value, len );      break;          case PropData:      PutData( value, len );      break;          case PropConfig: // copy the  playerqueue's external memory chunk    {       Lock();      size_t len = m_config_len * sizeof(playerqueue_elt_t);      memcpy( m_config_io, value, len );       Unlock();    }    break;      case PropReply:    {       Lock();      size_t len = m_reply_len * sizeof(playerqueue_elt_t);      memcpy( m_reply_io, value, len );       Unlock();    }    break;          default: // assume it'll be handled by CEntity::SetProperty      break;   }  // even if we handled it, we still call the basic SetProperty in  // order to set the dirty flags correctly  return( CEntity::SetProperty( con, property, value, len ) ); }int CPlayerEntity::GetProperty( EntityProperty property, void* value ){   PRINT_DEBUG3( "finding property %d for entity (%d %s)",                 property, this->stage_id, this->lib_entry->token );  assert( value );  // indicate no data - this should be overridden below  int retval = 0;  switch( property )  {    case PropPlayerSubscriptions:      PRINT_DEBUG( "GET SUBS PROPERTY");      { int subs = Subscribed();      memcpy( value, (void*)&subs, sizeof(subs) );       retval = sizeof(subs); }      break;    case PropPlayerId:      memcpy( value, &m_player, sizeof(m_player) );      retval = sizeof(m_player);      break;      // these properties manipulate the player IO buffers    case PropCommand:      retval = GetCommand( value, m_command_len );      break;    case PropData:      retval = GetData( value, m_data_len );      break;    case PropConfig:    {       Lock();      size_t len = m_config_len * sizeof(playerqueue_elt_t);      memcpy( value, m_config_io, len );      retval = len;       Unlock();    }    break;        case PropReply:    {       Lock();      size_t len = m_reply_len * sizeof(playerqueue_elt_t);      memcpy( value, m_reply_io, len );      retval = len;       Unlock();    }    break;    default:      // we didn't have that proprty code - pass request down to the CEntity and return      return( CEntity::GetProperty( property, value ) );  }  return retval;}void CPlayerEntity::GetStatusString( char* buf, int buflen ){  double x, y, th;  this->GetGlobalPose( x, y, th );    // check for overflow  assert( -1 !=	  snprintf( buf, buflen, 		    "Pose(%.2f,%.2f,%.2f) Player(%d:%d:%d) Stage(%d:%d(%s))",		    x, 		    y, 		    th,		    this->m_player.port, 		    this->m_player.code, 		    this->m_player.index, 		    this->stage_id,		    this->lib_entry->type_num,		    this->lib_entry->token		    ) ); }#ifdef INCLUDE_RTK2// Initialise the rtk guivoid CPlayerEntity::RtkStartup(){  CEntity::RtkStartup();  // add this device to the world's data menu   this->m_world->AddToDataMenu( this, true);   // add the player ID string to the label figure  char label[1024];  char tmp[1024];     label[0] = 0;  snprintf(tmp, sizeof(tmp), "%s %s", 	   this->name,	   this->lib_entry->token );  strncat(label, tmp, sizeof(label));  if (m_player.port > 0)  {    snprintf(tmp, sizeof(tmp), "\n%d:%d", m_player.port, m_player.index);    strncat(label, tmp, sizeof(label));  }     rtk_fig_clear(this->fig_label );  rtk_fig_text(this->fig_label,  0.75 * size_x,  0.75 * size_y, 0, label);  return;}///////////////////////////////////////////////////////////////////////////// Process mouse eventsvoid CPlayerEntity::RtkOnMouse(rtk_fig_t *fig, int event, int mode){  switch (event)  {    case RTK_EVENT_PRESS:          // if the CTRL key is held down, launch playerv      // rtk doesn't support modifiers directly so we use this      // backdoor route which may not sync perfectly with the click      // itself over a delayed network, but it should work pretty well.      int x, y;      GdkModifierType modifiers;      gdk_window_get_pointer(m_world->canvas->canvas->window,                              &x, &y, &modifiers);          //if( modifiers & GDK_CONTROL_MASK ) SpawnPlayerv();      break;      // Handle case when mouse is moved over the figure    case RTK_EVENT_MOUSE_OVER:      this->FamilySubscribe();      break;            // Handle case when mouse is moved away from the figure    case RTK_EVENT_MOUSE_NOT_OVER:      this->FamilyUnsubscribe();      break;          default:      break;  }    CEntity::RtkOnMouse(fig, event, mode);  return;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女视频一区二区在线观看| 欧美在线观看禁18| 久久精品视频免费观看| 国产精品69毛片高清亚洲| 久久蜜桃香蕉精品一区二区三区| 国产成人精品一区二区三区四区 | 91精彩视频在线| 亚洲超丰满肉感bbw| 欧美一区二区不卡视频| 国产中文一区二区三区| 国产精品久99| 欧美日韩国产高清一区二区| 麻豆成人免费电影| 中文字幕国产精品一区二区| 99国产精品久久久| 天天影视网天天综合色在线播放 | 在线精品亚洲一区二区不卡| 午夜精品久久久久久久99水蜜桃| 精品少妇一区二区三区日产乱码| 大陆成人av片| 亚洲444eee在线观看| www国产精品av| jlzzjlzz欧美大全| 亚洲一级二级三级| 精品久久久影院| 色一情一乱一乱一91av| 另类欧美日韩国产在线| 亚洲素人一区二区| 欧美一二三在线| 99国产精品国产精品毛片| 爽爽淫人综合网网站| 国产午夜精品一区二区三区四区| 欧美午夜片在线观看| 精品一区二区三区免费播放| 亚洲天堂网中文字| 91麻豆精品国产| eeuss鲁片一区二区三区| 日韩不卡一区二区三区| 国产精品久久久一本精品 | 成人午夜精品一区二区三区| 香蕉久久夜色精品国产使用方法 | 首页亚洲欧美制服丝腿| 国产精品久久久久久久裸模| 日韩亚洲欧美一区| 91九色最新地址| thepron国产精品| 久久99热99| 亚洲成人777| 国产精品第13页| 久久精品男人的天堂| 日韩一区二区三区在线视频| 在线观看视频欧美| av一二三不卡影片| 国产精品123| 蜜桃久久久久久| 石原莉奈在线亚洲三区| 亚洲一二三区视频在线观看| 亚洲人成7777| 国产精品麻豆久久久| 欧美大度的电影原声| 制服丝袜亚洲色图| 在线视频国内自拍亚洲视频| av资源网一区| 成人午夜激情视频| 成人性生交大片免费 | av电影在线观看一区| 国产xxx精品视频大全| 久久99精品久久久| 九九九久久久精品| 久久激五月天综合精品| 日韩电影在线观看电影| 午夜久久久影院| 日韩国产成人精品| 青娱乐精品在线视频| 日韩中文字幕不卡| 青青草97国产精品免费观看无弹窗版| 视频一区中文字幕| 青青青伊人色综合久久| 蜜臀av性久久久久av蜜臀妖精| 日本少妇一区二区| 狠狠色丁香婷婷综合| 国内成人免费视频| 国产精品一区二区视频| 国产成人精品免费网站| 成人毛片在线观看| 色一区在线观看| 欧美日本不卡视频| 欧美一区二区三区日韩| 欧美一区中文字幕| 精品国产一区二区三区四区四| 久久综合久久99| 国产精品久久久久影院亚瑟 | 日本一区二区三区免费乱视频| 一区在线观看免费| 一区二区三区在线视频播放| 日韩精品福利网| 国产一区欧美日韩| 91色porny蝌蚪| 欧美影片第一页| 日韩小视频在线观看专区| 精品99久久久久久| 亚洲日本成人在线观看| 亚洲大片免费看| 国产乱码精品一区二区三| 91在线观看一区二区| 欧美精品丝袜久久久中文字幕| 久久久久久亚洲综合影院红桃 | 久久午夜电影网| 亚洲天堂成人在线观看| 日韩激情中文字幕| 丁香亚洲综合激情啪啪综合| 欧美影院一区二区| 久久久久99精品国产片| 亚洲午夜久久久久| 国产精品18久久久久久久久久久久 | 精品国产91久久久久久久妲己| 日本一区二区视频在线| 五月天久久比比资源色| 国产精品原创巨作av| 欧美性大战久久久久久久蜜臀| 日韩欧美一区中文| 一区二区三区视频在线观看| 老色鬼精品视频在线观看播放| av一区二区三区在线| 日韩欧美国产精品| 亚洲自拍偷拍av| 丁香桃色午夜亚洲一区二区三区| 欧美视频第二页| 国产精品美女视频| 免费欧美高清视频| 在线亚洲精品福利网址导航| 久久精品人人做人人爽人人| 免费在线看成人av| 色视频成人在线观看免| 国产亚洲精品久| 日本欧美在线观看| 欧美在线一二三| 国产精品久久久久久久久图文区 | 亚洲一区二区视频| 国产999精品久久久久久绿帽| 欧美福利视频导航| 亚洲欧美偷拍卡通变态| 国产91色综合久久免费分享| 8v天堂国产在线一区二区| 亚洲精品视频观看| 成人精品视频.| 亚洲精品一区二区三区蜜桃下载| 天堂成人国产精品一区| 欧美三级中文字| 日韩美女视频19| 99久久精品免费| 中文字幕av一区二区三区免费看 | 日韩精品乱码av一区二区| 91国产精品成人| 亚洲蜜臀av乱码久久精品蜜桃| 成人激情校园春色| 国产色综合一区| 国产精品夜夜嗨| 国产色婷婷亚洲99精品小说| 国产一区欧美一区| 久久日韩精品一区二区五区| 美腿丝袜亚洲综合| 欧美电影免费观看高清完整版| 日产欧产美韩系列久久99| 欧美剧在线免费观看网站| 亚洲影视资源网| 欧美日韩国产三级| 五月婷婷欧美视频| 日韩一区二区三| 久久99国产精品免费| 精品乱人伦一区二区三区| 久久99精品国产91久久来源| 精品盗摄一区二区三区| 国产精品亚洲а∨天堂免在线| 国产蜜臀97一区二区三区| 成人av午夜影院| 亚洲精品成人a在线观看| 在线精品视频免费播放| 午夜成人在线视频| 欧美一级欧美三级| 国产中文一区二区三区| 中文字幕精品三区| 日本丰满少妇一区二区三区| 亚洲一二三区视频在线观看| 91精品国产一区二区人妖| 久久精品国产免费| 国产日韩精品一区二区三区| 成人综合在线网站| 亚洲精品ww久久久久久p站| 欧美顶级少妇做爰| 国产一区二区三区免费看| 日韩一区欧美一区| 欧美精品在线一区二区三区| 久久66热re国产| 日韩伦理av电影| 在线成人av网站| 懂色av中文字幕一区二区三区| 亚洲精品自拍动漫在线| 欧美一级精品在线| 成人免费看视频|