CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

UDPでリモートIO

UDPはIPにポート番号の薄い皮をかぶせたもの・・」なんて書きましたが、
これは間違いでパケット構造からいうとポート番号はアプリケーションデータに直接かぶっている一番内側の皮ですね。栗でいうと渋皮か。

UDPの上にアプリケーション層を乗せました。文字列を返すだけではおもしろくないので非常に簡単なアプリケーションですが、UDPデータの先頭が
'A'なら続く文字列を液晶表示器へ
'B'なら続く文字列をシリアル出力へ
'C'なら続く1バイトデータを8ビットパラレルLED出力へ
'D'ならボード上のDIPスイッチの状態を読んで返送
という処理をするようにしました。
これでごく簡単なリモートIOとして動作するようになりました。


void apl_main( void )
{
byte *p;

p = txudp.udpdata; /* 送信UDPデータの先頭アドレス*/
switch( rxudp.udpdata[0] ){ /* 受信UDPデータ先頭 */
case 'A':
lcdctr(0,1); /* 液晶に文字列を表示 */
lcdstr(rxudp.udpdata+1);
break;
case 'B':
putstr(rxudp.udpdata+1); /* シリアルに文字列を出力 */
break;
case 'C':
led(*(rxudp.udpdata+1)); /* パラレルLEDにデータを出力 */
break;
case 'D':
sprintf( p, "DIP_in=%02X",dip()); /* DIPスイッチの状態をUDPで返送 */
udp_output( strlen( p ) + 1 );
break;
default:
break;
}
}