void PrintString (void) { /* Printing takes a long time. Don't do it while buzzing because it will introduce long pauses. */ OS_Wait(S_BUZZ_OUTPUT); sys_print_lcd((char *)OS_GetParam()); OS_Signal(S_BUZZ_OUTPUT); OS_Signal(S_LCD); }
//------------------------------------------------------------------------ // getchar for apps //------------------------------------------------------------------------ char sh_getchar() { FIFO f = OS_GetParam(); int val; while(!OS_Read(f, &val)) OS_Yield(); return (char)val; }
void WriteA (void) { FIFO f = (FIFO)OS_GetParam(); OS_Write(f,(int)'J'); OS_Yield(); OS_Write(f,(int)'o'); OS_Yield(); OS_Write(f,(int)'e'); OS_Signal(S_LOGO); }
void Write1 (void) { FIFO f = (FIFO)OS_GetParam(); OS_Wait(S_LOGO); OS_Write(f,(int)'l'); OS_Yield(); OS_Write(f,(int)'O'); OS_Yield(); OS_Write(f,(int)'S'); OS_Signal(S_LOGO); }
/* Device: Scheduling period = 1/frequency of sound. Parameter (l) = number of oscillations to produce. */ void Buzz(void) { int i,l; l = OS_GetParam(); /* Release the cpu each time the speaker bit is altered, to allow the device process period to determine the frequency. */ for(i = 0; i < l; i++) { Ports[M6811_PORTA] SET_BIT(BIT3); OS_Yield(); Ports[M6811_PORTA] CLR_BIT(BIT3); OS_Yield(); } OS_Signal(S_BUZZ); }
void PrintFIFO (void) { FIFO f = (FIFO)OS_GetParam(); char *s = " "; int i; int fi; i = 0; while(i < 6) { if(OS_Read(f,&fi)) { s[i++] = (char)fi; } else { OS_Yield(); } } OS_Wait(S_LCD); OS_Create(PrintString, (int)s, PERIODIC, 50); }
void ReadLightSensors(void) { FIFO f = (FIFO)OS_GetParam(); int l, r; while (1) { l = 0; r = 0; OS_Wait(S_PORTE); /* Activate A/D Converter...makes pins on Port E analog. */ Ports[M6811_OPTION] SET_BIT(BIT7); /* Delay at least 100 microseconds */ OS_Yield(); /* Start converting the right photocell */ Ports[M6811_ADCTL] = 0; /* Wait for conversion to complete. */ while (!(Ports[M6811_ADCTL] & BIT7)) { OS_Yield(); } r = Ports[M6811_ADR1]; /* Start converting the left photocell */ Ports[M6811_ADCTL] = 1; /* Wait for conversion to complete. */ while (!(Ports[M6811_ADCTL] & BIT7)) { OS_Yield(); } l = Ports[M6811_ADR1]; OS_Signal(S_PORTE); if (l > 100) { OS_Wait(S_BUZZ_FIFO); OS_Write(f,'l'); } if (r > 100) { OS_Wait(S_BUZZ_FIFO); OS_Write(f,'r'); } OS_Yield(); } }
void ReadMicrophone(void) { FIFO f = (FIFO)OS_GetParam(); int s; while (1) { s = 0; OS_Wait(S_PORTE); /* Activate A/D Converter...makes pins on Port E analog. */ Ports[M6811_OPTION] SET_BIT(BIT7); /* Delay at least 100 microseconds */ OS_Yield(); /* Don't listen while buzzing. */ OS_Wait(S_BUZZ_OUTPUT); /* Start converting the microphone. */ Ports[M6811_ADCTL] = 2; OS_Signal(S_BUZZ_OUTPUT); /* Wait for conversion to complete. */ while (!(Ports[M6811_ADCTL] & BIT7)) { OS_Yield(); } s = Ports[M6811_ADR1]; OS_Signal(S_PORTE); /* Rectify the sound sample around 128. */ if (s >= 128) { s -= 128; } else { s = 128 - s; } if (s > 35) { OS_Wait(S_BUZZ_FIFO); OS_Write(f,'s'); } OS_Yield(); } }
/* Device: > 500ms */ void FIFOBuzz(void) { FIFO f; int fi; unsigned int i; f = (FIFO)OS_GetParam(); while (1) { if(OS_Read(f,&fi)) { /* Fifo for charactar output */ OS_Wait(S_BUZZ_OUTPUT); switch((char)fi) { case 'a': dot(); dash(); break; case 'b': dash(); dot(); dot(); dot(); break; case 'c': dash(); dot(); dash(); dot(); break; case 'd': dash(); dot(); dot(); break; case 'e': dot(); break; case 'f': dot(); dot(); dash(); dot(); break; case 'g': dash(); dash(); dot(); break; case 'h': dot(); dot(); dot(); dot(); break; case 'i': dot(); dot(); break; case 'j': dot(); dash(); dash(); dash(); break; case 'k': dash(); dot(); dash(); break; case 'l': dot(); dash(); dot(); dot(); break; case 'm': dash(); dash(); break; case 'n': dash(); dot(); break; case 'o': dash(); dash(); dash(); break; case 'p': dot(); dash(); dash(); dot(); break; case 'q': dash(); dash(); dot(); dash(); break; case 'r': dot(); dash(); dot(); break; case 's': dot(); dot(); dot(); break; case 't': dash(); break; case 'u': dot(); dot(); dash(); break; case 'v': dot(); dot(); dot(); dash(); break; case 'w': dot(); dash(); dash(); break; case 'x': dash(); dot(); dot(); dash(); break; case 'y': dash(); dot(); dash(); dash(); break; case 'z': dash(); dash(); dot(); dot(); break; case '1': dot(); dash(); dash(); dash(); dash(); break; case '2': dot(); dot(); dash(); dash(); dash(); break; case '3': dot(); dot(); dot(); dash(); dash(); break; case '4': dot(); dot(); dot(); dot(); dash(); break; case '5': dot(); dot(); dot(); dot(); dot(); break; case '6': dash(); dot(); dot(); dot(); dot(); break; case '7': dash(); dash(); dot(); dot(); dot(); break; case '8': dash(); dash(); dash(); dot(); dot(); break; case '9': dash(); dash(); dash(); dash(); dot(); break; case '0': dash(); dash(); dash(); dash(); dash(); break; default: OS_Yield(); break; } OS_Signal(S_BUZZ_FIFO); /* Wait for the speaker to settle...prevents the microphone from hearing it. */ OS_Yield(); /* When all buzz processes have finished, signal that output is complete. */ OS_Wait(S_BUZZ); OS_Signal(S_BUZZ_OUTPUT); OS_Signal(S_BUZZ); } OS_Yield(); } }
void ReadBumpers(void) { FIFO f = (FIFO)OS_GetParam(); int b; while (1) { b = 0; OS_Wait(S_PORTE); /* Activate A/D Converter...makes pins on Port E analog. */ Ports[M6811_OPTION] SET_BIT(BIT7); /* Delay at least 100 microseconds */ OS_Yield(); /* Start converting the bumpers. */ Ports[M6811_ADCTL] = 3; /* Wait for conversion to complete. */ while (!(Ports[M6811_ADCTL] & BIT7)) { OS_Yield(); } b = Ports[M6811_ADR1]; OS_Signal(S_PORTE); /* Move based on the bumper values. (b) */ /* Turn Left */ if (b > 3 && b < 7) { Ports[M6811_DDRD] = 0xFF; Ports[M6811_PORTD] CLR_BIT(BIT5); // Reverse Right Ports[M6811_PORTA] CLR_BIT(BIT6); // Left Ports[M6811_PORTA] SET_BIT(BIT5); // Right //OS_Write(f,1); } /* Turn Right */ else if (b > 23 && b < 26) { Ports[M6811_DDRD] = 0xFF; Ports[M6811_PORTD] CLR_BIT(BIT4); // Reverse Left Ports[M6811_PORTA] SET_BIT(BIT6); // Left Ports[M6811_PORTA] CLR_BIT(BIT5); // Right //OS_Write(f,2); } /* Move Ahead */ else if (b > 67 && b < 70) { Ports[M6811_DDRD] = 0xFF; Ports[M6811_PORTD] = 0xFF; // Forward Ports[M6811_PORTA] SET_BIT(BIT6); // Left Ports[M6811_PORTA] SET_BIT(BIT5); // Right //OS_Write(f,3); } /* Stop */ else { Ports[M6811_PORTA] CLR_BIT(BIT6); Ports[M6811_PORTA] CLR_BIT(BIT5); //OS_Write(f,4); } OS_Yield(); } }