#include #include #include #include #include "SvrData.h" bool SvrData::instanceFlag = false; SvrData* SvrData::single = 0; SvrData::SvrData(void) { velocity = 20; accelaration = 10; robot.joints = LBR_MNJ; double maxVelJnt[] = {110.0,110.0,128.0,128.0,204.0,184.0,184.0}; double maxAccJnt[] = {1.0,1.0,1.0,1.0,2.0,1.0,1.0}; double maxTrqJnt[] = {176.0,176.0,100.0,100.0,100.0,38.0,38.0}; double maxRangeJnt[] = {170.0,120.0,170.0,120.0,170.0,120.0,170.0}; for (int i = 0; i < robot.joints; ++i) { robot.max.velocity[i] = maxVelJnt[i]; robot.max.accelaration[i] = maxAccJnt[i]; robot.max.torque[i] = maxTrqJnt[i]; robot.max.range[i] = maxRangeJnt[i]; } // init mutex for database if (pthread_mutex_init(&dataLock, NULL) != 0) printf("mutex init failed\n"); } SvrData::~SvrData() { pthread_mutex_destroy(&dataLock); } SvrData* SvrData::getInstance () { if (instanceFlag) return single; single = new SvrData(); instanceFlag = true; return single; } void SvrData::lock() { pthread_mutex_lock(&dataLock); } void SvrData::unlock() { pthread_mutex_unlock(&dataLock); } int SvrData::getMessuredJointPos(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(messured.jointPos)) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,messured.jointPos,size); pthread_mutex_unlock(&dataLock); return 0; } int SvrData::getMessuredCartPos (float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(messured.cartPos)) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,messured.cartPos,size); pthread_mutex_unlock(&dataLock); return 0 ; } int SvrData::getMessuredJacobian(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(messured.jacobian)) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,messured.jacobian,size); pthread_mutex_unlock(&dataLock); return 0; } int SvrData::getMessuredForceTorque(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(messured.forceAndTorque)) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,messured.forceAndTorque,size); pthread_mutex_unlock(&dataLock); return 0; } int SvrData::getCommandedJointPos(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(commanded.jointPos)) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,commanded.jointPos,size); pthread_mutex_unlock(&dataLock); return 0; } int SvrData::getCommandedCartPos (float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(commanded.cartPos)) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,commanded.cartPos,size); pthread_mutex_unlock(&dataLock); return 0; } float SvrData::getMaxTorque(unsigned int pos) { float retval = -1.0f; if (pos >= robot.joints) return retval; pthread_mutex_lock(&dataLock); retval = robot.max.torque[pos-1]; pthread_mutex_unlock(&dataLock); return retval; } int SvrData::getMaxTorque(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(float)* robot.joints) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,robot.max.torque,size); pthread_mutex_unlock(&dataLock); return 0; } float SvrData::getMaxAcceleration(unsigned int pos) { float retval = -1.0f; if (pos >= robot.joints) return retval; pthread_mutex_lock(&dataLock); retval = robot.max.accelaration[pos-1]; pthread_mutex_unlock(&dataLock); return retval; } int SvrData::getMaxAcceleration(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(float)* robot.joints) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,robot.max.accelaration,size); pthread_mutex_unlock(&dataLock); return 0; } Vec SvrData::getMaxAcceleration() { Vec buff; pthread_mutex_lock(&dataLock); buff = robot.max.accelaration; pthread_mutex_unlock(&dataLock); return buff; } float SvrData::getMaxRange(unsigned int pos) { float retval = -1.0f; if (pos >= robot.joints) return retval; pthread_mutex_lock(&dataLock); retval = robot.max.range[pos-1]; pthread_mutex_unlock(&dataLock); return retval; } int SvrData::getMaxRange(float* data, size_t size) { if (data == NULL) return -EINVAL; if (size != sizeof(float)* robot.joints) return -EINVAL; pthread_mutex_lock(&dataLock); memcpy(data,robot.max.range,size); pthread_mutex_unlock(&dataLock); return 0; } unsigned int SvrData::getJoints() { unsigned int retval = 0; pthread_mutex_lock(&dataLock); retval = robot.joints; pthread_mutex_unlock(&dataLock); return retval; }