SDG+USBHost(Mouse) Sample
Dependencies: Sound_Generator USBHost_custom
Fork of SDG_Mouse_Sample by
main.cpp
00001 #include "mbed.h" 00002 #include "USBHostMouse.h" 00003 extern "C" { 00004 #include "devdrv_sdg.h" 00005 } 00006 /* defines */ 00007 #define SDG_OUTPUT_CH (1) 00008 #define DEFAULT_LOUDNESS (4) 00009 #define DIV_MAX (100) 00010 #define DIV_DEFAULT (75) 00011 #define DIV_MIN (50) 00012 #define MODE_TONE (2) 00013 00014 #define MOUSE_BUTTON_LEFGT (0x01) 00015 #define MOUSE_BUTTON_RIGHT (0x02) 00016 #define MOUSE_BUTTON_CENTER (0x04) 00017 00018 #define OCTAVE_MAX (4) 00019 #define OCTAVE_LEV_MAX (OCTAVE_MAX - 1) 00020 #define OCTAVE_LEV_MIN (0) 00021 static const struct { 00022 uint8_t tone_max; 00023 uint8_t tone_min; 00024 uint8_t sfs; 00025 } octave_table[OCTAVE_MAX] = { 00026 { 31, 16, 150}, /* octave 3(*) */ 00027 { 50, 24, 190}, /* octave 2(+) */ 00028 { 86, 43, 220}, /* octave 1() */ 00029 {124, 73, 255}, /* octave 0(-) */ 00030 }; 00031 00032 /* RAMS */ 00033 DigitalOut led(LED1); 00034 static NOTE output_note; 00035 static int32_t work_tone; 00036 static int32_t work_octave_lev; 00037 static int32_t work_div; 00038 00039 00040 void onMouseEvent(uint8_t buttons, int8_t x, int8_t y, int8_t z) { 00041 00042 //update div 00043 work_div += z; 00044 if (work_div < DIV_MIN) { 00045 work_div = DIV_MIN; 00046 } else if (work_div > DIV_MAX) { 00047 work_div = DIV_MAX; 00048 } 00049 if ((buttons & MOUSE_BUTTON_CENTER) == MOUSE_BUTTON_CENTER) { 00050 work_div = DIV_DEFAULT; 00051 } 00052 00053 //update tone 00054 x = x * (-1); 00055 work_tone += x; 00056 if (work_tone < (octave_table[work_octave_lev].tone_min * work_div * MODE_TONE)) { 00057 if (work_octave_lev != OCTAVE_LEV_MIN) { 00058 work_octave_lev--; 00059 work_tone = octave_table[work_octave_lev].tone_max * work_div * MODE_TONE; 00060 } else { 00061 work_tone = octave_table[work_octave_lev].tone_min * work_div * MODE_TONE; 00062 } 00063 } else if (work_tone > (octave_table[work_octave_lev].tone_max * work_div * MODE_TONE)) { 00064 if (work_octave_lev != OCTAVE_LEV_MAX) { 00065 work_octave_lev++; 00066 work_tone = octave_table[work_octave_lev].tone_min * work_div * MODE_TONE; 00067 } else { 00068 work_tone = octave_table[work_octave_lev].tone_max * work_div * MODE_TONE; 00069 } 00070 } 00071 00072 00073 if ((buttons & MOUSE_BUTTON_RIGHT) == MOUSE_BUTTON_RIGHT) { 00074 work_tone = 72 * work_div * MODE_TONE; 00075 work_octave_lev = 2; 00076 } 00077 output_note.tone = work_tone / (work_div * MODE_TONE); 00078 output_note.sfs = octave_table[work_octave_lev].sfs; 00079 00080 printf("sfs: %d, tone: %d, div: %d\r\n", output_note.sfs, output_note.tone, work_div); 00081 if ((buttons & MOUSE_BUTTON_LEFGT) == MOUSE_BUTTON_LEFGT) { 00082 // mouse left button clicked 00083 output_note.loud = DEFAULT_LOUDNESS; 00084 R_SDG_Tone(SDG_OUTPUT_CH, &output_note); 00085 } else { 00086 // mouse left button released 00087 output_note.loud = 0; 00088 R_SDG_Tone(SDG_OUTPUT_CH, &output_note); 00089 } 00090 } 00091 00092 void mouse_task(void const *) { 00093 int32_t ret; /* function result */ 00094 USBHostMouse mouse; 00095 00096 while(1) { 00097 // try to connect a USB mouse 00098 while(!mouse.connect()) 00099 Thread::wait(500); 00100 00101 // when connected, attach handler called on mouse event 00102 mouse.attachEvent(onMouseEvent); 00103 00104 ret = R_SDG_Open(SDG_OUTPUT_CH, R_SDG_CLOCK_4); 00105 if (ret < 0) { 00106 printf("SDG Open Error\r\n"); 00107 } 00108 00109 00110 // wait until the mouse is disconnected 00111 while(mouse.connected()) 00112 Thread::wait(500); 00113 00114 ret = R_SDG_Close(SDG_OUTPUT_CH); 00115 if (ret < 0) { 00116 printf("SDG Close Error\r\n"); 00117 } 00118 } 00119 } 00120 00121 int main() { 00122 // init SDG Note 00123 work_tone = 72; /* C */ 00124 work_octave_lev = 2; 00125 work_div = DIV_DEFAULT; 00126 output_note.tone = work_tone; 00127 output_note.sfs = octave_table[work_octave_lev].sfs; 00128 output_note.loud = 0; 00129 output_note.attenuation = 0; 00130 00131 Thread mouseTask(mouse_task, NULL, osPriorityNormal, 256 * 4); 00132 while(1) { 00133 led=!led; 00134 Thread::wait(500); 00135 } 00136 }
Generated on Tue Jul 12 2022 20:47:31 by 1.7.2