knet.c File Reference

This module is an abstraction layer for communication with different busses and devices. It offers simple interface to other module or to the user. More...

Include dependency graph for knet.c:

Go to the source code of this file.

Functions

int knet_init (int argc, char *argv[])
void knet_exit (void)
knet_dev_tknet_bus_find_device (knet_bus_t *bus, knet_ext_t ext_addr, knet_mod_t mod_addr)
knet_dev_tknet_bus_find_device_by_name (knet_bus_t *bus, const char *dev_name)
knet_dev_tknet_open (const char *device, int preferred_bus, int argc, char *argv[])
void knet_close (knet_dev_t *dev)
void knet_set_order (knet_dev_t *dev, unsigned long order)
knet_dev_tknet_device_create (knet_bus_t *bus, knet_ext_t ext_addr, knet_mod_t mod_addr, const char *name)
int knet_device_destroy (knet_dev_t *dev)
int knet_lltransfer (knet_dev_t *dev, const char *write_buf, unsigned int write_len, char *read_buf, unsigned int read_len)
int knet_llread (knet_dev_t *dev, char *buf, unsigned int len)
int knet_llwrite (knet_dev_t *dev, const char *buf, unsigned int len)
int knet_convert (knet_dev_t *dev, char *buf, unsigned int len, int type)
int knet_read8 (knet_dev_t *dev, knet_reg_t reg, unsigned char *val)
int knet_read16 (knet_dev_t *dev, knet_reg_t reg, unsigned short *val)
int knet_read32 (knet_dev_t *dev, knet_reg_t reg, unsigned long *val)
int knet_readxBytes (knet_dev_t *dev, knet_reg_t reg, unsigned char *val, unsigned char rx_len)
int knet_write8 (knet_dev_t *dev, knet_reg_t reg, unsigned char val)
int knet_write16 (knet_dev_t *dev, knet_reg_t reg, unsigned short val)
int knet_write32 (knet_dev_t *dev, knet_reg_t reg, unsigned long val)
int knet_read (knet_dev_t *dev, knet_reg_t reg)
int knet_vprintf (knet_dev_t *dev, const char *format, va_list argptr)
int knet_printf (knet_dev_t *dev, const char *format,...)
int knet_read_string (knet_dev_t *dev, char *buffer, unsigned int size, unsigned char terminator)

Variables

static unsigned int knet_buffer_size = 0
static char * knet_buffer = NULL
pthread_mutex_t knet_buffer_lock
static unsigned int knet_bus_count = 0
static knet_bus_t knet_busses [KNET_MAX_BUSSES]
const char * knet_bus_names []


Detailed Description

This module is an abstraction layer for communication with different busses and devices. It offers simple interface to other module or to the user.

K-Net Abstraction Layer

Author:
Cédric Gaudin (K-Team SA)
Note:
Copyright (C) 2004 K-TEAM SA
Bug:
none discovered.
Todo:
nothing.

Definition in file knet.c.


Function Documentation

knet_dev_t* knet_bus_find_device ( knet_bus_t bus,
knet_ext_t  ext_addr,
knet_mod_t  mod_addr 
)

This function finds a K-Net device descriptor given its K-Net Extension and K-Net Module IDs.

Parameters:
bus K-Net Bus Handle
ext_addr K-Net Extension Id
mod_addr K-Net Module Id
Returns:
A pointer to a K-Net device descriptor or NULL if no device found.

Definition at line 201 of file knet.c.

References knet_bus_s::devices, knet_dev_s::ext_addr, knet_dev_s::mod_addr, and knet_dev_s::next.

Referenced by knet_i2c_open().

knet_dev_t* knet_bus_find_device_by_name ( knet_bus_t bus,
const char *  dev_name 
)

This function finds a K-Net device descriptor given its Device Name.

Parameters:
bus K-Net Bus Descriptor
dev_name Device Name
Returns:
A pointer to a K-Net device descriptor or NULL if no device found.

Definition at line 229 of file knet.c.

References knet_bus_s::devices, knet_dev_s::name, and knet_dev_s::next.

Referenced by knet_rs232_open().

void knet_close ( knet_dev_t dev  ) 

This function closes a K-Net Device

Parameters:
dev K-Net device descriptor to close
Remarks:
This function is thread safe.

Definition at line 435 of file knet.c.

