当前位置: 首页>>代码示例>>C++>>正文


C++ sendData函数代码示例

本文整理汇总了C++中sendData函数的典型用法代码示例。如果您正苦于以下问题:C++ sendData函数的具体用法?C++ sendData怎么用?C++ sendData使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了sendData函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: execute

void VoxelTerrain:: execute()
{
  //pro vstupni cloud
  // udelat octree
  pcl::octree::OctreePointCloud<pcl::PointXYZI> oc (m_resolution);
  oc.setInputCloud (m_baseCloud->get_Cloud());
  oc.addPointsFromInputCloud ();
  // zjistit vsechny voxely
  std::vector<pcl::PointXYZI, Eigen::aligned_allocator<pcl::PointXYZI> > voxels;
  oc.getOccupiedVoxelCenters(voxels);

  // zjistit rozsah x y osy a podle toho hledat voxely ktere jsou nejníž
  double x_max,x_min,y_max,y_min,z_min,z_max;
  oc.getBoundingBox(x_min,y_min,z_min,x_max,y_max,z_max);

  oc.deleteTree();
emit percentage( 20);
  // z voxels udelat mracno bodu
  pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_voxels (new pcl::PointCloud<pcl::PointXYZI>);
  cloud_voxels->points.resize(voxels.size());
  #pragma omp parallel for
  for(int r=0; r < voxels.size(); r++)
  {
    cloud_voxels->points.at(r) = voxels.at(r);
  }
  cloud_voxels->width = cloud_voxels->points.size ();
  cloud_voxels->height = 1;
  cloud_voxels->is_dense = true;
emit percentage( 40);
  // spis boxsearch a pro kazdy voxel najit sousedy v danem boxu, pokud nenajde žadny bod niž než je on sam uložit jeho ID..
  pcl::octree::OctreePointCloudSearch<pcl::PointXYZI> ocs (m_resolution);

  ocs.setInputCloud (cloud_voxels);
  ocs.addPointsFromInputCloud ();
  std::vector< int > low_voxels;
  for (int q =0; q < voxels.size(); q++)
  {
    std::vector< int > ind;
    Eigen::Vector3f low(voxels.at(q).x-m_resolution/2, voxels.at(q).y-m_resolution/2,z_min);
    Eigen::Vector3f high(voxels.at(q).x+m_resolution/2, voxels.at(q).y+m_resolution/2,voxels.at(q).z);
    if(ocs.boxSearch(low,high,ind) <2)
    {
      if(ind.size() == 0)
        continue;
      // pokud jsou voxely vyskove pouze res od sebe
      if(ind.size()==1)
        low_voxels.push_back(q);
    }
  }
  emit percentage( 80);
  ocs.deleteTree();

  // jeste by to chtelo trochu prefiltrovat aby byl opravdu jen voxely terenu




  boost::shared_ptr<std::vector<int> > indicesptr (new std::vector<int> (low_voxels));
  pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_vege (new pcl::PointCloud<pcl::PointXYZI>);
  pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_terrain (new pcl::PointCloud<pcl::PointXYZI>);
  pcl::ExtractIndices<pcl::PointXYZI> extract;
     // Extract the inliers
  extract.setInputCloud (cloud_voxels);
  extract.setIndices (indicesptr);
  extract.setNegative (false);
  extract.filter (*cloud_terrain);
  extract.setNegative (true);
  extract.filter (*cloud_vege);

  m_vegetation->set_Cloud(cloud_vege);
  m_terrain->set_Cloud(cloud_terrain);

   sendData();
emit percentage( 99);
}
开发者ID:janekT,项目名称:3dforest,代码行数:75,代码来源:terrain.cpp

示例2: sendData

void WebServer::HTTPResponse::sendData(const char* pData, size_t length) {
	sendData((uint8_t*) pData, length);
} // sendData
开发者ID:pilate,项目名称:esp32-snippets,代码行数:3,代码来源:WebServer.cpp

示例3: rawName

/**
 * \brief Store data record
 */
