Suga koubou
/
Phone_ip_test
mbed Phone Platform UDP to DAC/ADC test
main.cpp@0:c0c1269a8f51, 2010-12-01 (annotated)
- Committer:
- okini3939
- Date:
- Wed Dec 01 14:35:05 2010 +0000
- Revision:
- 0:c0c1269a8f51
Who changed what in which revision?
User | Revision | Line number | New 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 | // óMf[^æ¾ |
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 | // Ú±Ìèæ©`FbNµAf[^Û¶// |
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 | // TvOèÝ 8KHz |
okini3939 | 0:c0c1269a8f51 | 70 | void int_sample () { |
okini3939 | 0:c0c1269a8f51 | 71 | char c; |
okini3939 | 0:c0c1269a8f51 | 72 | |
okini3939 | 0:c0c1269a8f51 | 73 | // óMf[^Ķ |
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 | // Mf[^¶¬ |
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 | // lbg[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 | // ÝJn |
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 | // Mobt@ªÜÁ½ç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 | // Ú±^CAEg 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 |