static void media_server(rtems_task_argument arg __attribute__((unused))) { rtems_status_code sc = RTEMS_SUCCESSFUL; while (true) { message *msg = NULL; sc = rtems_chain_get_with_wait( &message_chain, EVENT, RTEMS_NO_TIMEOUT, (rtems_chain_node **) &msg ); assert(sc == RTEMS_SUCCESSFUL); assert(msg != NULL); rtems_media_post_event( msg->event, msg->src, NULL, msg->worker, msg->worker_arg ); free(msg); } }
static void test_chain_get_with_wait(void) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_chain_control chain; rtems_chain_node *p = (rtems_chain_node *) 1; puts( "INIT - Verify rtems_chain_get_with_wait" ); rtems_chain_initialize_empty( &chain ); sc = rtems_chain_get_with_wait( &chain, EVENT, TIMEOUT, &p ); rtems_test_assert( sc == RTEMS_TIMEOUT ); rtems_test_assert( p == NULL ); }
static void transmit_task(rtems_task_argument arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; uart_bridge_master_control *control = (uart_bridge_master_control *) arg; rtems_chain_control *fifo = &control->transmit_fifo; int fd = open(control->device_path, O_WRONLY); assert(fd >= 0); serial_settings(fd); while (true) { intercom_packet *packet = NULL; sc = rtems_chain_get_with_wait( fifo, TRANSMIT_EVENT, RTEMS_NO_TIMEOUT, (rtems_chain_node **) &packet ); assert(sc == RTEMS_SUCCESSFUL); write(fd, packet->data, packet->size); qoriq_intercom_free_packet(packet); } }
static void test_chain_with_notification(void) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_chain_control chain; rtems_chain_node a; rtems_chain_node b; rtems_chain_node *p = (rtems_chain_node *) 1; rtems_event_set out = 0; puts( "INIT - Verify rtems_chain_append_with_notification" ); rtems_chain_initialize_empty( &chain ); sc = rtems_chain_append_with_notification( &chain, &a, rtems_task_self(), EVENT ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); sc = rtems_chain_get_with_wait( &chain, EVENT, TIMEOUT, &p ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( p == &a ); rtems_chain_initialize_empty( &chain ); rtems_chain_append( &chain, &b ); sc = rtems_chain_append_with_notification( &chain, &a, rtems_task_self(), EVENT ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( p == &a ); puts( "INIT - Verify rtems_chain_prepend_with_notification" ); rtems_chain_initialize_empty( &chain ); sc = rtems_chain_prepend_with_notification( &chain, &a, rtems_task_self(), EVENT ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); sc = rtems_chain_get_with_wait( &chain, EVENT, TIMEOUT, &p ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( p == &a ); rtems_chain_prepend( &chain, &b ); sc = rtems_chain_prepend_with_notification( &chain, &a, rtems_task_self(), EVENT ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( p == &a ); puts( "INIT - Verify rtems_chain_prepend_with_notification" ); puts( "INIT - Verify rtems_chain_get_with_notification" ); rtems_chain_initialize_empty( &chain ); rtems_chain_append( &chain, &b ); rtems_chain_append( &chain, &a ); sc = rtems_chain_get_with_notification(&chain, rtems_task_self(), EVENT, &p); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( p == &b ); sc = rtems_chain_get_with_notification(&chain, rtems_task_self(), EVENT, &p); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( p == &a ); sc = rtems_event_receive( EVENT, RTEMS_EVENT_ALL | RTEMS_WAIT, TIMEOUT, &out ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rtems_test_assert( out == EVENT ); }