Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions include/dynamixel_sdk/dynamixel_sdk.h
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
/*******************************************************************************
* Copyright 2017 ROBOTIS CO., LTD.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/

////////////////////////////////////////////////////////////////////////////////
/// @file The file that includes whole Dynamixel SDK libraries
/// @author Zerom, Leon (RyuWoon Jung)
////////////////////////////////////////////////////////////////////////////////

#ifndef DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_DYNAMIXELSDK_H_
#define DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_DYNAMIXELSDK_H_


#include "group_bulk_read.h"
#include "group_bulk_write.h"
#include "group_sync_read.h"
#include "group_sync_write.h"
#include "packet_handler.h"
#include "port_handler.h"


#endif /* DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_DYNAMIXELSDK_H_ */
167 changes: 167 additions & 0 deletions include/dynamixel_sdk/group_bulk_read.h
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
/*******************************************************************************
* Copyright 2017 ROBOTIS CO., LTD.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/

////////////////////////////////////////////////////////////////////////////////
/// @file The file for Dynamixel Bulk Read
/// @author Zerom, Leon (RyuWoon Jung)
////////////////////////////////////////////////////////////////////////////////

#ifndef DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_GROUPBULKREAD_H_
#define DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_GROUPBULKREAD_H_


#include <map>
#include <vector>
#include "port_handler.h"
#include "packet_handler.h"

namespace dynamixel
{

////////////////////////////////////////////////////////////////////////////////
/// @brief The class for reading multiple Dynamixel data from different addresses with different lengths at once
////////////////////////////////////////////////////////////////////////////////
class WINDECLSPEC GroupBulkRead
{
private:
PortHandler *port_;
PacketHandler *ph_;

std::vector<uint8_t> id_list_;
std::map<uint8_t, uint16_t> address_list_; // <id, start_address>
std::map<uint8_t, uint16_t> length_list_; // <id, data_length>
std::map<uint8_t, uint8_t *> data_list_; // <id, data>
std::map<uint8_t, uint8_t *> error_list_; // <id, error>

bool last_result_;
bool is_param_changed_;

uint8_t *param_;

void makeParam();

public:
////////////////////////////////////////////////////////////////////////////////
/// @brief The function that Initializes instance for Bulk Read
/// @param port PortHandler instance
/// @param ph PacketHandler instance
////////////////////////////////////////////////////////////////////////////////
GroupBulkRead(PortHandler *port, PacketHandler *ph);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that calls clearParam function to clear the parameter list for Bulk Read
////////////////////////////////////////////////////////////////////////////////
~GroupBulkRead() { clearParam(); }

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that returns PortHandler instance
/// @return PortHandler instance
////////////////////////////////////////////////////////////////////////////////
PortHandler *getPortHandler() { return port_; }

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that returns PacketHandler instance
/// @return PacketHandler instance
////////////////////////////////////////////////////////////////////////////////
PacketHandler *getPacketHandler() { return ph_; }

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that adds id, start_address, data_length to the Bulk Read list
/// @param id Dynamixel ID
/// @param start_address Address of the data for read
/// @data_length Length of the data for read
/// @return false
/// @return when the ID exists already in the list
/// @return or true
////////////////////////////////////////////////////////////////////////////////
bool addParam (uint8_t id, uint16_t start_address, uint16_t data_length);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that removes id from the Bulk Read list
/// @param id Dynamixel ID
////////////////////////////////////////////////////////////////////////////////
void removeParam (uint8_t id);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that clears the Bulk Read list
////////////////////////////////////////////////////////////////////////////////
void clearParam ();

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that transmits the Bulk Read instruction packet which might be constructed by GroupBulkRead::addParam function
/// @return COMM_NOT_AVAILABLE
/// @return when the list for Bulk Read is empty
/// @return or the other communication results which come from PacketHandler::bulkReadTx
////////////////////////////////////////////////////////////////////////////////
int txPacket();

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that receives the packet which might be come from the Dynamixel
/// @return COMM_NOT_AVAILABLE
/// @return when the list for Bulk Read is empty
/// @return COMM_RX_FAIL
/// @return when there is no packet recieved
/// @return COMM_SUCCESS
/// @return when there is packet recieved
/// @return or the other communication results
////////////////////////////////////////////////////////////////////////////////
int rxPacket();

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that transmits and receives the packet which might be come from the Dynamixel
/// @return COMM_RX_FAIL
/// @return when there is no packet recieved
/// @return COMM_SUCCESS
/// @return when there is packet recieved
/// @return or the other communication results which come from GroupBulkRead::txPacket or GroupBulkRead::rxPacket
////////////////////////////////////////////////////////////////////////////////
int txRxPacket();

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that checks whether there are available data which might be received by GroupBulkRead::rxPacket or GroupBulkRead::txRxPacket
/// @param id Dynamixel ID
/// @param address Address of the data for read
/// @param data_length Length of the data for read
/// @return false
/// @return when there are no data available
/// @return or true
////////////////////////////////////////////////////////////////////////////////
bool isAvailable (uint8_t id, uint16_t address, uint16_t data_length);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that gets the data which might be received by GroupBulkRead::rxPacket or GroupBulkRead::txRxPacket
/// @param id Dynamixel ID
/// @param address Address of the data for read
/// @data_length Length of the data for read
/// @return data value
////////////////////////////////////////////////////////////////////////////////
uint32_t getData (uint8_t id, uint16_t address, uint16_t data_length);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that gets the error which might be received by GroupBulkRead::rxPacket or GroupBulkRead::txRxPacket
/// @param id Dynamixel ID
/// @error error of Dynamixel
/// @return true
/// @return when Dynamixel returned specific error byte
/// @return or false
////////////////////////////////////////////////////////////////////////////////
bool getError (uint8_t id, uint8_t* error);
};

}


#endif /* DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_GROUPBULKREAD_H_ */
127 changes: 127 additions & 0 deletions include/dynamixel_sdk/group_bulk_write.h
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
/*******************************************************************************
* Copyright 2017 ROBOTIS CO., LTD.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/

////////////////////////////////////////////////////////////////////////////////
/// @file The file for Dynamixel Bulk Write
/// @author Zerom, Leon (RyuWoon Jung)
////////////////////////////////////////////////////////////////////////////////

#ifndef DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_GROUPBULKWRITE_H_
#define DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_GROUPBULKWRITE_H_


#include <map>
#include <vector>
#include "port_handler.h"
#include "packet_handler.h"

namespace dynamixel
{

////////////////////////////////////////////////////////////////////////////////
/// @brief The class for writing multiple Dynamixel data from different addresses with different lengths at once
////////////////////////////////////////////////////////////////////////////////
class WINDECLSPEC GroupBulkWrite
{
private:
PortHandler *port_;
PacketHandler *ph_;

std::vector<uint8_t> id_list_;
std::map<uint8_t, uint16_t> address_list_; // <id, start_address>
std::map<uint8_t, uint16_t> length_list_; // <id, data_length>
std::map<uint8_t, uint8_t *> data_list_; // <id, data>

bool is_param_changed_;

uint8_t *param_;
uint16_t param_length_;

void makeParam();

public:
////////////////////////////////////////////////////////////////////////////////
/// @brief The function that Initializes instance for Bulk Write
/// @param port PortHandler instance
/// @param ph PacketHandler instance
////////////////////////////////////////////////////////////////////////////////
GroupBulkWrite(PortHandler *port, PacketHandler *ph);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that calls clearParam function to clear the parameter list for Bulk Write
////////////////////////////////////////////////////////////////////////////////
~GroupBulkWrite() { clearParam(); }

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that returns PortHandler instance
/// @return PortHandler instance
////////////////////////////////////////////////////////////////////////////////
PortHandler *getPortHandler() { return port_; }

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that returns PacketHandler instance
/// @return PacketHandler instance
////////////////////////////////////////////////////////////////////////////////
PacketHandler *getPacketHandler() { return ph_; }

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that adds id, start_address, data_length to the Bulk Write list
/// @param id Dynamixel ID
/// @param start_address Address of the data for write
/// @param data_length Length of the data for write
/// @return false
/// @return when the ID exists already in the list
/// @return or true
////////////////////////////////////////////////////////////////////////////////
bool addParam (uint8_t id, uint16_t start_address, uint16_t data_length, uint8_t *data);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that removes id from the Bulk Write list
/// @param id Dynamixel ID
////////////////////////////////////////////////////////////////////////////////
void removeParam (uint8_t id);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that changes the data for write in id -> start_address -> data_length to the Bulk Write list
/// @param id Dynamixel ID
/// @param start_address Address of the data for write
/// @param data_length Length of the data for write
/// @param data for replacement
/// @return false
/// @return when the ID doesn't exist in the list
/// @return or true
////////////////////////////////////////////////////////////////////////////////
bool changeParam (uint8_t id, uint16_t start_address, uint16_t data_length, uint8_t *data);

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that clears the Bulk Write list
////////////////////////////////////////////////////////////////////////////////
void clearParam ();

////////////////////////////////////////////////////////////////////////////////
/// @brief The function that transmits the Bulk Write instruction packet which might be constructed by GroupBulkWrite::addParam function
/// @return COMM_NOT_AVAILABLE
/// @return when the list for Bulk Write is empty
/// @return when Protocol1.0 has been used
/// @return or the other communication results which come from PacketHandler::bulkWriteTxOnly
////////////////////////////////////////////////////////////////////////////////
int txPacket();
};

}


#endif /* DYNAMIXEL_SDK_INCLUDE_DYNAMIXEL_SDK_GROUPBULKWRITE_H_ */
Loading