References knet_dev_s::bus, knet_bus_s::close, knet_bus_s::lock, and knet_dev_s::usage_counter.

Referenced by kbot_SetLeds(), ltc1663_SendCommand(), and main().

int knet_convert ( knet_dev_t dev,
char *  buf,
unsigned int  len,
int  type 
)

This function converts a data buffer into the encoding of a given K-Net device.

Parameters:
dev K-Net device descriptor
buf Pointer to the buffer that contains the data to convert
len Number of data bytes in the buffer
type Size of the primitive type in the buffer:
  • 1 8-bit
  • 2 16-bit
  • 4 32-bit
Returns:
An error code
  • <0 on error
  • 0 on success

Definition at line 708 of file knet.c.

References KNET_ORDER_BIG, KNET_ORDER_BIT_SWAP, and knet_dev_s::order.

knet_dev_t* knet_device_create ( knet_bus_t bus,
knet_ext_t  ext_addr,
knet_mod_t  mod_addr,
const char *  name 
)

This function creates a new K-Net device descriptor

Parameters:
bus Pointer to a given KNet Bus Descriptor
ext_addr K-Net Device Extension Id
mod_addr K-Net Device Module Id
name K-Net Device Name
Returns:
A pointer to a K-Net device descriptor
Remarks:
This function is thread safe.

Definition at line 504 of file knet.c.

References knet_dev_s::bus, knet_bus_s::devices, knet_dev_s::ext_addr, KB_ALLOC, knet_dev_s::mod_addr, knet_dev_s::next, knet_dev_s::order, and knet_dev_s::usage_counter.

Referenced by knet_i2c_open(), knet_i2c_scan_callback(), and knet_rs232_open().

int knet_device_destroy ( knet_dev_t dev  ) 

This function destroys a K-Net device descriptor

Parameters:
dev Pointer to K-Net device descriptor
Returns:
An error code:
  • <0 on error
  • 0 on success
Remarks:
This function is thread safe.

Definition at line 539 of file knet.c.

References knet_dev_s::bus, knet_bus_s::devices, kb_error(), KB_ERROR_DEVICEINUSE, KB_ERROR_UNLINKDEV, kb_free, knet_bus_s::lock, knet_dev_s::next, and knet_dev_s::usage_counter.

Referenced by knet_exit().

Here is the call graph for this function:

void knet_exit ( void   ) 

This function releases all resources used by the K-Net layer

Remarks:
Never call this function !

Definition at line 165 of file knet.c.

References knet_bus_s::devices, knet_bus_s::exit, kb_free, knet_buffer, knet_buffer_size, knet_bus_count, knet_device_destroy(), KNET_MAX_BUSSES, and knet_bus_s::usage_counter.

Referenced by kb_exit().

Here is the call graph for this function:

int knet_init ( int  argc,
char *  argv[] 
)

This function initializes the K-Net layer. This function should be called once at startup.

Parameters:
argc Number of arguments
argv An array of strings containing a list of arguments
Returns:
An error code:
  • <0 on error
  • 0 on success

Definition at line 110 of file knet.c.

References kb_alloc(), knet_buffer, knet_buffer_lock, knet_buffer_size, knet_bus_count, KNET_BUS_I2C, KNET_BUS_RS232, knet_i2c_init(), KNET_MAX_BUSSES, knet_rs232_init(), knet_bus_s::lock, and knet_bus_s::usage_counter.

Referenced by kb_init().

Here is the call graph for this function:

int knet_llread ( knet_dev_t dev,
char *  buf,
unsigned int  len 
)

This function reads data from a given device

Parameters:
dev K-Net device descriptor
buf Pointer to the buffer that will receive the data
len Size of the buffer
Returns:
A value:
  • <0 on error
  • >=0 number of bytes read
Remarks:
This function is thread safe.

Definition at line 643 of file knet.c.

References knet_dev_s::bus, knet_bus_s::lock, and knet_bus_s::read.

Referenced by braitenbergAvoidance(), hem_fastRead(), kh3_getcommand(), and knet_read_string().

int knet_lltransfer ( knet_dev_t dev,
const char *  write_buf,
unsigned int  write_len,
char *  read_buf,
unsigned int  read_len 
)

This function transfers data to and from a given device.

