p igmon
/
uGen4x
PCM Digital Synthesizer
param_work.cpp@0:ad6637c36dc7, 2016-09-02 (annotated)
- Committer:
- p_igmon
- Date:
- Fri Sep 02 13:24:16 2016 +0000
- Revision:
- 0:ad6637c36dc7
for Micro Gen4 Synthesizer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
p_igmon | 0:ad6637c36dc7 | 1 | #include "synthesizer.h" |
p_igmon | 0:ad6637c36dc7 | 2 | |
p_igmon | 0:ad6637c36dc7 | 3 | extern Serial pc; |
p_igmon | 0:ad6637c36dc7 | 4 | //extern RawSerial pc; |
p_igmon | 0:ad6637c36dc7 | 5 | extern U32 PresetVoiceAmount; |
p_igmon | 0:ad6637c36dc7 | 6 | extern U32 SGenAmount; |
p_igmon | 0:ad6637c36dc7 | 7 | |
p_igmon | 0:ad6637c36dc7 | 8 | uint8_t com[16]; |
p_igmon | 0:ad6637c36dc7 | 9 | uint8_t *com_ptr; |
p_igmon | 0:ad6637c36dc7 | 10 | |
p_igmon | 0:ad6637c36dc7 | 11 | volatile U8 *param_rdptr; |
p_igmon | 0:ad6637c36dc7 | 12 | volatile U8 *param_wrptr; |
p_igmon | 0:ad6637c36dc7 | 13 | volatile U8 param_receivebuf[PARAM_BUFSIZE]; |
p_igmon | 0:ad6637c36dc7 | 14 | |
p_igmon | 0:ad6637c36dc7 | 15 | void init_param(void){ |
p_igmon | 0:ad6637c36dc7 | 16 | param_wrptr = param_rdptr = ¶m_receivebuf[0]; |
p_igmon | 0:ad6637c36dc7 | 17 | com_ptr = &com[0]; |
p_igmon | 0:ad6637c36dc7 | 18 | |
p_igmon | 0:ad6637c36dc7 | 19 | } |
p_igmon | 0:ad6637c36dc7 | 20 | |
p_igmon | 0:ad6637c36dc7 | 21 | int strxcmp(uint8_t *str1 ,uint8_t *str2){ |
p_igmon | 0:ad6637c36dc7 | 22 | uint8_t *c1; |
p_igmon | 0:ad6637c36dc7 | 23 | uint8_t *c2; |
p_igmon | 0:ad6637c36dc7 | 24 | c1 = str1; |
p_igmon | 0:ad6637c36dc7 | 25 | c2 = str2; |
p_igmon | 0:ad6637c36dc7 | 26 | if ((*c1 == 0x0d)||(*c1 == 0x0a)) return 0; |
p_igmon | 0:ad6637c36dc7 | 27 | while(*c1 != 0x0d){ |
p_igmon | 0:ad6637c36dc7 | 28 | if (*c1++ != *c2++) return 0; |
p_igmon | 0:ad6637c36dc7 | 29 | } |
p_igmon | 0:ad6637c36dc7 | 30 | return -1; |
p_igmon | 0:ad6637c36dc7 | 31 | } |
p_igmon | 0:ad6637c36dc7 | 32 | |
p_igmon | 0:ad6637c36dc7 | 33 | void name2pc(void){ |
p_igmon | 0:ad6637c36dc7 | 34 | uint8_t c; |
p_igmon | 0:ad6637c36dc7 | 35 | uint8_t *ptr = (uint8_t *)&PresetVoice[0]; |
p_igmon | 0:ad6637c36dc7 | 36 | U32 len = PresetVoiceAmount; |
p_igmon | 0:ad6637c36dc7 | 37 | while (len--){ |
p_igmon | 0:ad6637c36dc7 | 38 | c = *ptr++ & 0xff; |
p_igmon | 0:ad6637c36dc7 | 39 | pc.putc(c); |
p_igmon | 0:ad6637c36dc7 | 40 | } |
p_igmon | 0:ad6637c36dc7 | 41 | |
p_igmon | 0:ad6637c36dc7 | 42 | } |
p_igmon | 0:ad6637c36dc7 | 43 | |
p_igmon | 0:ad6637c36dc7 | 44 | void sgen2pc(void){ |
p_igmon | 0:ad6637c36dc7 | 45 | uint8_t c; |
p_igmon | 0:ad6637c36dc7 | 46 | uint8_t *ptr = (uint8_t *)&sgen[0]; |
p_igmon | 0:ad6637c36dc7 | 47 | U32 len = SGenAmount; |
p_igmon | 0:ad6637c36dc7 | 48 | while (len--){ |
p_igmon | 0:ad6637c36dc7 | 49 | c = *ptr++ & 0xff; |
p_igmon | 0:ad6637c36dc7 | 50 | pc.putc(c); |
p_igmon | 0:ad6637c36dc7 | 51 | } |
p_igmon | 0:ad6637c36dc7 | 52 | |
p_igmon | 0:ad6637c36dc7 | 53 | } |
p_igmon | 0:ad6637c36dc7 | 54 | |
p_igmon | 0:ad6637c36dc7 | 55 | void name2gen(void){ |
p_igmon | 0:ad6637c36dc7 | 56 | uint8_t *ptr = (uint8_t *)&PresetVoice[0]; |
p_igmon | 0:ad6637c36dc7 | 57 | U32 len = PresetVoiceAmount; |
p_igmon | 0:ad6637c36dc7 | 58 | while (len){ |
p_igmon | 0:ad6637c36dc7 | 59 | if(param_rdptr != param_wrptr){ |
p_igmon | 0:ad6637c36dc7 | 60 | *ptr++ = *param_rdptr; |
p_igmon | 0:ad6637c36dc7 | 61 | if (++param_rdptr >¶m_receivebuf[255]) param_rdptr = ¶m_receivebuf[0];// |
p_igmon | 0:ad6637c36dc7 | 62 | len--; |
p_igmon | 0:ad6637c36dc7 | 63 | } |
p_igmon | 0:ad6637c36dc7 | 64 | } |
p_igmon | 0:ad6637c36dc7 | 65 | } |
p_igmon | 0:ad6637c36dc7 | 66 | |
p_igmon | 0:ad6637c36dc7 | 67 | void sgen2gen(void){ |
p_igmon | 0:ad6637c36dc7 | 68 | uint8_t *ptr = (uint8_t *)&sgen[0]; |
p_igmon | 0:ad6637c36dc7 | 69 | U32 len = SGenAmount; |
p_igmon | 0:ad6637c36dc7 | 70 | while (len){ |
p_igmon | 0:ad6637c36dc7 | 71 | if(param_rdptr != param_wrptr){ |
p_igmon | 0:ad6637c36dc7 | 72 | *ptr++ = *param_rdptr; |
p_igmon | 0:ad6637c36dc7 | 73 | if (++param_rdptr >¶m_receivebuf[255]) param_rdptr = ¶m_receivebuf[0];// |
p_igmon | 0:ad6637c36dc7 | 74 | len--; |
p_igmon | 0:ad6637c36dc7 | 75 | } |
p_igmon | 0:ad6637c36dc7 | 76 | } |
p_igmon | 0:ad6637c36dc7 | 77 | } |
p_igmon | 0:ad6637c36dc7 | 78 | |
p_igmon | 0:ad6637c36dc7 | 79 | void param_work(void){ |
p_igmon | 0:ad6637c36dc7 | 80 | uint8_t c; |
p_igmon | 0:ad6637c36dc7 | 81 | while(param_rdptr != param_wrptr){ |
p_igmon | 0:ad6637c36dc7 | 82 | /* レシーブバッファが空なら、リターン */ |
p_igmon | 0:ad6637c36dc7 | 83 | c = *param_rdptr; |
p_igmon | 0:ad6637c36dc7 | 84 | if (++param_rdptr >¶m_receivebuf[255]) param_rdptr = ¶m_receivebuf[0];// |
p_igmon | 0:ad6637c36dc7 | 85 | if (c == 0x0a){ |
p_igmon | 0:ad6637c36dc7 | 86 | /* compare command */ |
p_igmon | 0:ad6637c36dc7 | 87 | com_ptr = &com[0]; |
p_igmon | 0:ad6637c36dc7 | 88 | if(strxcmp(&com[0],(uint8_t *)"name2PC")){name2pc();} |
p_igmon | 0:ad6637c36dc7 | 89 | else if(strxcmp(&com[0],(uint8_t *)"gen2PC")){sgen2pc();} |
p_igmon | 0:ad6637c36dc7 | 90 | else if(strxcmp(&com[0],(uint8_t *)"name2GEN")){name2gen();} |
p_igmon | 0:ad6637c36dc7 | 91 | else if(strxcmp(&com[0],(uint8_t *)"gen2GEN")){ |
p_igmon | 0:ad6637c36dc7 | 92 | sgen2gen(); |
p_igmon | 0:ad6637c36dc7 | 93 | save2from(); |
p_igmon | 0:ad6637c36dc7 | 94 | lcd_print2("Saved Parameter "); |
p_igmon | 0:ad6637c36dc7 | 95 | } |
p_igmon | 0:ad6637c36dc7 | 96 | }else{ |
p_igmon | 0:ad6637c36dc7 | 97 | *com_ptr++ = c; |
p_igmon | 0:ad6637c36dc7 | 98 | } |
p_igmon | 0:ad6637c36dc7 | 99 | } |
p_igmon | 0:ad6637c36dc7 | 100 | } |
p_igmon | 0:ad6637c36dc7 | 101 | |
p_igmon | 0:ad6637c36dc7 | 102 |