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
951c5671
Commit
951c5671
authored
19 years ago
by
Florian Pose
Browse files
Options
Downloads
Patches
Plain Diff
Bugfix: Absturz behoben, EEPROM-Infos.
parent
601280bd
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
master/slave.c
+34
-27
34 additions, 27 deletions
master/slave.c
master/slave.h
+6
-1
6 additions, 1 deletion
master/slave.h
with
40 additions
and
28 deletions
master/slave.c
+
34
−
27
View file @
951c5671
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
*
*
* s l a v e . c
* s l a v e . c
*
*
* Methoden fr einen EtherCAT-Slave.
* Methoden fr einen EtherCAT-Slave.
*
*
* $Id$
* $Id$
*
*
...
@@ -53,7 +53,10 @@ void ec_slave_init(ec_slave_t *slave, /**< EtherCAT-Slave */
...
@@ -53,7 +53,10 @@ void ec_slave_init(ec_slave_t *slave, /**< EtherCAT-Slave */
slave
->
registered
=
0
;
slave
->
registered
=
0
;
slave
->
fmmu_count
=
0
;
slave
->
fmmu_count
=
0
;
INIT_LIST_HEAD
(
&
slave
->
cat_strings
);
INIT_LIST_HEAD
(
&
slave
->
eeprom_strings
);
slave
->
eeprom_name
=
NULL
;
slave
->
eeprom_group
=
NULL
;
slave
->
eeprom_desc
=
NULL
;
}
}
/*****************************************************************************/
/*****************************************************************************/
...
@@ -67,16 +70,20 @@ void ec_slave_clear(ec_slave_t *slave /**< EtherCAT-Slave */)
...
@@ -67,16 +70,20 @@ void ec_slave_clear(ec_slave_t *slave /**< EtherCAT-Slave */)
ec_slave_string_t
*
string
,
*
next
;
ec_slave_string_t
*
string
,
*
next
;
// Alle Strings freigeben
// Alle Strings freigeben
list_for_each_entry_safe
(
string
,
next
,
&
slave
->
cat
_strings
,
list
)
{
list_for_each_entry_safe
(
string
,
next
,
&
slave
->
eeprom
_strings
,
list
)
{
list_del
(
&
string
->
list
);
list_del
(
&
string
->
list
);
kfree
(
string
);
kfree
(
string
);
}
}
if
(
slave
->
eeprom_name
)
kfree
(
slave
->
eeprom_name
);
if
(
slave
->
eeprom_group
)
kfree
(
slave
->
eeprom_group
);
if
(
slave
->
eeprom_desc
)
kfree
(
slave
->
eeprom_desc
);
}
}
/*****************************************************************************/
/*****************************************************************************/
/**
/**
Liest alle bentigten Informationen aus einem Slave.
Liest alle bentigten Informationen aus einem Slave.
\return 0 wenn alles ok, < 0 bei Fehler.
\return 0 wenn alles ok, < 0 bei Fehler.
*/
*/
...
@@ -154,7 +161,7 @@ int ec_slave_sii_read(ec_slave_t *slave,
...
@@ -154,7 +161,7 @@ int ec_slave_sii_read(ec_slave_t *slave,
uint16_t
offset
,
uint16_t
offset
,
/**< Adresse des zu lesenden SII-Registers */
/**< Adresse des zu lesenden SII-Registers */
uint32_t
*
target
uint32_t
*
target
/**< Zeiger auf einen 4 Byte groen Speicher zum Ablegen
/**< Zeiger auf einen 4 Byte groen Speicher zum Ablegen
der Daten */
der Daten */
)
)
{
{
...
@@ -175,7 +182,7 @@ int ec_slave_sii_read(ec_slave_t *slave,
...
@@ -175,7 +182,7 @@ int ec_slave_sii_read(ec_slave_t *slave,
}
}
// Der Slave legt die Informationen des Slave-Information-Interface
// Der Slave legt die Informationen des Slave-Information-Interface
// in das Datenregister und lscht daraufhin ein Busy-Bit. Solange
// in das Datenregister und lscht daraufhin ein Busy-Bit. Solange
// den Status auslesen, bis das Bit weg ist.
// den Status auslesen, bis das Bit weg ist.
start
=
get_cycles
();
start
=
get_cycles
();
...
@@ -244,7 +251,7 @@ int ec_slave_sii_write(ec_slave_t *slave,
...
@@ -244,7 +251,7 @@ int ec_slave_sii_write(ec_slave_t *slave,
}
}
// Der Slave legt die Informationen des Slave-Information-Interface
// Der Slave legt die Informationen des Slave-Information-Interface
// in das Datenregister und lscht daraufhin ein Busy-Bit. Solange
// in das Datenregister und lscht daraufhin ein Busy-Bit. Solange
// den Status auslesen, bis das Bit weg ist.
// den Status auslesen, bis das Bit weg ist.
start
=
get_cycles
();
start
=
get_cycles
();
...
@@ -399,17 +406,18 @@ int ec_slave_fetch_strings(ec_slave_t *slave, /**< EtherCAT-Slave */
...
@@ -399,17 +406,18 @@ int ec_slave_fetch_strings(ec_slave_t *slave, /**< EtherCAT-Slave */
offset
=
1
;
offset
=
1
;
for
(
i
=
0
;
i
<
string_count
;
i
++
)
{
for
(
i
=
0
;
i
<
string_count
;
i
++
)
{
size
=
data
[
offset
];
size
=
data
[
offset
];
// Speicher fr String-Objekt und Daten in einem Rutsch allozieren
// Speicher fr String-Objekt und Daten in einem Rutsch allozieren
if
(
!
(
string
=
(
ec_slave_string_t
*
)
kmalloc
(
sizeof
(
ec_slave_string_t
)
if
(
!
(
string
=
(
ec_slave_string_t
*
)
kmalloc
(
sizeof
(
ec_slave_string_t
)
+
size
+
1
,
+
size
+
1
,
GFP_KERNEL
)))
{
GFP_KERNEL
)))
{
EC_ERR
(
"Failed to allocate string memory.
\n
"
);
EC_ERR
(
"Failed to allocate string memory.
\n
"
);
return
-
1
;
return
-
1
;
}
}
string
->
data
=
(
char
*
)
(
string
+
sizeof
(
ec_slave_string_t
));
string
->
size
=
size
;
string
->
data
=
(
char
*
)
string
+
sizeof
(
ec_slave_string_t
);
memcpy
(
string
->
data
,
data
+
offset
+
1
,
size
);
memcpy
(
string
->
data
,
data
+
offset
+
1
,
size
);
string
->
data
[
size
]
=
0x00
;
string
->
data
[
size
]
=
0x00
;
list_add_tail
(
&
string
->
list
,
&
slave
->
cat
_strings
);
list_add_tail
(
&
string
->
list
,
&
slave
->
eeprom
_strings
);
offset
+=
1
+
size
;
offset
+=
1
+
size
;
}
}
...
@@ -479,13 +487,13 @@ void ec_slave_fetch_rxpdo(ec_slave_t *slave, /**< EtherCAT-Slave */
...
@@ -479,13 +487,13 @@ void ec_slave_fetch_rxpdo(ec_slave_t *slave, /**< EtherCAT-Slave */
/*****************************************************************************/
/*****************************************************************************/
/**
/**
Besttigt einen Fehler beim Zustandswechsel.
Besttigt einen Fehler beim Zustandswechsel.
\todo Funktioniert noch nicht...
\todo Funktioniert noch nicht...
*/
*/
void
ec_slave_state_ack
(
ec_slave_t
*
slave
,
void
ec_slave_state_ack
(
ec_slave_t
*
slave
,
/**< Slave, dessen Zustand gendert werden soll */
/**< Slave, dessen Zustand gendert werden soll */
uint8_t
state
uint8_t
state
/**< Alter Zustand */
/**< Alter Zustand */
)
)
...
@@ -543,13 +551,13 @@ void ec_slave_state_ack(ec_slave_t *slave,
...
@@ -543,13 +551,13 @@ void ec_slave_state_ack(ec_slave_t *slave,
/*****************************************************************************/
/*****************************************************************************/
/**
/**
ndert den Zustand eines Slaves.
ndert den Zustand eines Slaves.
\return 0 bei Erfolg, sonst < 0
\return 0 bei Erfolg, sonst < 0
*/
*/
int
ec_slave_state_change
(
ec_slave_t
*
slave
,
int
ec_slave_state_change
(
ec_slave_t
*
slave
,
/**< Slave, dessen Zustand gendert werden soll */
/**< Slave, dessen Zustand gendert werden soll */
uint8_t
state
uint8_t
state
/**< Neuer Zustand */
/**< Neuer Zustand */
)
)
...
@@ -610,17 +618,17 @@ int ec_slave_state_change(ec_slave_t *slave,
...
@@ -610,17 +618,17 @@ int ec_slave_state_change(ec_slave_t *slave,
Merkt eine FMMU-Konfiguration vor.
Merkt eine FMMU-Konfiguration vor.
Die FMMU wird so konfiguriert, dass sie den gesamten Datenbereich des
Die FMMU wird so konfiguriert, dass sie den gesamten Datenbereich des
entsprechenden Sync-Managers abdeckt. Fr jede Domne werden separate
entsprechenden Sync-Managers abdeckt. Fr jede Domne werden separate
FMMUs konfiguriert.
FMMUs konfiguriert.
Wenn die entsprechende FMMU bereits konfiguriert ist, wird dies als
Wenn die entsprechende FMMU bereits konfiguriert ist, wird dies als
Erfolg zurckgegeben.
Erfolg zurckgegeben.
\return 0 bei Erfolg, sonst < 0
\return 0 bei Erfolg, sonst < 0
*/
*/
int
ec_slave_set_fmmu
(
ec_slave_t
*
slave
,
/**< EtherCAT-Slave */
int
ec_slave_set_fmmu
(
ec_slave_t
*
slave
,
/**< EtherCAT-Slave */
const
ec_domain_t
*
domain
,
/**< Domne */
const
ec_domain_t
*
domain
,
/**< Domne */
const
ec_sync_t
*
sync
/**< Sync-Manager */
const
ec_sync_t
*
sync
/**< Sync-Manager */
)
)
{
{
...
@@ -650,13 +658,11 @@ int ec_slave_set_fmmu(ec_slave_t *slave, /**< EtherCAT-Slave */
...
@@ -650,13 +658,11 @@ int ec_slave_set_fmmu(ec_slave_t *slave, /**< EtherCAT-Slave */
/*****************************************************************************/
/*****************************************************************************/
/**
/**
Gibt alle Informationen ber einen EtherCAT-Slave aus.
Gibt alle Informationen ber einen EtherCAT-Slave aus.
*/
*/
void
ec_slave_print
(
const
ec_slave_t
*
slave
/**< EtherCAT-Slave */
)
void
ec_slave_print
(
const
ec_slave_t
*
slave
/**< EtherCAT-Slave */
)
{
{
ec_slave_string_t
*
string
;
EC_INFO
(
"--- EtherCAT slave information ---
\n
"
);
EC_INFO
(
"--- EtherCAT slave information ---
\n
"
);
if
(
slave
->
type
)
{
if
(
slave
->
type
)
{
...
@@ -677,24 +683,25 @@ void ec_slave_print(const ec_slave_t *slave /**< EtherCAT-Slave */)
...
@@ -677,24 +683,25 @@ void ec_slave_print(const ec_slave_t *slave /**< EtherCAT-Slave */)
EC_INFO
(
" Supported FMMUs: %i, Sync managers: %i
\n
"
,
EC_INFO
(
" Supported FMMUs: %i, Sync managers: %i
\n
"
,
slave
->
base_fmmu_count
,
slave
->
base_sync_count
);
slave
->
base_fmmu_count
,
slave
->
base_sync_count
);
EC_INFO
(
"
Slave information interface
:
\n
"
);
EC_INFO
(
"
EEPROM data
:
\n
"
);
EC_INFO
(
" Configured station alias: 0x%04X (%i)
\n
"
,
slave
->
sii_alias
,
EC_INFO
(
" Configured station alias: 0x%04X (%i)
\n
"
,
slave
->
sii_alias
,
slave
->
sii_alias
);
slave
->
sii_alias
);
EC_INFO
(
" Vendor-ID: 0x%08X, Product code: 0x%08X
\n
"
,
EC_INFO
(
" Vendor-ID: 0x%08X, Product code: 0x%08X
\n
"
,
slave
->
sii_vendor_id
,
slave
->
sii_product_code
);
slave
->
sii_vendor_id
,
slave
->
sii_product_code
);
EC_INFO
(
" Revision number: 0x%08X, Serial number: 0x%08X
\n
"
,
EC_INFO
(
" Revision number: 0x%08X, Serial number: 0x%08X
\n
"
,
slave
->
sii_revision_number
,
slave
->
sii_serial_number
);
slave
->
sii_revision_number
,
slave
->
sii_serial_number
);
if
(
slave
->
eeprom_name
)
EC_INFO
(
" EEPROM strings:
\n
"
);
EC_INFO
(
" Name: %s
\n
"
,
slave
->
eeprom_name
);
list_for_each_entry
(
string
,
&
slave
->
cat_strings
,
list
)
{
if
(
slave
->
eeprom_group
)
EC_INFO
(
" *
\"
%s
\"\n
"
,
string
->
data
);
EC_INFO
(
" Group: %s
\n
"
,
slave
->
eeprom_group
);
}
if
(
slave
->
eeprom_desc
)
EC_INFO
(
" Description: %s
\n
"
,
slave
->
eeprom_desc
);
}
}
/*****************************************************************************/
/*****************************************************************************/
/**
/**
Gibt die Zhlerstnde der CRC-Fault-Counter aus und setzt diese zurck.
Gibt die Zhlerstnde der CRC-Fault-Counter aus und setzt diese zurck.
\return 0 bei Erfolg, sonst < 0
\return 0 bei Erfolg, sonst < 0
*/
*/
...
...
This diff is collapsed.
Click to expand it.
master/slave.h
+
6
−
1
View file @
951c5671
...
@@ -58,6 +58,7 @@ ec_fmmu_t;
...
@@ -58,6 +58,7 @@ ec_fmmu_t;
typedef
struct
typedef
struct
{
{
struct
list_head
list
;
struct
list_head
list
;
size_t
size
;
char
*
data
;
char
*
data
;
}
}
ec_slave_string_t
;
ec_slave_string_t
;
...
@@ -98,7 +99,11 @@ struct ec_slave
...
@@ -98,7 +99,11 @@ struct ec_slave
ec_fmmu_t
fmmus
[
EC_MAX_FMMUS
];
/**< FMMU-Konfigurationen */
ec_fmmu_t
fmmus
[
EC_MAX_FMMUS
];
/**< FMMU-Konfigurationen */
uint8_t
fmmu_count
;
/**< Wieviele FMMUs schon benutzt sind. */
uint8_t
fmmu_count
;
/**< Wieviele FMMUs schon benutzt sind. */
struct
list_head
cat_strings
;
/**< Strings im EEPROM */
struct
list_head
eeprom_strings
;
/**< Strings im EEPROM */
const
char
*
eeprom_name
;
/**< Slave-Name laut Hersteller */
const
char
*
eeprom_group
;
/**< Slave-Beschreibung laut Hersteller */
const
char
*
eeprom_desc
;
/**< Slave-Beschreibung laut Hersteller */
};
};
/*****************************************************************************/
/*****************************************************************************/
...
...
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