Parameters:
dev Pointer to a given K-Net Device Descriptor
write_buf Pointer to the buffer that contains the data to be written
write_len Length in bytes of the data in the write buffer
read_buf Pointer to the buffer that will receive the data
read_len Size of the read buffer in bytes
Returns:
An error code:
  • <0 on error
  • >=0 on success
Remarks:
This function is thread safe.

Definition at line 604 of file knet.c.

References knet_dev_s::bus, knet_bus_s::lock, knet_bus_s::read, knet_bus_s::transfer, and knet_bus_s::write.

Referenced by kio_i2c_ListScan(), kio_i2c_ReturnRead(), kio_ReadCAN(), knet_read16(), knet_read32(), knet_read8(), knet_readxBytes(), and pcf8574_Read().

int knet_llwrite ( knet_dev_t dev,
const char *  buf,
unsigned int  len 
)

This function writes data into a given device.

Parameters:
dev K-Net device descriptor
buf Pointer to the buffer that contains the data to be written
len Length in bytes of the data in the buffer
Returns:
A value:
  • <0 on error
  • >=0 number of bytes written
Remarks:
This function is thread safe.

Definition at line 674 of file knet.c.

References knet_dev_s::bus, knet_bus_s::lock, and knet_bus_s::write.

Referenced by kh3_sendcommand(), knet_printf(), knet_vprintf(), knet_write16(), knet_write32(), knet_write8(), and pcf8574_Write().

knet_dev_t* knet_open ( const char *  device,
int  preferred_bus,
int  argc,
char *  argv[] 
)

This function opens a K-Net device given its name.

Parameters:
device K-Net Device name to open
preferred_bus Preferred Bus.
Preferred bus value:
  • KNET_BUS_ANY tells to choose any bus for communicating with the given device.

  • KNET_BUS_I2C tells to choose an I²C bus for communicating with the given device.

  • KNET_BUS_SPI tells to choose an SPI bus for communicating with the given device.

  • KNET_BUS_RS232 tells to choose a rs232 port for communicating with the given device.

Returns:
A pointer to a K-Net device descriptor or NULL if no device is found
Remarks:
This function is thread safe.

Definition at line 270 of file knet.c.

References kb_device_config_s::address, kb_device_config_s::defined, kb_device_config_s::device_name, KB_ALLOC, KB_DEVICE_CLASS_I2C, KB_DEVICE_CLASS_MODULE, KB_DEVICE_CLASS_RS232, KB_DEVICE_CLASS_SPI, KB_ERROR, kb_error(), KB_ERROR_NOBUSADDR, KB_ERROR_NOBUSFOUND, KB_ERROR_NODEVFOUNDSTR, KB_ERROR_NOMODBUS, kb_free, kb_lookup_device(), kb_device_config_s::kclass, KNET_BUS_ANY, KNET_BUS_I2C, KNET_BUS_RS232, KNET_BUS_SPI, knet_bus_s::lock, kb_section_config_s::module_bus, kb_section_config_s::module_bus_addr, knet_bus_s::open, kb_device_config_s::section, and knet_bus_s::usage_counter.

Referenced by AltMotorOpen(), initGripper(), initKH3(), kbot_SetLeds(), ltc1663_SendCommand(), main(), MotorOpen(), and PantiltOpen().

Here is the call graph for this function:

int knet_printf ( knet_dev_t dev,
const char *  format,
  ... 
)

int knet_read ( knet_dev_t dev,
knet_reg_t  reg 
)

This function reads an 8-bit value from a given K-Net device and return this value.

Parameters:
dev K-Net device descriptor
reg K-Net register address
Returns:
A value:
  • <0 on error
  • >=0 the value read
Remarks:
This function is thread safe.

Definition at line 1195 of file knet.c.

References knet_read8().

Referenced by kmot_SearchLimits(), and kmot_SetPoint().

Here is the call graph for this function:

int knet_read16 ( knet_dev_t dev,
knet_reg_t  reg,
unsigned short *  val 
)

This function reads a 16-bit value from a given K-Net device

Parameters:
dev K-Net device descriptor
reg K-Net register address
val A pointer to a variable that will receive the 16-bit value
Returns:
A value:
  • <0 on error
  • >= on success
Remarks:
This function is thread safe.

Definition at line 792 of file knet.c.

References knet_lltransfer(), KNET_ORDER_BIG, KNET_ORDER_BIT_SWAP, KNET_ORDER_MSB_FIRST, KNET_ORDER_REP_ADR, and knet_dev_s::order.