void Storage::storeDataRecord(struct metadata *mdata)
{
	offset = 0;

	record.clear();
	record += "{\"@type\": \"ipfix.entry\", \"ipfix\": {";

	struct ipfix_template *templ = mdata->record.templ;
	uint8_t *data_record = (uint8_t*) mdata->record.record;
	
	/* get all fields */
	for (uint16_t count = 0, index = 0; count < templ->field_count; ++count, ++index) {
		/* Get Enterprise number and ID */
		id = templ->fields[index].ie.id;
		length = templ->fields[index].ie.length;
		enterprise = 0;
		
		if (id & 0x8000) {
			id &= 0x7fff;
			enterprise = templ->fields[++index].enterprise_number;
		}
		
		/* Get element informations */
		struct ipfix_element& element = elements[enterprise][id];
		if (element.type == UNKNOWN && element.name.empty()) {
			element.name = rawName(enterprise, id);
			elements[enterprise][id] = element;
			MSG_DEBUG(msg_module, "Unknown element (%s)", element.name.c_str());
		}

		if (count > 0) {
			record += ", ";
		}

		record += "\"";
		record += element.name;
		record += "\": \"";

		switch (element.type) {
		case PROTOCOL:
			record += translator.formatProtocol(read8(data_record + offset));
			break;
		case FLAGS:
			record += translator.formatFlags(read16(data_record + offset));
			break;
		case IPV4:
			record += translator.formatIPv4(read32(data_record + offset));
			break;
		case IPV6:{
			READ_BYTE_ARR(addr6, data_record + offset, IPV6_LEN);
			record += translator.formatIPv6(addr6);
			break;}
		case MAC: {
			READ_BYTE_ARR(addrMac, data_record + offset, MAC_LEN);
			record += translator.formatMac(addrMac);
			break;}
		case TSTAMP_SEC:
			record += translator.formatTimestamp(read64(data_record + offset), t_units::SEC);
			break;
		case TSTAMP_MILLI:
			record += translator.formatTimestamp(read64(data_record + offset), t_units::MILLISEC);
			break;
		case TSTAMP_MICRO:
			record += translator.formatTimestamp(read64(data_record + offset), t_units::MICROSEC);
			break;
		case TSTAMP_NANO:
			record += translator.formatTimestamp(read64(data_record + offset), t_units::NANOSEC);
			break;
		case STRING:
			readString(length, data_record, offset);
			break;
		case RAW:
			readRawData(length, data_record, offset);
			break;
		default:
			readRawData(length, data_record, offset);
			break;
		}

		record += "\"";

		offset += length;
	}
	
	/* Store metadata */
	if (processMetadata) {
		record += "}, \"metadata\": {";
		storeMetadata(mdata);
	}
	
	record += "}}\n";
	sendData();
}
开发者ID:rickhofstede,项目名称:ipfixcol,代码行数:96,代码来源:Storage.cpp

示例4: while

INT32 _mongoSession::_reply( MsgOpReply *replyHeader,
                             const CHAR *pBody,
                             const INT32 len )
{
   INT32 rc         = SDB_OK ;
   INT32 offset     = 0 ;
   mongoMsgReply reply ;
   bson::BSONObjBuilder bob ;
   bson::BSONObj bsonBody ;

   reply.header.id = 0 ;
   reply.header.responseTo = replyHeader->header.requestID ;
   reply.header.opCode = dbReply ;
   reply.header._flags = 0 ;
   reply.header._version = 0 ;
   reply.header.reservedFlags = 0 ;
   reply.cursorId = ( -1 == replyHeader->contextID ?
                            0 : replyHeader->contextID ) ;
   reply.startingFrom = replyHeader->startFrom ;
   if ( _converter->getParser().withCmd || _needReply )
   {
      reply.nReturned = replyHeader->numReturned > 0 ? replyHeader->numReturned : 1 ;
   }
   else
   {
      reply.nReturned = replyHeader->numReturned ;
   }

   if ( !_converter->getParser().withCmd && reply.nReturned > 0 )
   {
      while ( offset < len )
      {
         bsonBody.init( pBody + offset ) ;
         _outBuffer.write( bsonBody.objdata(), bsonBody.objsize() ) ;
         offset += ossRoundUpToMultipleX( bsonBody.objsize(), 4 ) ;
      }
      pBody = _outBuffer.data() ;
      reply.header.len = sizeof( mongoMsgReply ) + _outBuffer.size() ;
   }
   else
   {
      if ( pBody )
      {
         bsonBody.init( pBody ) ;
         if ( !bsonBody.hasField( "ok" ))
         {
            bob.append( "ok",
                        0 == replyHeader->flags ? TRUE : replyHeader->flags ) ;
            bob.appendElements( bsonBody ) ;
            pBody = bob.done().objdata() ;
            reply.header.len = sizeof( mongoMsgReply ) + bob.done().objsize() ;
         }
         else
         {
            reply.header.len = sizeof( mongoMsgReply ) + len ;
         }
      }
      else
      {
         bob.append( "ok", 1.0 ) ;
         pBody = bob.done().objdata() ;
         reply.header.len = sizeof( mongoMsgReply ) + bob.done().objsize() ;
      }
   }

   rc = sendData( (CHAR *)&reply, sizeof( mongoMsgReply ) ) ;
   if ( rc )
   {
      PD_LOG( PDERROR, "Session[%s] failed to send response header, rc: %d",
              sessionName(), rc ) ;
      goto error ;
   }

   if ( pBody )
   {
      rc = sendData( pBody, reply.header.len - sizeof( mongoMsgReply ) ) ;
      if ( rc )
      {
         PD_LOG( PDERROR, "Session[%s] failed to send response body, rc: %d",
                          sessionName(), rc ) ;
         goto error ;
      }
   }

   bob.decouple() ;

done:
   return rc ;
error:
   goto done ;
}
开发者ID:ensean,项目名称:SequoiaDB,代码行数:91,代码来源:mongoSession.cpp

示例5: sendData

void TM16XX::clearDisplay()
{
  for (int i = 0; i < displays; i++) {
    sendData(i << 1, 0);
  }
}
开发者ID:276970376,项目名称:Arduino-Sketches,代码行数:6,代码来源:TM16XX.cpp

示例6: grabNewEmails

void grabNewEmails() {
	sendData(0, fillMessageData("mail", "receive", username), sizeof(Message));
	getResponce(0);
}
开发者ID:mannias,项目名称:SO,代码行数:4,代码来源:client.c

示例7: deviceTransaction


//.........这里部分代码省略.........
                        length += 2;
                    }
                    computeCarrierDelays(idev->carrier, delays, loopCycles);
                }
            }
        }


#ifdef LIBUSB_NO_THREADS_OPTION
        if (idev->libusbNoThreads)
#endif
#ifdef LIBUSB_NO_THREADS
        {
            /* force the reader to give up the lock */
            idev->needToWrite = true;
            EnterCriticalSection(&idev->devLock);
            idev->needToWrite = false;
        }
#endif

        /* flush any extraneous CTL_TODEV responses */
        flushToDevResponsePackets(idev);
        /* time the transfer */
        then = microsSinceX();
        result = interruptSend(idev->usbDev, msg, length,
                               idev->settings->sendTimeout);
        /* error if we were not able to write ALL the data */
        if (result != length)
            printError(LOG_ERROR,
                       "failed to write control packet", idev->usbDev);
        /* if there is more data need to transmit the data stream
           before releasing the devLock */
        else if (request->dataLen > sent &&
                 ! sendData(idev,
                            request->data + sent, request->dataLen - sent,
                            idev->version < 3 && request->code == IG_DEV_SEND))
            message(LOG_ERROR, "Failed to send IR data.\n");
        /* if no ack is necessary then return success now */
        else if (! type->ack)
            retval = true;
        else
        {
            int amount;

#ifdef LIBUSB_NO_THREADS_OPTION
            if (idev->libusbNoThreads)
#endif
#ifdef LIBUSB_NO_THREADS
            {
                /* unlock as soon as possible after all data has been sent */
                LeaveCriticalSection(&idev->devLock);
                unlocked = true;
            }
#endif

            /* using sendTimeout to ensure reader has necessary time
               to recieve the ack */
            amount = notified(idev->responsePipe[READ],
                              idev->settings->sendTimeout);
            if (amount < 0)
                message(LOG_ERROR, "Failed to read control ack: %s\n",
                        translateError(errno));
            else if (amount > 0)
            {
                dataPacket *pos;
开发者ID:fbavaro56,项目名称:iguanair,代码行数:66,代码来源:device-interface.c

示例8: sendData

void Serveur::leave(QString chan)
{
    sendData(parseCommande("/part "+chan+ " "+msgQuit));
}
开发者ID:Caponecoin,项目名称:capomaster,代码行数:4,代码来源:serveur.cpp

示例9: switch

void eDVBCISlot::process_tpdu(unsigned char tpdu_tag, __u8* data, int asn_data_length, int con_id)
{
	switch (tpdu_tag)
	{
		case T_C_T_C_REPLY:
			printf("Got CTC Replay (slot %d, con %d)\n", getSlotID(), connection_id);

			tx_time.tv_sec = 0;

			state = stateInserted;

			//answer with data last (and if we have with data)
			sendData(NULL, 0);

			break;
		case T_DELETE_T_C:
//FIXME: close sessions etc; reset ?
//we must answer here with t_c_replay
			printf("Got \"Delete Transport Connection\" from module ->currently not handled!\n");
			break;
		case T_D_T_C_REPLY:
			printf("Got \"Delete Transport Connection Replay\" from module!\n");
			break;
		case T_REQUEST_T_C:
			printf("Got \"Request Transport Connection\" from Module ->currently not handled!\n");
			break;
		case T_DATA_MORE:
		{
			int new_data_length = receivedLen + asn_data_length;
			printf("Got \"Data More\" from Module\n");
			__u8 *new_data_buffer = (__u8*) realloc(receivedData, new_data_length);
			receivedData = new_data_buffer;
			memcpy(receivedData + receivedLen, data, asn_data_length);
			receivedLen = new_data_length;
			tx_time.tv_sec = 0;
			break;
		}
		case T_DATA_LAST:
#ifdef x_debug
			printf("Got \"Data Last\" from Module\n");
#endif
			tx_time.tv_sec = 0;
			/* single package */
			if (receivedData == NULL)
			{
				printf("->single package\n");
#ifdef x_debug
				printf("calling receiveData with data (len %d)> ", asn_data_length);
				for (int i = 0;i < asn_data_length; i++)
					printf("%02x ", data[i]);
				printf("\n");
#endif
				eDVBCISession::receiveData(this, data, asn_data_length);
				eDVBCISession::pollAll();
			}
			else
			{
				/* chained package */
				int new_data_length = receivedLen + asn_data_length;
				printf("->chained data\n");
				__u8 *new_data_buffer = (__u8*) realloc(receivedData, new_data_length);
				receivedData = new_data_buffer;
				memcpy(receivedData + receivedLen, data, asn_data_length);
				receivedLen = new_data_length;
#ifdef x_debug
				printf("calling receiveData with data (len %d)> ", asn_data_length);
				for (int i = 0;i < receivedLen; i++)
					printf("%02x ", receivedData[i]);
				printf("\n");
#endif
				eDVBCISession::receiveData(this, receivedData, receivedLen);
				eDVBCISession::pollAll();
//fixme: must also be moved in e2 behind the data processing ;)
				free(receivedData);
				receivedData = NULL;
				receivedLen = 0;
			}
			break;
		case T_SB:
		{
#ifdef x_debug
			printf("Got \"SB\" from Module\n");
#endif
			if (data[0] & 0x80)
			{
				printf("->data ready (%d)\n", getSlotID());
				// send the RCV and ask for the data
				unsigned char send_data[5];
				send_data[0] = getSlotID();
				send_data[1] = connection_id;
				send_data[2] = T_RCV;
				send_data[3] = 1;
				send_data[4] = connection_id;
				write(fd, send_data, 5);
				gettimeofday(&tx_time, 0);
			}
			else
			{
				tx_time.tv_sec = 0;
			}
//.........这里部分代码省略.........
开发者ID:dazulrich,项目名称:dvbapp,代码行数:101,代码来源:dvbci.cpp

示例10: switch

// move one servo at goal position 0 - 1024
void HerkulexClass::moveOne(int servoID, int Goal, int pTime, int iLed)
{
  if (Goal > 1023 || Goal < 0) return;              // speed (goal) non correct
  if ((pTime <0) || (pTime > 2856)) return;

  // Position definition
  int posLSB=Goal & 0X00FF;								// MSB Pos
  int posMSB=(Goal & 0XFF00) >> 8;						// LSB Pos

  //led 
  int iBlue=0;
  int iGreen=0;
  int iRed=0;
  switch (iLed) {
  case 1:
    iGreen=1;
    break;
  case 2:
    iBlue=1;
    break;
  case 3:
    iRed=1;
    break;
  }
  int SetValue=iGreen*4+iBlue*8+iRed*16;	//assign led value 

  playTime=int((float)pTime/11.2);			// 8. Execution time

  pSize = 0x0C;          			    	// 3.Packet size 7-58
  cmd   = HSJOG;              				// 5. CMD

  data[0]=posLSB;               			// 8. speedLSB
  data[1]=posMSB;               			// 9. speedMSB
  data[2]=SetValue;                         // 10. Mode=0;
  data[3]=servoID;                    		// 11. ServoID

    pID=servoID^playTime;

  lenghtString=4;             				// lenghtData

  ck1=checksum1(data,lenghtString);			//6. Checksum1
  ck2=checksum2(ck1);						//7. Checksum2

  pID=servoID;

  dataEx[0] = 0xFF;				// Packet Header
  dataEx[1] = 0xFF;				// Packet Header	
  dataEx[2] = pSize;	 		// Packet Size
  dataEx[3] = pID;				// Servo ID
  dataEx[4] = cmd;				// Command Ram Write
  dataEx[5] = ck1;				// Checksum 1
  dataEx[6] = ck2;				// Checksum 2
  dataEx[7] = playTime;  		// Execution time	
  dataEx[8] = data[0];
  dataEx[9] = data[1];
  dataEx[10] = data[2];
  dataEx[11] = data[3];

  sendData(dataEx, pSize);

}
开发者ID:MechanicalCoder,项目名称:Prosthetic-Hands,代码行数:62,代码来源:Herkulex.cpp

示例11: throw

unsigned NetClient::sendString(const std::string &s) throw(const SocketException &)
{
  return sendData(s.data(), s.length());
}
开发者ID:AndrewHires,项目名称:Solo,代码行数:4,代码来源:NetClient.cpp

示例12: expanderReset

void expanderReset(void)
{
	sendData(0xF);
}
开发者ID:BGCX261,项目名称:zhonx3-git,代码行数:4,代码来源:pcf8574.c

示例13: sendData

int Client::sendData(SmartCom::string data)
{
	return sendData(data.c_str());
}
开发者ID:12019,项目名称:card-reader,代码行数:4,代码来源:Client.cpp

示例14: if

void Irc::parse(QString raw) {
  if (raw.startsWith(':'))
    raw = raw.right(raw.length() - 1);

#ifdef COLOR_WIPE
  QString xraw; int len = 0; int olen = raw.length();
  // dirty but useful color removal code
  do {
    do {
      if ( raw [len] == '\003' ) { // color, veo muuucho color
        len += 2;
        if ( raw [len].isNumber() ) len++;
        if ( raw [len] == ',' && raw [len+1].isDigit() ) { // color, veo aúuuun más color
          len += 2;
          if ( raw [len].isNumber() ) len++;
        }
      } else if ( raw [len] == '\002' || raw [len] == '\026' || raw [len] == '\035' ) // blablalba
        len++;
    } while ( raw [len] == '\003' || raw [len] == '\002'|| raw [len] == '\026'||
              raw [len] == '\035' ); // esto es una guarrada pero evita varios control codes consecutivos
      xraw.append(raw[len]);
      len++;
  } while( len < olen );
  raw = xraw;
#endif

  QStringList matrix = raw.split(' ');
  if( matrix[0] == "PING" ) { // Recibido ping, pongoneamos.
    sendData("PONG " + matrix[1]);
    emit PingPong();

  } else if ( matrix[0] == "ERROR" ) { // error de conexion, whichever
    emit connError(raw.right(raw.length() - 7)); //quita el "ERROR :" del principio y deja el msj limpio

  } else if ( matrix[1] == "PRIVMSG" || matrix[1] == "NOTICE" ) {
    QString nick = matrix[0].left(matrix[0].indexOf('!'));
    QString message = raw.right((raw.length() - 2) - raw.indexOf(" :"));
    QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" PRIVMSG") - nick.length()));

    if ( matrix[1] == "PRIVMSG" ) {
      if ( matrix[2].startsWith("#") ) { // mensaje de canal
        if ( message.startsWith("\001") ) // /ctcp
          if ( message.startsWith("\001ACTION ")) // me
            emit chanme ( nick, mask, matrix[2], message.right((message.length() - 8)) );
          else
            emit chanctcp ( nick, mask, matrix[2], message.right((message.length() - 1)) );
        else
          emit chanmsg ( nick, mask, matrix[2], message );
      } else { // mensaje en privado
        if ( message.startsWith("\001") ) // /me
          if ( message.startsWith("\001ACTION ")) // me
            emit queryme ( nick, mask, message.right((message.length() - 8)) );
          else
            emit queryctcp ( nick, mask, message.right((message.length() - 1)) );
        else
          emit querymsg ( nick, mask, message );
      }
    } else if ( matrix[1] == "NOTICE" ) {
      if ( matrix[2].startsWith("#") ) { // notice en canal
        emit channotice ( nick, mask, matrix[2], message );
      } else { // notice en privado
        emit querynotice ( nick, mask, message );
      }
    }
  } else if ( matrix[1] == "JOIN" ) { //join a un canal
    QString nick = matrix[0].left(matrix[0].indexOf('!'));
    QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" JOIN") - nick.length()));
    if( matrix[2].startsWith(':') )
        emit join(nick,mask,matrix[2].right( matrix[2].length() -1 ));
      else
        emit join(nick,mask,matrix[2]);

  } else if ( matrix[1] == "PART" || matrix[1] == "QUIT" ) { //handled together
    QString message = "", chan = "";
    if (raw.indexOf(" :") != -1)
      message = raw.right((raw.length() - 2) - raw.indexOf(" :"));
    QString nick = matrix[0].left(matrix[0].indexOf('!'));
    QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" PART") - nick.length()));

    if ( matrix[1] == "PART" ) {
      QString chan = raw.right((raw.length() - 1) - raw.indexOf(" #"));
      chan = chan.left(chan.indexOf(" :"));
      QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" PART") - nick.length()));
      emit part(nick,mask,chan,message);
    } else if ( matrix[1] == "QUIT" ) {
      QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" QUIT") - nick.length()));
      emit quit(nick,mask,message);
    }
  } else if ( matrix[1] == "NICK" ) {
    QString nick = matrix[0].left(matrix[0].indexOf('!'));
    QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" NICK") - nick.length()));
    QString newnick = raw.right((raw.length() - 2) - raw.indexOf(" :"));
    if (newnick == ownNick)
      emit ownNickChange(newnick);
    emit nickChange(nick,mask,newnick);
  } else if ( matrix[1] == "MODE" ) { // cambio de modo, pero no sé si es de usuario o canal.
    if ( matrix[2].startsWith('#') ) { // c mode
      QString nick = matrix[0].left(matrix[0].indexOf('!'));
      QString mask = matrix[0].mid(matrix[0].indexOf('!') + 1,(matrix[0].indexOf(" MODE") - nick.length()));
      QString chan = matrix[2];
//.........这里部分代码省略.........
开发者ID:neiko,项目名称:bottie,代码行数:101,代码来源:irc.cpp

示例15: oled_flush

void oled_flush()
{
	resetPosition();

	/*shao CHIPSELECT(MODE_DATA)
	{
		debugPin_spi(HIGH);

		// Here we load a byte from the global variable buffer into a fast local variable.
		// This is done while we're waiting for the SPI transfer to complete.
		// Delay cycles is also used to replace loop_until_bit_is_set().
		// In total, we go from ~3.84ms transfer time of the basic loop to ~2.31ms using local variables and delay cycles. (4MHz SPI, 1KB frame buffer)
		// As an added bonus we clear the frame buffer with the extra clock cycles which means we don't have to wait for memset() to clear it later on.
		// The minimum possible transfer time for 4MHz SPI and 1KB frame buffer is 2.048ms. 12.5% overhead (1 cycle to read SPSR, 1 cycle to set SPDR)... not bad :3

		for(uint i=0;i<FRAME_BUFFER_SIZE;i++)
		{
			byte next = oledBuffer[i]; // Load next byte
			oledBuffer[i] = 0x00; // Clear buffer byte

			// At max speed SPI takes 16 cycles to send a byte
			// 8 cycles were used to increment the loop counter, compare the counter, loading next byte and clearing buffer byte
			// 8 cycles are left
			//shao __builtin_avr_delay_cycles(8);

			SPSR; // Need to read register to clear SPIF

			SPDR = next; // Send byte
		}

		// After sending the last byte the for loop exits, so we need to wait for the transfer to finish here
		//shao __builtin_avr_delay_cycles(14);
		SPSR;
		//loop_until_bit_is_set(SPSR, SPIF);

		// Original method
		//for(uint i=0;i<FRAME_BUFFER_SIZE;i++)
		//	spi_transfer_nr(oledBuffer[i]);

		debugPin_spi(LOW);
	}*/

    /*shao if (watchConfig.display180) 
    {
        for (uint i = (FRAME_BUFFER_SIZE-1); i >=0; i--) 
        {
            byte next = oledBuffer[i]; // Load next byte
            oledBuffer[i] = 0x00; // Clear buffer byte

            sendData(next);
        }
    }else
    {*/
        for (uint i = 0; i < FRAME_BUFFER_SIZE; i++) 
        {
            //Serial.print(oledBuffer[i]);
            byte next = oledBuffer[i]; // Load next byte
            oledBuffer[i] = 0x00; // Clear buffer byte

            sendData(next);
        }
    //shao }
}
开发者ID:fibasile,项目名称:Xadow-digital-watch,代码行数:63,代码来源:devices_oled.cpp


注:本文中的sendData函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。