API Application Example #include "Buzzer.h" ... ... int main() { uint32_t Octave; ... ... if ( buzzer_open() < 0 ) { printf("Fail to buzzer_open\n"); } ... ... Octave = 4;/* 4 옥타브의 소리*/ ... ... case KEY_1: printf("Key code : KEY_1 (0x%X)\n", KeyCode); if ( IsReleased == 1 ) { /* Key Released */ ... ... buzzer_off(); ... ... } else { ... ... buzzer_on_code( MUSIC_FREQUENCY_CODE_C, Octave );/*C는 도이다*/ ... ... } break; ... ... if ( buzzer_close() < 0 ) { printf("Fail to buzzer_close\n"); } ... ... } 카가 눌리는 동안 소리가 난다. API Header File #ifndef __BUZZER_H__ #define __BUZZER_H__ #include /* uint??_t */ /***************************************************************************/ /* For Buzzer */ /***************************************************************************/ // #define DEVICE_BUZZER_DEBUG_MESSAGE #define DEVICE_PWM_CHIP "/sys/class/pwm/pwmchip0" #define DEVICE_BUZZER "/sys/class/pwm/pwmchip0/pwm0" #define MUSIC_FREQUENCY_OCTAVE_MIN 1 #define MUSIC_FREQUENCY_OCTAVE_MAX 9 typedef enum { MUSIC_FREQUENCY_CODE_C = 0, /* C(도) */ MUSIC_FREQUENCY_CODE_CS, /* C# */ MUSIC_FREQUENCY_CODE_DF, /* D flat */ MUSIC_FREQUENCY_CODE_D, /* D(레) */ MUSIC_FREQUENCY_CODE_DS, /* D# */ MUSIC_FREQUENCY_CODE_EF, /* E flat */ MUSIC_FREQUENCY_CODE_E, /* E(미) */ MUSIC_FREQUENCY_CODE_F, /* F(파) */ MUSIC_FREQUENCY_CODE_FS, /* F# */ MUSIC_FREQUENCY_CODE_GF, /* G flat */ MUSIC_FREQUENCY_CODE_G, /* G(솔) */ MUSIC_FREQUENCY_CODE_GS, /* G# */ MUSIC_FREQUENCY_CODE_AF, /* A flat */ MUSIC_FREQUENCY_CODE_A, /* A(라) */ MUSIC_FREQUENCY_CODE_AS, /* A# */ MUSIC_FREQUENCY_CODE_BF, /* B flat */ MUSIC_FREQUENCY_CODE_B /* B(시) */ } MusicFrequencyCode_t; /* Buzzer Device Open Return 0 = Opened -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ extern int buzzer_open(void); /* Buzzer Device Close Return 0 = Closed -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ extern int buzzer_close(void); /* Buzzer Device Sound On Return 0 = OK to On -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ extern int buzzer_on(uint32_t Hz); /* Buzzer Device Sound On with Music Code Return 0 = Ok to On -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ extern int buzzer_on_code(MusicFrequencyCode_t MusicFrequencyCode, uint32_t Octave); /* Buzzer Device Sound Off Return 0 = Ok to Off -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ extern int buzzer_off(void); #endif /* __BUZZER_H__ */ API Source File #include #include /* uint??_t */ #include /* for memset */ #include /* for open/close .. */ #include /* for O_RDWR */ #include /* for ioctl */ #include /* for O_RDWR */ #include "Buzzer.h" /***************************************************************************/ /* Static Functions */ /***************************************************************************/ static uint32_t device_buzzer_frequency(MusicFrequencyCode_t MusicFrequencyCode, uint32_t Octave) { uint32_t Frequency; Frequency = 0; if ( ( Octave >= MUSIC_FREQUENCY_OCTAVE_MIN ) && ( Octave <= MUSIC_FREQUENCY_OCTAVE_MAX ) ) { switch ( MusicFrequencyCode ) { case MUSIC_FREQUENCY_CODE_C: /* C(µµ) */ Frequency = 3270; /* 32.70Hz */ break; case MUSIC_FREQUENCY_CODE_CS: /* C# */ case MUSIC_FREQUENCY_CODE_DF: /* D flat */ Frequency = 3465; /* 34.65Hz */ break; case MUSIC_FREQUENCY_CODE_D: /* D(·¹) */ Frequency = 3671; /* 36.71Hz */ break; case MUSIC_FREQUENCY_CODE_DS: /* D# */ case MUSIC_FREQUENCY_CODE_EF: /* E flat */ Frequency = 3889; /* 38.89Hz */ break; case MUSIC_FREQUENCY_CODE_E: /* E(¹Ì) */ Frequency = 4120; /* 41.20Hz */ break; case MUSIC_FREQUENCY_CODE_F: /* F(ÆÄ) */ Frequency = 4365; /* 43.65Hz */ break; case MUSIC_FREQUENCY_CODE_FS: /* F# */ case MUSIC_FREQUENCY_CODE_GF: /* G flat */ Frequency = 4625; /* 46.25Hz */ break; case MUSIC_FREQUENCY_CODE_G: /* G(¼Ö) */ Frequency = 4900; /* 49.00Hz */ break; case MUSIC_FREQUENCY_CODE_GS: /* G# */ case MUSIC_FREQUENCY_CODE_AF: /* A flat */ Frequency = 5191; /* 51.91Hz */ break; case MUSIC_FREQUENCY_CODE_A: /* A(¶ó) */ Frequency = 5500; /* 55.00Hz */ break; case MUSIC_FREQUENCY_CODE_AS: /* A# */ case MUSIC_FREQUENCY_CODE_BF: /* B flat */ Frequency = 5827; /* 58.27Hz */ break; case MUSIC_FREQUENCY_CODE_B: /* B(½Ã) */ Frequency = 6174; /* 61.74Hz */ break; } Frequency <<= (Octave - 1); } return (Frequency / 100); } static int device_buzzer_open(uint8_t *pDevicePWM) { int pDeviceFile; char pCommand[128] = {0}; if ( pDevicePWM == (uint8_t *)0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf ( "device_buzzer_open : export pwm 0 : Input Parameter error\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -1; } sprintf ( pCommand, "%s/export", pDevicePWM ); pDeviceFile = open ( pCommand, O_WRONLY ); if ( pDeviceFile < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_open : open export pwm 0 : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -2; } sprintf ( pCommand, "0" ); if ( write ( pDeviceFile, pCommand, strlen ( pCommand ) ) < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_open : write export pwm 0 : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ close ( pDeviceFile ); return -3; } close ( pDeviceFile ); return 0; } static int device_buzzer_close(uint8_t *pDevicePWM) { int pDeviceFile; char pCommand[128] = {0}; if ( pDevicePWM == (uint8_t *)0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf ( "device_buzzer_close : export pwm 0 : Input Parameter error\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -1; } sprintf ( pCommand, "%s/unexport", pDevicePWM ); pDeviceFile = open ( pCommand, O_WRONLY ); if ( pDeviceFile < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_close : open unexport pwm 0 : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -2; } sprintf ( pCommand, "0" ); if ( write ( pDeviceFile, pCommand, strlen ( pCommand ) ) < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_close : write unexport pwm 0 : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ close ( pDeviceFile ); return -3; } close ( pDeviceFile ); return 0; } static int device_buzzer_on(uint8_t *pDeviceBuzzer, uint32_t Hz) { int pDeviceFile; char pCommand[128] = {0}; uint32_t Value; if ( pDeviceBuzzer == (uint8_t *)0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf ( "device_buzzer_on : Input Parameter error\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -1; } sprintf ( pCommand, "%s/period", pDeviceBuzzer ); pDeviceFile = open ( pCommand, O_WRONLY ); if ( pDeviceFile < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_on : open period : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -2; } Value = 1000000000; Value /= Hz; sprintf ( pCommand, "%d", Value ); if ( write ( pDeviceFile, pCommand, strlen ( pCommand ) ) < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_on : write period : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ close ( pDeviceFile ); return -3; } close ( pDeviceFile ); sprintf ( pCommand, "%s/duty_cycle", pDeviceBuzzer ); pDeviceFile = open ( pCommand, O_WRONLY ); if ( pDeviceFile < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_on : open duty_cycle : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -2; } sprintf ( pCommand, "%d", ( Value >> 1 ) ); if ( write ( pDeviceFile, pCommand, strlen ( pCommand ) ) < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_on : write duty_cycle : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ close ( pDeviceFile ); return -3; } close ( pDeviceFile ); sprintf ( pCommand, "%s/enable", pDeviceBuzzer ); pDeviceFile = open ( pCommand, O_WRONLY ); if ( pDeviceFile < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_on : open enable : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -2; } sprintf ( pCommand, "1" ); if ( write ( pDeviceFile, pCommand, strlen ( pCommand ) ) < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_on : write enable : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ close ( pDeviceFile ); return -3; } close ( pDeviceFile ); return 0; } static int device_buzzer_off(uint8_t *pDeviceBuzzer) { int pDeviceFile; char pCommand[128] = {0}; uint32_t Value; if ( pDeviceBuzzer == (uint8_t *)0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf ( "device_buzzer_off : Input Parameter error\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -1; } sprintf ( pCommand, "%s/enable", pDeviceBuzzer ); pDeviceFile = open ( pCommand, O_WRONLY ); if ( pDeviceFile < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_off : open enable : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ return -2; } sprintf ( pCommand, "0" ); if ( write ( pDeviceFile, pCommand, strlen ( pCommand ) ) < 0 ) { #ifdef DEVICE_BUZZER_DEBUG_MESSAGE printf( "device_buzzer_off : write enable : Fail\n" ); #endif /* DEVICE_BUZZER_DEBUG_MESSAGE */ close ( pDeviceFile ); return -3; } close ( pDeviceFile ); return 0; } /***************************************************************************/ /* Functions */ /***************************************************************************/ /* Buzzer Device Open Return 0 = Opened -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ int buzzer_open(void) { if ( device_buzzer_open(DEVICE_PWM_CHIP) < 0 ) { return -1; } return 0; } /* Buzzer Device Close Return 0 = Opened -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ int buzzer_close(void) { if ( device_buzzer_close(DEVICE_PWM_CHIP) < 0 ) { return -1; } return 0; } /* Buzzer Device Sound On Return 0 = Opened -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ int buzzer_on(uint32_t Hz) { return device_buzzer_on( DEVICE_BUZZER, Hz ); } /* Buzzer Device Sound On with Music Code Return 0 = Opened -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ int buzzer_on_code(MusicFrequencyCode_t MusicFrequencyCode, uint32_t Octave) { uint32_t Hz; Hz = device_buzzer_frequency( MusicFrequencyCode, Octave); if ( Hz != 0 ) { return device_buzzer_on( DEVICE_BUZZER, Hz ); } else { return -1; } } /* Buzzer Device Sound Off Return 0 = Opened -1 = Input Parameter Error -2 = Fail to Access Device -3 = Fail to Operation */ int buzzer_off(void) { return device_buzzer_off( DEVICE_BUZZER ); }