55
66namespace hande_driver {
77
8+ constexpr auto kGripperPositionOpenedThreshold = 230 ;
9+ constexpr auto kGripperPositionClosedThreshold = 13 ;
10+
811ProtocolLogic::ProtocolLogic ()
912: status_(0 )
1013, activation_status_(GRIPPER_RESET)
@@ -24,41 +27,24 @@ ProtocolLogic::~ProtocolLogic(){
2427}
2528
2629void ProtocolLogic::reset (){
27- communication_.output_registers_ [0 ] = 0x0000 ;
28- communication_.output_registers_ [1 ] = 0x0000 ;
29- communication_.output_registers_ [2 ] = 0x0000 ;
30+ communication_.clear_output_bytes ();
3031
31- communication_.output_registers_ [kActionRequestByte / 2 ] = bit_set_to (
32- communication_.output_registers_ [kActionRequestByte / 2 ],
33- (kActionRequestByte % 2 == 0 ? 8 : 0 ) + kActivatePositionByte ,
34- DEACTIVATE_GRIPPER);
32+ write_action_bit (kActivatePositionByte , DEACTIVATE_GRIPPER);
3533
3634 communication_.read_write_registers ();
3735}
3836
3937void ProtocolLogic::set (){
40- communication_.output_registers_ [0 ] = 0x0000 ;
41- communication_.output_registers_ [1 ] = 0x0000 ;
42- communication_.output_registers_ [2 ] = 0x0000 ;
38+ communication_.clear_output_bytes ();
4339
44- communication_.output_registers_ [kActionRequestByte / 2 ] = bit_set_to (
45- communication_.output_registers_ [kActionRequestByte / 2 ],
46- (kActionRequestByte % 2 == 0 ? 8 : 0 ) + kActivatePositionByte ,
47- ACTIVATE_GRIPPER);
40+ write_action_bit (kActivatePositionByte , ACTIVATE_GRIPPER);
4841
4942 communication_.read_write_registers ();
5043}
5144
5245void ProtocolLogic::auto_release (){
53- communication_.output_registers_ [kActionRequestByte / 2 ] = bit_set_to (
54- communication_.output_registers_ [kActionRequestByte / 2 ],
55- (kActionRequestByte % 2 == 0 ? 8 : 0 ) + kAutomaticReleasePositionByte ,
56- EMERGENCY_AUTO_RELEASE);
57-
58- communication_.output_registers_ [kActionRequestByte / 2 ] = bit_set_to (
59- communication_.output_registers_ [kActionRequestByte / 2 ],
60- (kActionRequestByte % 2 == 0 ? 8 : 0 ) + kAutomaticReleasePositionByte ,
61- OPENING);
46+ write_action_bit (kAutomaticReleasePositionByte , EMERGENCY_AUTO_RELEASE);
47+ write_action_bit (kAutoReleaseDirectionPositionByte , OPENING);
6248
6349 communication_.read_write_registers ();
6450}
@@ -69,22 +55,17 @@ void ProtocolLogic::activate(){
6955}
7056
7157void ProtocolLogic::go_to (uint8_t position, uint8_t velocity, uint8_t force){
72- communication_.output_registers_ [kActionRequestByte / 2 ] = bit_set_to (
73- communication_.output_registers_ [kActionRequestByte / 2 ],
74- (kActionRequestByte % 2 == 0 ? 8 : 0 ) + kGoToPositionByte ,
75- GO_TO_REQ_POS);
58+ write_action_bit (kGoToPositionByte , GO_TO_REQ_POS);
7659
77- communication_.output_registers_ [1 ] = uint16_t (0x00 << 8 | position);
78- communication_.output_registers_ [2 ] = uint16_t (velocity << 8 | force);
60+ communication_.set_output_byte (OUTPUT_BYTES_POSITION_REQUEST, position);
61+ communication_.set_output_byte (OUTPUT_BYTES_SPEED, velocity);
62+ communication_.set_output_byte (OUTPUT_BYTES_FORCE, force);
7963
8064 communication_.read_write_registers ();
8165}
8266
8367void ProtocolLogic::stop (){
84- communication_.output_registers_ [kActionRequestByte / 2 ] = bit_set_to (
85- communication_.output_registers_ [kActionRequestByte / 2 ],
86- (kActionRequestByte % 2 == 0 ? 8 : 0 ) + kGoToPositionByte ,
87- STOP);
68+ write_action_bit (kGoToPositionByte , STOP);
8869
8970 communication_.read_write_registers ();
9071}
@@ -109,11 +90,12 @@ bool ProtocolLogic::is_stopped(){
10990}
11091
11192bool ProtocolLogic::is_closed (){
112- return position_ <= 13 ;
93+ return position_ >= kGripperPositionOpenedThreshold ;
94+
11395}
11496
11597bool ProtocolLogic::is_opened (){
116- return position_ >= 230 ;
98+ return position_ <= kGripperPositionClosedThreshold ;
11799}
118100
119101bool ProtocolLogic::obj_detected (){
@@ -136,30 +118,29 @@ uint8_t ProtocolLogic::get_current(){
136118void ProtocolLogic::refresh_registers (){
137119 communication_.read_write_registers ();
138120
139- read_register ( status_, kStatusByte );
121+ status_ = communication_. get_input_byte (INPUT_BYTES_GRIPPER_STATUS );
140122
141123 activation_status_ = (ActivationStatus)((status_>>kActivationStatusPositionByte ) & 1u );
142124 action_status_ = (ActionStatus)((status_>>kActionStatusPositionByte ) & 1u );
143125 gripper_status_ = (GripperStatus)((status_>>kGripperStatusPositionByte ) & 3u );
144126 object_detection_status_ = (ObjectDetectionStatus)((status_>>kObjectDetectionStatusPositionByte ) & 3u );
145127
146- read_register ( fault_status_, kFaultStatusByte );
128+ fault_status_ = communication_. get_input_byte (INPUT_BYTES_FAULT_STATUS );
147129 // To bo specified
148130
149- read_register ( position_request_echo_, kPositionRequestEchoByte );
150- read_register ( position_, kPositionByte );
151- read_register ( current_, kCurrentByte );
131+ position_request_echo_ = communication_. get_input_byte (INPUT_BYTES_POSITION_REQUEST_ECHO );
132+ position_ = communication_. get_input_byte (INPUT_BYTES_POSITION );
133+ current_ = communication_. get_input_byte (INPUT_BYTES_CURRENT );
152134}
153135
154- void ProtocolLogic::read_register (uint8_t ®, uint8_t byte ){
155- // TODO: add byte references in constructor
156- reg = byte % 2 == 1 ?
157- communication_.input_registers_ [byte / 2 ] & 255u :
158- communication_.input_registers_ [byte / 2 ] >> 8u ;
136+ void ProtocolLogic::write_action_bit (uint8_t position_bit, bool value ){
137+ // TODO: change byte from uint to &uint
138+ // byte = bit_set_to(byte, position, value)
139+ communication_.output_registers_ [ 0 ] = bit_set_to (
140+ communication_.output_registers_ [ 0 ], 8 + position_bit, value) ;
159141}
160142
161143inline uint ProtocolLogic::bit_set_to (uint number, uint n, bool x) {
162- // TODO: include byte/bit logic
163144 return (number & ~((uint)1 << n)) | ((uint)x << n);
164145}
165146} // namespace hande_driver
0 commit comments