Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
etherlabmaster
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ICS Control System Infrastructure
etherlabmaster
Commits
05134700
Commit
05134700
authored
14 years ago
by
Florian Pose
Browse files
Options
Downloads
Patches
Plain Diff
Always write PDO mapping/assignment.
parent
77a5a7ed
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
TODO
+0
-1
0 additions, 1 deletion
TODO
master/fsm_pdo.c
+55
-46
55 additions, 46 deletions
master/fsm_pdo.c
master/fsm_pdo_entry.c
+0
-11
0 additions, 11 deletions
master/fsm_pdo_entry.c
with
55 additions
and
58 deletions
TODO
+
0
−
1
View file @
05134700
...
@@ -76,7 +76,6 @@ Future issues:
...
@@ -76,7 +76,6 @@ Future issues:
- Implement reading from stream for soe_write.
- Implement reading from stream for soe_write.
* Simplify master fsm by introducing a common request state to handle external
* Simplify master fsm by introducing a common request state to handle external
requests (replace write_sii, sdo_request, etc).
requests (replace write_sii, sdo_request, etc).
* Write PDO mapping/assignment by default?
* Remove stdio uses in userspace library?
* Remove stdio uses in userspace library?
Smaller issues:
Smaller issues:
...
...
This diff is collapsed.
Click to expand it.
master/fsm_pdo.c
+
55
−
46
View file @
05134700
...
@@ -376,7 +376,7 @@ void ec_fsm_pdo_conf_state_start(
...
@@ -376,7 +376,7 @@ void ec_fsm_pdo_conf_state_start(
return
;
return
;
}
}
fsm
->
sync_index
=
0xff
;
// next is
zero
fsm
->
sync_index
=
1
;
// next is
2
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
}
}
...
@@ -429,7 +429,8 @@ void ec_fsm_pdo_conf_action_next_sync(
...
@@ -429,7 +429,8 @@ void ec_fsm_pdo_conf_action_next_sync(
}
}
// get first configured PDO
// get first configured PDO
if
(
!
(
fsm
->
pdo
=
ec_fsm_pdo_conf_action_next_pdo
(
fsm
,
&
fsm
->
pdos
.
list
)))
{
if
(
!
(
fsm
->
pdo
=
ec_fsm_pdo_conf_action_next_pdo
(
fsm
,
&
fsm
->
pdos
.
list
)))
{
// no pdos configured
// no pdos configured
ec_fsm_pdo_conf_action_check_assignment
(
fsm
);
ec_fsm_pdo_conf_action_check_assignment
(
fsm
);
return
;
return
;
...
@@ -506,17 +507,30 @@ void ec_fsm_pdo_conf_action_check_mapping(
...
@@ -506,17 +507,30 @@ void ec_fsm_pdo_conf_action_check_mapping(
ec_fsm_pdo_t
*
fsm
/**< PDO configuration state machine. */
ec_fsm_pdo_t
*
fsm
/**< PDO configuration state machine. */
)
)
{
{
if
(
ec_pdo_equal_entries
(
fsm
->
pdo
,
&
fsm
->
slave_pdo
))
{
// check, if slave supports PDO configuration
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"Mapping of PDO 0x%04X"
if
((
fsm
->
slave
->
sii
.
mailbox_protocols
&
EC_MBOX_COE
)
" is already configured correctly.
\n
"
,
fsm
->
pdo
->
index
);
&&
fsm
->
slave
->
sii
.
has_general
ec_fsm_pdo_conf_action_next_pdo_mapping
(
fsm
);
&&
fsm
->
slave
->
sii
.
coe_details
.
enable_pdo_configuration
)
{
// always write PDO mapping
ec_fsm_pdo_entry_start_configuration
(
&
fsm
->
fsm_pdo_entry
,
fsm
->
slave
,
fsm
->
pdo
,
&
fsm
->
slave_pdo
);
fsm
->
state
=
ec_fsm_pdo_conf_state_mapping
;
fsm
->
state
(
fsm
);
// execure immediately
return
;
return
;
}
}
else
if
(
!
ec_pdo_equal_entries
(
fsm
->
pdo
,
&
fsm
->
slave_pdo
))
{
EC_SLAVE_WARN
(
fsm
->
slave
,
"Slave does not support"
" changing the PDO mapping!
\n
"
);
EC_SLAVE_WARN
(
fsm
->
slave
,
""
);
printk
(
"Currently mapped PDO entries: "
);
ec_pdo_print_entries
(
&
fsm
->
slave_pdo
);
printk
(
". Entries to map: "
);
ec_pdo_print_entries
(
fsm
->
pdo
);
printk
(
"
\n
"
);
}
ec_fsm_pdo_entry_start_configuration
(
&
fsm
->
fsm_pdo_entry
,
fsm
->
slave
,
ec_fsm_pdo_conf_action_next_pdo_mapping
(
fsm
);
fsm
->
pdo
,
&
fsm
->
slave_pdo
);
fsm
->
state
=
ec_fsm_pdo_conf_state_mapping
;
fsm
->
state
(
fsm
);
// execure immediately
}
}
/*****************************************************************************/
/*****************************************************************************/
...
@@ -564,46 +578,42 @@ void ec_fsm_pdo_conf_action_check_assignment(
...
@@ -564,46 +578,42 @@ void ec_fsm_pdo_conf_action_check_assignment(
ec_fsm_pdo_t
*
fsm
/**< PDO configuration state machine. */
ec_fsm_pdo_t
*
fsm
/**< PDO configuration state machine. */
)
)
{
{
// check if assignment has to be re-configured
if
((
fsm
->
slave
->
sii
.
mailbox_protocols
&
EC_MBOX_COE
)
if
(
ec_pdo_list_equal
(
&
fsm
->
sync
->
pdos
,
&
fsm
->
pdos
))
{
&&
fsm
->
slave
->
sii
.
has_general
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"PDO assignment for SM%u"
&&
fsm
->
slave
->
sii
.
coe_details
.
enable_pdo_assign
)
{
" is already configured correctly.
\n
"
,
fsm
->
sync_index
);
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
// always write PDO assignment
return
;
if
(
fsm
->
slave
->
master
->
debug_level
)
{
}
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"Setting PDO assignment of SM%u:
\n
"
,
fsm
->
sync_index
);
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
""
);
ec_fsm_pdo_print
(
fsm
);
}
if
(
fsm
->
slave
->
master
->
debug_level
)
{
if
(
ec_sdo_request_alloc
(
&
fsm
->
request
,
2
))
{
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"PDO assignment of SM%u differs:
\n
"
,
fsm
->
state
=
ec_fsm_pdo_state_error
;
fsm
->
sync_index
);
return
;
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
""
);
ec_fsm_pdo_print
(
fsm
);
}
}
// PDO assignment has to be changed. Does the slave support this?
// set mapped PDO count to zero
if
(
!
(
fsm
->
slave
->
sii
.
mailbox_protocols
&
EC_MBOX_COE
)
EC_WRITE_U8
(
fsm
->
request
.
data
,
0
);
// zero PDOs mapped
||
(
fsm
->
slave
->
sii
.
has_general
fsm
->
request
.
data_size
=
1
;
&&
!
fsm
->
slave
->
sii
.
coe_details
.
enable_pdo_assign
))
{
ec_sdo_request_address
(
&
fsm
->
request
,
0x1C10
+
fsm
->
sync_index
,
0
);
EC_SLAVE_WARN
(
fsm
->
slave
,
"Slave does not support assigning PDOs!
\n
"
);
ecrt_sdo_request_write
(
&
fsm
->
request
);
EC_SLAVE_WARN
(
fsm
->
slave
,
""
);
ec_fsm_pdo_print
(
fsm
);
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
return
;
}
if
(
ec_sdo_request_alloc
(
&
fsm
->
request
,
2
))
{
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"Setting number of assigned"
fsm
->
state
=
ec_fsm_pdo_state_error
;
" PDOs to zero.
\n
"
);
fsm
->
state
=
ec_fsm_pdo_conf_state_zero_pdo_count
;
ec_fsm_coe_transfer
(
fsm
->
fsm_coe
,
fsm
->
slave
,
&
fsm
->
request
);
ec_fsm_coe_exec
(
fsm
->
fsm_coe
);
// execute immediately
return
;
return
;
}
}
else
if
(
!
ec_pdo_list_equal
(
&
fsm
->
sync
->
pdos
,
&
fsm
->
pdos
))
{
EC_SLAVE_WARN
(
fsm
->
slave
,
"Slave does not support assigning PDOs!
\n
"
);
EC_SLAVE_WARN
(
fsm
->
slave
,
""
);
ec_fsm_pdo_print
(
fsm
);
}
// set mapped PDO count to zero
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
EC_WRITE_U8
(
fsm
->
request
.
data
,
0
);
// zero PDOs mapped
fsm
->
request
.
data_size
=
1
;
ec_sdo_request_address
(
&
fsm
->
request
,
0x1C10
+
fsm
->
sync_index
,
0
);
ecrt_sdo_request_write
(
&
fsm
->
request
);
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"Setting number of assigned PDOs to zero.
\n
"
);
fsm
->
state
=
ec_fsm_pdo_conf_state_zero_pdo_count
;
ec_fsm_coe_transfer
(
fsm
->
fsm_coe
,
fsm
->
slave
,
&
fsm
->
request
);
ec_fsm_coe_exec
(
fsm
->
fsm_coe
);
// execute immediately
}
}
/*****************************************************************************/
/*****************************************************************************/
...
@@ -621,7 +631,7 @@ void ec_fsm_pdo_conf_state_zero_pdo_count(
...
@@ -621,7 +631,7 @@ void ec_fsm_pdo_conf_state_zero_pdo_count(
EC_SLAVE_WARN
(
fsm
->
slave
,
"Failed to clear PDO assignment of SM%u.
\n
"
,
EC_SLAVE_WARN
(
fsm
->
slave
,
"Failed to clear PDO assignment of SM%u.
\n
"
,
fsm
->
sync_index
);
fsm
->
sync_index
);
EC_SLAVE_WARN
(
fsm
->
slave
,
""
);
ec_fsm_pdo_print
(
fsm
);
EC_SLAVE_WARN
(
fsm
->
slave
,
""
);
ec_fsm_pdo_print
(
fsm
);
fsm
->
state
=
ec_fsm_pdo_state_error
;
ec_fsm_pdo_conf_action_next_sync
(
fsm
)
;
return
;
return
;
}
}
...
@@ -632,7 +642,6 @@ void ec_fsm_pdo_conf_state_zero_pdo_count(
...
@@ -632,7 +642,6 @@ void ec_fsm_pdo_conf_state_zero_pdo_count(
// find first PDO
// find first PDO
if
(
!
(
fsm
->
pdo
=
ec_fsm_pdo_conf_action_next_pdo
(
fsm
,
&
fsm
->
pdos
.
list
)))
{
if
(
!
(
fsm
->
pdo
=
ec_fsm_pdo_conf_action_next_pdo
(
fsm
,
&
fsm
->
pdos
.
list
)))
{
EC_SLAVE_DBG
(
fsm
->
slave
,
1
,
"No PDOs to assign.
\n
"
);
// check for mapping to be altered
// check for mapping to be altered
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
ec_fsm_pdo_conf_action_next_sync
(
fsm
);
...
...
This diff is collapsed.
Click to expand it.
master/fsm_pdo_entry.c
+
0
−
11
View file @
05134700
...
@@ -328,17 +328,6 @@ void ec_fsm_pdo_entry_conf_state_start(
...
@@ -328,17 +328,6 @@ void ec_fsm_pdo_entry_conf_state_start(
ec_fsm_pdo_entry_t
*
fsm
/**< PDO mapping state machine. */
ec_fsm_pdo_entry_t
*
fsm
/**< PDO mapping state machine. */
)
)
{
{
// PDO mapping has to be changed. Does the slave support this?
if
(
!
(
fsm
->
slave
->
sii
.
mailbox_protocols
&
EC_MBOX_COE
)
||
(
fsm
->
slave
->
sii
.
has_general
&&
!
fsm
->
slave
->
sii
.
coe_details
.
enable_pdo_configuration
))
{
EC_SLAVE_WARN
(
fsm
->
slave
,
"Slave does not support"
" changing the PDO mapping!
\n
"
);
EC_SLAVE_WARN
(
fsm
->
slave
,
""
);
ec_fsm_pdo_entry_print
(
fsm
);
fsm
->
state
=
ec_fsm_pdo_entry_state_error
;
return
;
}
if
(
ec_sdo_request_alloc
(
&
fsm
->
request
,
4
))
{
if
(
ec_sdo_request_alloc
(
&
fsm
->
request
,
4
))
{
fsm
->
state
=
ec_fsm_pdo_entry_state_error
;
fsm
->
state
=
ec_fsm_pdo_entry_state_error
;
return
;
return
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment