/** * \brief Periodic process which will send any data currently loaded for transmission */ void CCOM_Task(void) { uint32_t u32GetAddr; uint8_t *pu8Data; uint8_t i; if(!rbuf_empty(&ccomBuf)) { rbuf_get(&ccomBuf,&u32GetAddr); pu8Data = (uint8_t *)u32GetAddr; //if(USB_isReady()){ USB.write(pu8Data,MAX_FRAME_SIZE); } usb_rawhid_send(pu8Data, MAX_FRAME_SIZE); //for(i=0;i<MAX_FRAME_SIZE;i++){ printf("%02x,",*pu8Data++); } printf("\n\r"); } //else{ printf("No Data...\n\r"); } }
void sem_server() { Sem_request request; Semaphore* sem; int tid; int status; status = RegisterAs( SEMAPHORE_SERVER_NAME ); assert( status == REGISTER_AS_SUCCESS ); while( 1 ) { status = Receive( &tid, ( char* )&request, sizeof( request ) ); assert( status == sizeof( request ) ); sem = request.sem; switch( request.type ) { case SEM_RELEASE: sem->count += 1; status = Reply( tid, ( char* )&status, sizeof( status ) ); assert( status == SYSCALL_SUCCESS ); break; case SEM_AC_ALL: if( sem->count > 0 ) { sem->count = 1; } // Fall through case SEM_ACQUIRE: status = rbuf_put( &sem->wait_queue, ( uchar* )&tid ); assert( status == ERR_NONE ); break; } while( sem->count > 0 && ! rbuf_empty( &sem->wait_queue ) ) { sem->count -= 1; rbuf_get( &sem->wait_queue, ( uchar* )&tid ); status = Reply( tid, ( char* )&status, sizeof( status ) ); assert( status == SYSCALL_SUCCESS ); } } }