예제 #1
0
/**
 * @brief   Yields the time slot.
 * @details Yields the CPU control to the next thread in the ready list with
 *          equal priority, if any.
 *
 * @api
 */
void chThdYield(void) {

  chSysLock();
  chSchDoYieldS();
  chSysUnlock();
}
예제 #2
0
static msg_t receiverThread(void *arg) {
  int i;
  UNUSED (arg);
  chRegSetThreadName("receiver");
  
  while (TRUE) {
    chMtxLock(&nrfMutex);
    size_t s = chnReadTimeout(&nrf24l01.channels[0], serialInBuf, 32, MS2ST(10));
    chMtxUnlock(&nrfMutex);

    if (s) {
      if(!wait_for_ack){
	//	serialOutBuf[0]= serialInBuf[0];
	serialInBuf[8]= 1;

	for(i=0; i<5; i++){
	  target_addr[i] = serialInBuf[2+i];
	} 
	nrf24l01SetTXAddress(&nrf24l01, target_addr);
	chMtxLock(&nrfMutex);
	chnWriteTimeout(&nrf24l01.channels[0], serialInBuf, 32, MS2ST(100));
	chMtxUnlock(&nrfMutex);

	if(wait_for_ack){
	  break;
	}
    
	for(i=0;i<5; i++){
	  rec_list[iter][i] = serialInBuf[2+i];
	  } 
	rec_list[iter][5] = serialInBuf[10];
	
	for(i=0; i<(serialInBuf[10]);i++){
	  rec_list[iter][6+i] = serialInBuf[12+i];
	}
	
	iter = (iter+1)%10;
	
	
	for (i=0;i<(int)s;i++) {
	  chprintf((BaseSequentialStream*)&SD1, "%c ", serialInBuf[i]);
	}
	chprintf((BaseSequentialStream*)&SD1, "\n\r", s);
    
	
      }


      if(wait_for_ack){
	if((serialInBuf[0] = msg_seq) && (serialInBuf[8]==1)){
	  wait_for_ack = 0;
	  chprintf((BaseSequentialStream*)&SD1, "Acknowledged.\n\r");
	  
	}
	//else keep trying to send. 
      }
    
    }
    chSchDoYieldS();
  }
  return 0;
}