18 #include <ros/node_handle.h> 28 #include <boost/thread/thread.hpp> 29 #include <boost/scoped_ptr.hpp> 50 if(
g_sdhx->init(req.port, req.min_pwm0, req.min_pwm1, req.max_pwm0, req.max_pwm1)){
71 void handleRecover(
const Trigger::Request & req, Trigger::Response & res){
75 }
else if(
g_sdhx->isInitialized()) {
81 res.message =
"Not initialized";
97 void handleInitPins(
const InitPins::Request & req, InitPins::Response & res){
98 res.success = g_gpio.
init();
100 for(
size_t i = 0; i < req.input_pins_length; ++i)
101 if(!g_gpio.
setInput(req.input_pins[i]))
104 for(
size_t i = 0; i < req.output_pins_length; ++i)
105 if(!g_gpio.
setOutput(req.output_pins[i]))
112 res.success = g_gpio.
setPins(req.set_pins) | g_gpio.
clearPins(req.clear_pins);
114 res.success = res.success && (state & req.set_pins) == req.set_pins && (state & req.clear_pins) == 0;
132 void handleSetPWM(
const SetPWM::Request & req, SetPWM::Response & res){
134 if(req.pins_length != req.levels_length){
140 for(
size_t i = 0; i < req.pins_length; ++i)
141 if(!g_gpio.
pwmPin(req.pins[i],req.levels[i]))
155 if(
g_sdhx->getData(j.position_cdeg, j.velocity_cdeg_s, j.current_100uA, boost::chrono::seconds(1))) g_status_msg.
status |= g_status_msg.
MASK_FINGER_READY;
162 g_pub.
publish( &g_status_msg );
170 int main(
int argc,
char** argv){
174 if(argc != 2 && argc != 3){
175 std::cerr <<
"Usage: " << argv[0] <<
" port@baud [looprate]" << std::endl;
179 rate = boost::lexical_cast<
double>(argv[2]);
181 std::cerr <<
"Rate must be postive" << std::endl;
186 std::string dev(argv[1]);
202 boost::chrono::duration<double> double_interval(1.0/rate);
203 boost::chrono::milliseconds interval = boost::chrono::duration_cast<boost::chrono::milliseconds>(double_interval);
204 boost::chrono::steady_clock::time_point next = boost::chrono::steady_clock::now();
209 boost::this_thread::sleep_until(next);
cob_hand_bridge::Status g_status_msg
ros::ServiceServer< UpdatePins::Request, UpdatePins::Response > g_srv_update_pins("update_pins",&handleUpdatePins)
ros::Subscriber< cob_hand_bridge::JointValues > g_sub_command("command", handleJointCommand)
ros::Subscriber< std_msgs::UInt8 > g_sub_clear_pin("clear_pin", handleClearPin)
void publish(const boost::shared_ptr< M > &message) const
bool setInput(uint32_t pin)
ros::Subscriber< std_msgs::UInt8 > g_sub_set_pin("set_pin", handleSetPin)
void handleInitFinger(const InitFinger::Request &req, InitFinger::Response &res)
void handleUpdatePins(const UpdatePins::Request &req, UpdatePins::Response &res)
bool subscribe(Subscriber< MsgT > &s)
boost::scoped_ptr< SDHX > g_sdhx
bool setOutput(uint32_t pin)
bool pwmPin(uint32_t pin, float level)
void handleJointCommand(const cob_hand_bridge::JointValues &j)
ros::ServiceServer< SetPWM::Request, SetPWM::Response > g_srv_set_pwm("set_pwm",&handleSetPWM)
void handleRecover(const Trigger::Request &req, Trigger::Response &res)
ros::Publisher g_pub("status",&g_status_msg)
ros::NodeHandle_< HandBridgeHardware > g_nh
int16_t velocity_cdeg_s[2]
int main(int argc, char **argv)
ros::ServiceServer< InitFinger::Request, InitFinger::Response > g_srv_init_finger("init_finger",&handleInitFinger)
void handleSetPin(const std_msgs::UInt8 &mgs)
void handleHaltFinger(const Trigger::Request &req, Trigger::Response &res)
cob_hand_bridge::JointValues joints
ros::ServiceServer< InitPins::Request, InitPins::Response > g_srv_init_pins("init_pins",&handleInitPins)
void handleInitPins(const InitPins::Request &req, InitPins::Response &res)
bool setPins(uint32_t pins)
bool initFinger(const InitFinger::Request &req)
InitFinger::Request g_init_req
bool advertise(Publisher &p)
bool clearPins(uint32_t pins)
void handleClearPin(const std_msgs::UInt8 &mgs)
ros::ServiceServer< Trigger::Request, Trigger::Response > g_srv_halt_finger("halt",&handleHaltFinger)
bool advertiseService(ServiceServer< MReq, MRes > &srv)
void handleSetPWM(const SetPWM::Request &req, SetPWM::Response &res)
ros::ServiceServer< Trigger::Request, Trigger::Response > g_srv_recover("recover",&handleRecover)
bool writePin(uint32_t pin, uint32_t level)
bool isInitialized() const