mbed Phone Platform UDP to DAC/ADC test

Dependencies:   mbed

Committer:
okini3939
Date:
Wed Dec 01 14:35:05 2010 +0000
Revision:
0:c0c1269a8f51

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:c0c1269a8f51 1 #include "mbed.h"
okini3939 0:c0c1269a8f51 2 #include "EthernetNetIf.h"
okini3939 0:c0c1269a8f51 3 #include "UDPSocket.h"
okini3939 0:c0c1269a8f51 4 #include "RingBuffer.h"
okini3939 0:c0c1269a8f51 5 #include "ulaw.h"
okini3939 0:c0c1269a8f51 6
okini3939 0:c0c1269a8f51 7 #define FREQ 8000
okini3939 0:c0c1269a8f51 8 #define MTU 1500
okini3939 0:c0c1269a8f51 9 #define MTU2 700
okini3939 0:c0c1269a8f51 10 #define BUFSIZE (MTU * 2)
okini3939 0:c0c1269a8f51 11 #define UDPPORT 10080
okini3939 0:c0c1269a8f51 12
okini3939 0:c0c1269a8f51 13 //EthernetNetIf eth;
okini3939 0:c0c1269a8f51 14 EthernetNetIf eth(IpAddr(192,168,2,101), IpAddr(255,255,255,0), IpAddr(192,168,2,1), IpAddr(192,168,2,1));
okini3939 0:c0c1269a8f51 15 UDPSocket dupsock;
okini3939 0:c0c1269a8f51 16 Host remote;
okini3939 0:c0c1269a8f51 17 Ticker ticker;
okini3939 0:c0c1269a8f51 18
okini3939 0:c0c1269a8f51 19 DigitalIn sw1(p29);
okini3939 0:c0c1269a8f51 20 DigitalIn sw2(p30);
okini3939 0:c0c1269a8f51 21 DigitalOut led0(p19), led1(LED1), led2(LED2), led3(LED3), led4(LED4);
okini3939 0:c0c1269a8f51 22 AnalogIn adc(p17);
okini3939 0:c0c1269a8f51 23 AnalogOut dac(p18);
okini3939 0:c0c1269a8f51 24
okini3939 0:c0c1269a8f51 25 DigitalOut line1a(p12), line1b(p13);
okini3939 0:c0c1269a8f51 26 DigitalOut line2a(p14), line2b(p15);
okini3939 0:c0c1269a8f51 27 DigitalIn hook1(p11), hook2(p16);
okini3939 0:c0c1269a8f51 28 DigitalOut mixlocal(p21), mixline(p22), micsp(p23);
okini3939 0:c0c1269a8f51 29 DigitalOut led_y(p25), led_g(p26);
okini3939 0:c0c1269a8f51 30 DigitalIn eth_link(P1_25), eth_speed(P1_26);
okini3939 0:c0c1269a8f51 31
okini3939 0:c0c1269a8f51 32 RingBuffer buf1(BUFSIZE);
okini3939 0:c0c1269a8f51 33 RingBuffer buf2(BUFSIZE);
okini3939 0:c0c1269a8f51 34 int connect;
okini3939 0:c0c1269a8f51 35 int timeout;
okini3939 0:c0c1269a8f51 36
okini3939 0:c0c1269a8f51 37 // UDPŠ„ž‚Ý
okini3939 0:c0c1269a8f51 38 void onLisnerEvent (UDPSocketEvent e) {
okini3939 0:c0c1269a8f51 39 int len;
okini3939 0:c0c1269a8f51 40 char buf[MTU];
okini3939 0:c0c1269a8f51 41 Host recv;
okini3939 0:c0c1269a8f51 42
okini3939 0:c0c1269a8f51 43 if (e != UDPSOCKET_READABLE) return;
okini3939 0:c0c1269a8f51 44
okini3939 0:c0c1269a8f51 45 // ŽóMƒf[ƒ^Žæ“¾
okini3939 0:c0c1269a8f51 46 len = dupsock.recvfrom(buf, MTU, &recv);
okini3939 0:c0c1269a8f51 47
okini3939 0:c0c1269a8f51 48 // Ú‘±’†‚ֈڍs
okini3939 0:c0c1269a8f51 49 if (connect == 0) {
okini3939 0:c0c1269a8f51 50 remote = recv;
okini3939 0:c0c1269a8f51 51 IpAddr ip = remote.getIp();
okini3939 0:c0c1269a8f51 52 // printf("connection from %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);
okini3939 0:c0c1269a8f51 53
okini3939 0:c0c1269a8f51 54 connect = 1;
okini3939 0:c0c1269a8f51 55 // mixline = 1;
okini3939 0:c0c1269a8f51 56 mixlocal = 1;
okini3939 0:c0c1269a8f51 57 micsp = 1;
okini3939 0:c0c1269a8f51 58 led2 = 1;
okini3939 0:c0c1269a8f51 59 }
okini3939 0:c0c1269a8f51 60
okini3939 0:c0c1269a8f51 61 // Ú‘±’†‚Ì‘ŠŽèæ‚©ƒ`ƒFƒbƒN‚µAƒf[ƒ^•Û‘¶//
okini3939 0:c0c1269a8f51 62 // if (remote.getIp() == recv.getIp()) {
okini3939 0:c0c1269a8f51 63 buf2.put(buf, len);
okini3939 0:c0c1269a8f51 64 timeout = FREQ;
okini3939 0:c0c1269a8f51 65 led3 = led3 ? 0 : 1;
okini3939 0:c0c1269a8f51 66 // }
okini3939 0:c0c1269a8f51 67 }
okini3939 0:c0c1269a8f51 68
okini3939 0:c0c1269a8f51 69 // ƒTƒ“ƒvƒŠƒ“ƒOŠ„‚荞‚Ý 8KHz
okini3939 0:c0c1269a8f51 70 void int_sample () {
okini3939 0:c0c1269a8f51 71 char c;
okini3939 0:c0c1269a8f51 72
okini3939 0:c0c1269a8f51 73 // ŽóMƒf[ƒ^Ä¶
okini3939 0:c0c1269a8f51 74 if (! buf2.get(c)) {
okini3939 0:c0c1269a8f51 75 dac.write_u16(ulaw2pcm(c));
okini3939 0:c0c1269a8f51 76 // dac.write_u16((unsigned short)c << 8);
okini3939 0:c0c1269a8f51 77 }
okini3939 0:c0c1269a8f51 78
okini3939 0:c0c1269a8f51 79 // ‘—Mƒf[ƒ^¶¬
okini3939 0:c0c1269a8f51 80 if (connect && buf1.available()) {
okini3939 0:c0c1269a8f51 81 buf1.put(pcm2ulaw(adc.read_u16()));
okini3939 0:c0c1269a8f51 82 }
okini3939 0:c0c1269a8f51 83
okini3939 0:c0c1269a8f51 84 if (timeout) timeout --;
okini3939 0:c0c1269a8f51 85 }
okini3939 0:c0c1269a8f51 86
okini3939 0:c0c1269a8f51 87
okini3939 0:c0c1269a8f51 88 int main () {
okini3939 0:c0c1269a8f51 89 int len, last;
okini3939 0:c0c1269a8f51 90 char buf[MTU];
okini3939 0:c0c1269a8f51 91 EthernetErr r;
okini3939 0:c0c1269a8f51 92 Host send;
okini3939 0:c0c1269a8f51 93
okini3939 0:c0c1269a8f51 94 connect = 0;
okini3939 0:c0c1269a8f51 95 timeout = 0;
okini3939 0:c0c1269a8f51 96
okini3939 0:c0c1269a8f51 97 // ƒlƒbƒgƒ[ƒN‰Šú‰»
okini3939 0:c0c1269a8f51 98 led_g = eth_link ? 0 : 1;
okini3939 0:c0c1269a8f51 99 led_y = eth_speed ? 0 : 1;
okini3939 0:c0c1269a8f51 100 r = eth.setup();
okini3939 0:c0c1269a8f51 101 if (r) {
okini3939 0:c0c1269a8f51 102 printf("Error %d in setup.\n", r);
okini3939 0:c0c1269a8f51 103 return -1;
okini3939 0:c0c1269a8f51 104 }
okini3939 0:c0c1269a8f51 105 dupsock.setOnEvent(&onLisnerEvent);
okini3939 0:c0c1269a8f51 106 // dupsock.bind(Host(IP_ADDR_ANY, UDPPORT));
okini3939 0:c0c1269a8f51 107 dupsock.bind(Host(eth.getIp(), UDPPORT));
okini3939 0:c0c1269a8f51 108
okini3939 0:c0c1269a8f51 109 // Š„ž‚ÝŠJŽn
okini3939 0:c0c1269a8f51 110 ticker.attach_us(&int_sample, 1000000UL / FREQ);
okini3939 0:c0c1269a8f51 111 led0 = 1;
okini3939 0:c0c1269a8f51 112 led1 = 1;
okini3939 0:c0c1269a8f51 113
okini3939 0:c0c1269a8f51 114 line1a = 1;
okini3939 0:c0c1269a8f51 115 hook1.mode(PullUp);
okini3939 0:c0c1269a8f51 116 hook2.mode(PullUp);
okini3939 0:c0c1269a8f51 117
okini3939 0:c0c1269a8f51 118 last = hook1;
okini3939 0:c0c1269a8f51 119 for (;;) {
okini3939 0:c0c1269a8f51 120 led4 = hook1 ? 0 : 1;
okini3939 0:c0c1269a8f51 121 led_g = eth_link ? 0 : 1;
okini3939 0:c0c1269a8f51 122 led_y = eth_speed ? 0 : 1;
okini3939 0:c0c1269a8f51 123
okini3939 0:c0c1269a8f51 124 if (hook1 != last) {
okini3939 0:c0c1269a8f51 125 buf[0] = hook1;
okini3939 0:c0c1269a8f51 126 dupsock.sendto(buf, 1, &remote);
okini3939 0:c0c1269a8f51 127 last = hook1;
okini3939 0:c0c1269a8f51 128 }
okini3939 0:c0c1269a8f51 129 /*
okini3939 0:c0c1269a8f51 130 // ‘—Mƒoƒbƒtƒ@‚ª—­‚Ü‚Á‚½‚ç‘—M
okini3939 0:c0c1269a8f51 131 if (connect && buf1.use() >= MTU) {
okini3939 0:c0c1269a8f51 132 len = buf1.get(buf, MTU);
okini3939 0:c0c1269a8f51 133 if (len > 0)
okini3939 0:c0c1269a8f51 134 dupsock.sendto(buf, len, &remote);
okini3939 0:c0c1269a8f51 135 }
okini3939 0:c0c1269a8f51 136 */
okini3939 0:c0c1269a8f51 137 /*
okini3939 0:c0c1269a8f51 138 // Ú‘±ƒ^ƒCƒ€ƒAƒEƒg or Ø’fƒ{ƒ^ƒ“
okini3939 0:c0c1269a8f51 139 if (connect && (! timeout || ! sw2)) {
okini3939 0:c0c1269a8f51 140 led1 = 0;
okini3939 0:c0c1269a8f51 141 connect = 0;
okini3939 0:c0c1269a8f51 142 buf1.clear();
okini3939 0:c0c1269a8f51 143 buf2.clear();
okini3939 0:c0c1269a8f51 144 }
okini3939 0:c0c1269a8f51 145
okini3939 0:c0c1269a8f51 146 // Ú‘±ƒ{ƒ^ƒ“
okini3939 0:c0c1269a8f51 147 if (! connect && ! sw1) {
okini3939 0:c0c1269a8f51 148 send = Host(IpAddr(192,168,0,4), UDPPORT, NULL);
okini3939 0:c0c1269a8f51 149 dupsock.bind(send);
okini3939 0:c0c1269a8f51 150 buf1.clear();
okini3939 0:c0c1269a8f51 151 buf2.clear();
okini3939 0:c0c1269a8f51 152 timeout = FREQ;
okini3939 0:c0c1269a8f51 153 connect = 1;
okini3939 0:c0c1269a8f51 154 }
okini3939 0:c0c1269a8f51 155 */
okini3939 0:c0c1269a8f51 156 Net::poll();
okini3939 0:c0c1269a8f51 157 }
okini3939 0:c0c1269a8f51 158
okini3939 0:c0c1269a8f51 159 }
okini3939 0:c0c1269a8f51 160