void UART1::SetBand(unsigned long band){ U1BRG=System_Clock()/(band<<4)-1; }
meter_server() { char packet[1500]; int packsize, restsize, queuesize, chunksize, pn, range; long now, percent, interval; struct itimerval new_val, old_val; signal(SIGALRM, meter_alarm_handler); while (true) { interval = SHARED_DATA->Wholine_Rate; /* In milliseconds */ new_val.it_value.tv_sec = interval / 1000; new_val.it_value.tv_usec = (interval % 1000) * 1000; new_val.it_interval.tv_sec = 0; new_val.it_interval.tv_usec = 0; setitimer(ITIMER_REAL, &new_val, &old_val); sigpause(0); packsize = 4 * N_Interps + PACKET_HEAD_SIZE; restsize = packsize - 3; packet[0] = WHOLINE_INFO; packet[1] = restsize >> 8; packet[2] = restsize; packet[3] = WHOLINE_VERSION; packet[4] = N_Interps; packet[5] = N_Interps; queuesize = SHARED_DATA->Work_Queue.queue_count; packet[6] = queuesize >> 8; packet[7] = queuesize; chunksize = Local_Chunk_Size; packet[8] = chunksize >> 24; packet[9] = chunksize >> 16; packet[10] = chunksize >> 8; packet[11] = chunksize; now = System_Clock(); packet[12] = now >> 24; packet[13] = now >> 16; packet[14] = now >> 8; packet[15] = now; for (pn = 0; pn < N_Interps; pn++) { packet[pn + PACKET_HEAD_SIZE] = SHARED_DATA->Processor_Zone[pn]; packet[pn + PACKET_HEAD_SIZE + N_Interps] = 0; packet[pn + PACKET_HEAD_SIZE + N_Interps + N_Interps] = 0; range = (SHARED_DATA->Memory_Table[pn].Free_Top - SHARED_DATA->Memory_Table[pn].Free_Bottom); percent = (100 * range) / Local_Chunk_Size; if (percent < 0) percent = 0; if (percent > 100) percent = 100; percent = 100 - percent; packet[pn + PACKET_HEAD_SIZE + N_Interps + N_Interps + N_Interps] = percent; if (Debug_Flags[23]) printf("pn=%d FT=0x%x FB=0x%x r=0x%x (%d/%d) per=%d\n", pn, SHARED_DATA->Memory_Table[pn].Free_Top, SHARED_DATA->Memory_Table[pn].Free_Bottom, range, range, Local_Chunk_Size, percent); } while(atomior(&SHARED_DATA->Lisp_Output_Lock, 0x8000) != 0); write(SHARED_DATA->Lisp_Output_Pipe[WRITE_TO_PIPE], packet, packsize); SHARED_DATA->Lisp_Output_Lock = 0; } }