/** * @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(); }
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; }