Esempio n. 1
0
//-------------------------------------------------------------------------
// FUNCTION DECLARATION
//-------------------------------------------------------------------------
void hardware_init(void){

  // Starting the evaluation
  EVAL_START();

  // LEDS
  led_init();

  // SYSTEM TIMER
  timer_hardware_init(DEFAULT_INTERVAL, DEFAULT_SCALE);

  // UART
  ker_push_current_pid(KER_UART_PID);
  uart_system_init();
  ker_pop_current_pid();
#ifndef NO_SOS_UART
  //! Initalize uart comm channel
  ker_push_current_pid(KER_UART_PID);
  sos_uart_init();
  ker_pop_current_pid();
#endif
}
Esempio n. 2
0
File: wlnd.c Progetto: sitian/wing
void *wln_proc(void *arg)
{
	int ret;
	wres_req_t *req;
	wresource_t *resource;
	wres_reply_t *rep = NULL;
	wcom_peer_t *peer = (wcom_peer_t *)arg;
	
	EVAL_START(wln_proc);
	ret = wcom_recv_req(peer, &req);
	if (ret) {
		wln_log("failed to receive request");
		goto out;
	}
	ret = wres_save_peer(&req->src);
	if (ret) {
		wln_log("failed to save addr");
		goto out;
	}
	resource = &req->resource;
	if (wres_need_timed_lock(resource))
		ret = wres_lock_timeout(resource);
	else if (wres_need_half_lock(resource)) {
		int err;
		wres_lock_t *lock = wres_lock_top(resource);
		
		if (!lock) {
			wres_print_err(resource, "failed to lock");
			ret = -EINVAL;
		}
		err = wcom_send_rep(peer, (char *)&ret, sizeof(int));
		if (err) {
			wres_print_err(resource, "failed to send reply");
			ret = err;
		}
		wcom_disconnect(peer);
		if (!ret)
			wres_lock_buttom(lock);
		else if (lock)
			wres_unlock_top(lock);
	} else if (wres_need_wrlock(resource))
		ret = wres_rwlock_wrlock(resource);
	else if (wres_need_lock(resource))
		ret = wres_lock(resource);
	
	if (ret)
		goto reply;
	
	ret = wres_check_resource(resource);
	if (ret)
		goto unlock;
	
	rep = wres_proc(req, 0);
	ret = wres_get_errno(rep);
	if (ret < 0) {
		free(rep);
		rep = NULL;
	}
unlock:
	if (wres_need_wrlock(resource))
		wres_rwlock_unlock(resource);
	else if (wres_need_lock(resource))
		wres_unlock(resource);
reply:
	if (!wres_need_half_lock(resource)) {
		if (rep)
			wcom_send_rep(peer, (void *)rep, rep->length + sizeof(wres_reply_t));
		else
			wcom_send_rep(peer, (void *)&ret, sizeof(int));
		wcom_disconnect(peer);
	}
	wcom_free_req(req);
	if (rep)
		wcom_free_rep(rep);
out:
	wcom_free_peer(peer);
	EVAL_END(wln_proc);
	return NULL;
}