Referenced by kgripper_Arm_Get_Current(), kgripper_Arm_Get_Limits(), kgripper_Arm_Get_Order(), kgripper_Arm_Get_Position(), kgripper_Arm_Get_Voltage(), kgripper_Gripper_Get_Ambiant_IR_Light(), kgripper_Gripper_Get_Current(), kgripper_Gripper_Get_Distance_Sensors(), kgripper_Gripper_Get_Resistivity(), kgripper_Gripper_Get_Torque(), and kmot_GetMeasure().

Here is the call graph for this function:

int knet_read32 ( knet_dev_t dev,
knet_reg_t  reg,
unsigned long *  val 
)

This function reads a 32-bit value from a given K-Net device.

Parameters:
dev K-Net device descriptor
reg K-Net register address
val A pointer to a 32-bit value that will receive the value
Remarks:
This function is thread safe.

Definition at line 861 of file knet.c.

References knet_lltransfer(), KNET_ORDER_BIG, KNET_ORDER_BIT_SWAP, KNET_ORDER_MSB_FIRST, KNET_ORDER_REP_ADR, and knet_dev_s::order.

Referenced by kmot_GetMeasure(), and kmot_SearchLimits().

Here is the call graph for this function:

int knet_read8 ( knet_dev_t dev,
knet_reg_t  reg,
unsigned char *  val 
)

This function reads a 8-bit value of data from a K-Net device.

Parameters:
dev K-Net device descriptor
reg K-Net register address
val Pointer to a variable that will receive the value
Returns:
An error code:
  • <0 on error
  • >=0 on success
Remarks:
This function is thread safe.

Definition at line 760 of file knet.c.

References knet_lltransfer(), KNET_ORDER_BIT_SWAP, and knet_dev_s::order.

Referenced by kgripper_Arm_Get_Capacity(), kgripper_Arm_Get_Max_Speed(), kgripper_Arm_Get_Search_Limit(), kgripper_Arm_Get_Speed(), kgripper_Arm_Get_Version(), kgripper_Arm_OnTarget(), kgripper_Gripper_Get_Limits(), kgripper_Gripper_Get_Order(), kgripper_Gripper_Get_Position(), kgripper_Gripper_Get_Search_Limit(), kgripper_Gripper_Get_Speed(), kgripper_Gripper_Get_Version(), kgripper_Gripper_Object_Detected(), kgripper_Gripper_OnTarget(), kio_GetFWVersion(), kio_i2c_ListScan(), kio_ReadAnalog(), kio_ReadIO(), kio_SendCAN(), kmot_GetFWVersion(), kmot_GetOptions(), kmot_GetSpeedMultiplier(), kmot_GetStatus(), and knet_read().

Here is the call graph for this function:

int knet_read_string ( knet_dev_t dev,
char *  buffer,
unsigned int  size,
unsigned char  terminator 
)

int knet_readxBytes ( knet_dev_t dev,
knet_reg_t  reg,
unsigned char *  val,
unsigned char  rx_len 
)

This function reads a x Bytes value from a given K-Net device.

Parameters:
dev K-Net device descriptor
reg K-Net register address
val A pointer to a table value that will receive the value
rx_len the number of Bytes to be read
Remarks:
This function is thread safe.

Definition at line 948 of file knet.c.

References knet_lltransfer(), KNET_ORDER_BIT_SWAP, and knet_dev_s::order.

Here is the call graph for this function:

void knet_set_order ( knet_dev_t dev,
unsigned long  order 
)

This function changes the order flags. These flags are used by knet_{read|write}{8|16|32} functions to choose the desired encoding before and after reading from or writing to a K-Net device.

Parameters:
dev K-Net device descriptor
order New order flags.
Order Flags:

  • KNET_ORDER_LITTLE tells that the target device use little endian encoding. In little endian, the least significant BYTE is at the lowest address value.

  • KNET_ORDER_BIG tells that the target device use big endian encoding. In big endian, the most significant BYTE is at the lowest address value.

  • KNET_ORDER_LSB_FIRST tells that the lowest address is the first sent. This flag takes effect only if KNET_ORDER_REP_ADR is set.

  • KNET_ORDER_MSB_FIRST tells that the highest address is the first sent. This flag takes effect only if K NET_ORDER_REP_ADR is set.

  • KNET_ORDER_BIT_SWAP tells to reverse the bit order.
  • KNET_ORDER_REP_ADR tells to use multiple atomic 8-bit reads or writes in order to read or write a 16-bit or 32-bit.

