RocketLogger  1.1.6
pru.c File Reference
#include <stdint.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>
#include "file_handling.h"
#include "util.h"
#include "web.h"
#include "pru.h"
+ Include dependency graph for pru.c:

Go to the source code of this file.

Functions

void * pru_wait_event (void *voidEvent)
 
int pru_wait_event_timeout (unsigned int event, unsigned int timeout)
 
void * pru_map_memory (void)
 
int pru_unmap_memory (void *pru_mmap)
 
void pru_set_state (rl_pru_state state)
 
int pru_init (void)
 
int pru_data_setup (struct pru_data_struct *pru, struct rl_conf *conf, uint32_t avg_factor)
 
int pru_sample (FILE *data_file, FILE *ambient_file, struct rl_conf *conf, char *file_comment)
 
void pru_stop (void)
 
void pru_close (void)
 

Variables

pthread_mutex_t waiting = PTHREAD_MUTEX_INITIALIZER
 PRU access mutex. More...
 
pthread_cond_t done = PTHREAD_COND_INITIALIZER
 Notification variable. More...
 

Function Documentation

void pru_close ( void  )

Disable PRU

Definition at line 725 of file pru.c.

Referenced by hw_close().

int pru_data_setup ( struct pru_data_struct pru,
struct rl_conf conf,
uint32_t  avg_factor 
)
int pru_init ( void  )

PRU initiation

Returns
SUCCESS on success, FAILURE otherwise

Definition at line 167 of file pru.c.

References ERROR, FAILURE, rl_log(), and SUCCESS.

Referenced by hw_init().

+ Here is the call graph for this function:

void* pru_map_memory ( void  )

Map PRU memory into user space

Definition at line 106 of file pru.c.

References ERROR, MMAP_FILE, read_file_value(), and rl_log().

Referenced by pru_sample().

+ Here is the call graph for this function:

int pru_sample ( FILE *  data_file,
FILE *  ambient_file,
struct rl_conf conf,
char *  file_comment 
)

Main PRU sampling function

Parameters
data_fileFile pointer to data file
ambient_fileFile pointer to ambient file
confPointer to current rl_conf configuration
file_commentComment to store in the file header
Returns
SUCCESS on success, FAILURE otherwise

Definition at line 296 of file pru.c.

References rl_conf::ambient, AMBIENT_DATA_BLOCK_SIZE, AMBIENT_ENABLED, ambient_setup_header(), ambient_setup_lead_in(), ambient_store_data(), BIN, web_shm::buffer, BUFFER100_SIZE, BUFFER10_SIZE, BUFFER1_SIZE, rl_status::buffer_number, pru_data_struct::buffer_size, buffer_sizes, ceil_div(), rl_file_header::channel, rl_file_lead_in::channel_bin_count, rl_file_lead_in::channel_count, CHANNEL_ENABLED, rl_conf::channels, count_channels(), create_sem(), create_time_stamp(), CSV, rl_file_lead_in::data_block_count, DATA_SEM, rl_conf::digital_inputs, DIGITAL_INPUTS_ENABLED, rl_conf::enable_web_server, rl_ambient::enabled, ERROR, FAILURE, rl_conf::file_format, file_handle_data(), rl_ambient::file_name, rl_conf::file_name, file_setup_header(), file_setup_lead_in(), file_store_header_bin(), file_store_header_csv(), file_update_header_bin(), file_update_header_csv(), I1H_INDEX, I1L_INDEX, I2H_INDEX, I2L_INDEX, INFO, rl_file_header::lead_in, LIMIT, rl_conf::max_file_size, MAX_PATH_LENGTH, METER, meter_init(), meter_print_buffer(), meter_stop(), MIN_ADC_RATE, MMAP_FILE, rl_conf::mode, NO_FILE, time_stamp::nsec, web_shm::num_channels, NUM_CHANNELS, NUM_DIGITAL_INPUTS, NUM_SEMS, NUM_WEB_POINTS, PRU_BUFFER_STATUS_SIZE, PRU_CODE, pru_data_setup(), PRU_DIG_SIZE, pru_map_memory(), PRU_OFF, PRU_TIMEOUT, pru_unmap_memory(), pru_wait_event_timeout(), read_file_value(), remove_sem(), RL_ERROR, rl_log(), RL_RUNNING, rl_file_lead_in::sample_count, pru_data_struct::sample_limit, rl_conf::sample_limit, rl_conf::sample_rate, pru_data_struct::sample_size, rl_status::samples_taken, rl_status::sampling, SAMPLING_ON, time_stamp::sec, sem_id, SEM_KEY, rl_ambient::sensor_count, set_sem(), pru_data_struct::state, rl_status::state, status, SUCCESS, rl_conf::update_rate, WAIT_SEM, WARNING, web_buffer_reset(), web_create_shm(), web_data, web_handle_data(), WEB_RING_BUFFER_COUNT, and write_status().

Referenced by hw_sample().

+ Here is the call graph for this function:

void pru_set_state ( rl_pru_state  state)

Write state to PRU

Parameters
statePRU state to write

Definition at line 157 of file pru.c.

Referenced by pru_stop().

void pru_stop ( void  )

Stop and shut down PRU operation.

Note
When sampling in continuous mode, this has to be called before pru_close.

Definition at line 710 of file pru.c.

References PRU_OFF, pru_set_state(), PRU_TIMEOUT, pru_wait_event_timeout(), RL_ERROR, rl_status::state, and status.

Referenced by hw_close().

+ Here is the call graph for this function:

int pru_unmap_memory ( void *  pru_mmap)

Unmap PRU memory from user space

Parameters
pru_mmapPointer to mapped memory
Returns
SUCCESS on success, FAILURE otherwise

Definition at line 138 of file pru.c.

References ERROR, FAILURE, MMAP_FILE, read_file_value(), rl_log(), and SUCCESS.

Referenced by pru_sample().

+ Here is the call graph for this function:

void* pru_wait_event ( void *  voidEvent)

Wait on PRU event

Parameters
voidEventPRU event to wait on

Definition at line 56 of file pru.c.

References done.

Referenced by pru_wait_event_timeout().

int pru_wait_event_timeout ( unsigned int  event,
unsigned int  timeout 
)

Wrapper for PRU event waiting with time out

Parameters
eventPRU event to wait on
timeoutTime out in seconds
Returns
error code of pthread timedwait function

Definition at line 79 of file pru.c.

References done, pru_wait_event(), and waiting.

Referenced by pru_sample(), and pru_stop().

+ Here is the call graph for this function:

Variable Documentation

pthread_cond_t done = PTHREAD_COND_INITIALIZER

Notification variable.

Definition at line 50 of file pru.c.

Referenced by pru_wait_event(), and pru_wait_event_timeout().

pthread_mutex_t waiting = PTHREAD_MUTEX_INITIALIZER

PRU access mutex.

Copyright (c) 2016-2019, Swiss Federal Institute of Technology (ETH Zurich) All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Definition at line 47 of file pru.c.

Referenced by pru_wait_event_timeout().