Remarks:
This function is thread safe.

Definition at line 482 of file knet.c.

References knet_dev_s::bus, knet_bus_s::lock, and knet_dev_s::order.

Referenced by kgripper_Arm_Set_Order(), kgripper_Gripper_Set_Torque(), kmot_ConfigurePID(), kmot_GetMeasure(), kmot_SearchLimits(), kmot_SetLimits(), kmot_SetMinSpeed(), kmot_SetPoint(), kmot_SetPosition(), kmot_SetSampleTime(), kmot_SetSpeedProfile(), and ltc1663_SendCommand().

int knet_vprintf ( knet_dev_t dev,
const char *  format,
va_list  argptr 
)

This function writes into a device using a vprintf-like formatting function.

Parameters:
dev K-Net device descriptor
format printf-like formatted string.
argptr arguments list
Returns:
<0 on error and >=0 number of characters written.

Definition at line 1217 of file knet.c.

References kb_realloc(), knet_buffer, knet_buffer_lock, knet_buffer_size, and knet_llwrite().

Here is the call graph for this function:

int knet_write16 ( knet_dev_t dev,
knet_reg_t  reg,
unsigned short  val 
)

This function writes an 16-bit value to a given K-Net device.

Parameters:
dev K-Net device descriptor
reg K-Net register address
val a 16-bit value
Returns:
A value:
  • <0 on error
  • >=0 on success
Remarks:
This function is thread safe.

Definition at line 1012 of file knet.c.

References buf, knet_llwrite(), KNET_ORDER_BIG, KNET_ORDER_BIT_SWAP, KNET_ORDER_MSB_FIRST, KNET_ORDER_REP_ADR, and knet_dev_s::order.

Referenced by kgripper_Arm_Set_Order(), kgripper_Gripper_Set_Torque(), kmot_ConfigurePID(), kmot_SetLimits(), kmot_SetMinSpeed(), kmot_SetSpeedProfile(), and ltc1663_SendCommand().

Here is the call graph for this function:

int knet_write32 ( knet_dev_t dev,
knet_reg_t  reg,
unsigned long  val 
)

This function writes a 32-bit value to a given K-Net device.

Parameters:
dev K-Net device descriptor
reg K-Net register address
val a 32-bit value
Returns:
A value:
  • <0 on error
  • >=0 on success
Remarks:
This function is thread safe.

Definition at line 1090 of file knet.c.

References buf, knet_llwrite(), KNET_ORDER_BIG, KNET_ORDER_BIT_SWAP, KNET_ORDER_MSB_FIRST, KNET_ORDER_REP_ADR, and knet_dev_s::order.

Referenced by kmot_SearchLimits(), kmot_SetLimits(), kmot_SetPoint(), and kmot_SetPosition().

Here is the call graph for this function:

int knet_write8 ( knet_dev_t dev,
knet_reg_t  reg,
unsigned char  val 
)


Variable Documentation

char* knet_buffer = NULL [static]

Definition at line 79 of file knet.c.

Referenced by knet_exit(), knet_init(), knet_printf(), and knet_vprintf().

pthread_mutex_t knet_buffer_lock

Lock to protec the internal buffer

Definition at line 81 of file knet.c.

Referenced by knet_init(), knet_printf(), and knet_vprintf().

unsigned int knet_buffer_size = 0 [static]

K-Net Internal Buffer

Definition at line 78 of file knet.c.

Referenced by knet_exit(), knet_init(), knet_printf(), and knet_vprintf().

unsigned int knet_bus_count = 0 [static]

Number of registered busses

Definition at line 84 of file knet.c.

Referenced by knet_exit(), and knet_init().

const char* knet_bus_names[]

Initial value:

 { 
    "none" , "i2c" , "spi" , "rs232" , NULL 
  }
List of existing knet bus names, as they should appear in configuration files. Device class names are defined in kb_config.h

Definition at line 94 of file knet.c.

Referenced by kb_parse_modbus().

knet_bus_t knet_busses[KNET_MAX_BUSSES] [static]

K-Net Bus Descriptors

Definition at line 87 of file knet.c.


Generated on Wed Dec 15 11:49:29 2010 for KoreBot Library by  doxygen 1.5.5