Skip to content
Snippets Groups Projects
Commit a3dd0e9f authored by Tom Feng's avatar Tom Feng
Browse files

cmd seems working

parent 7237058f
No related branches found
No related tags found
1 merge request!16Withtime
#ifndef __BUFFER_H__ #ifndef __BUFFER_H__
#define __BUFFER_H__ #define __BUFFER_H__
#define BUFF_FULL -1 #define BUFF_FULL -10
#define BUFF_EMPTY -2 #define BUFF_EMPTY -20
#define BUFF_NOTREADY -3 #define BUFF_NOTREADY -30
#define BUFF_CANTFIT -40
#define TRN_I_OFFSET 0 #define TRN_I_OFFSET 0
#define TMN_I_OFFSET 1 #define TMN_I_OFFSET 1
...@@ -20,8 +21,15 @@ typedef struct ...@@ -20,8 +21,15 @@ typedef struct
int Current; int Current;
} Buffer; } Buffer;
char D2ASCII(int Num);
int BufferReady(Buffer *Buf);
int FeedBuffer(Buffer *Buf, char Char); int FeedBuffer(Buffer *Buf, char Char);
// Fill Char with the char in Start // Fill Char with the char in Start
int FeedBufferStr(Buffer *Buf, char* Str, int Len);
int BufferFIFO(Buffer *Buf, char *Char); int BufferFIFO(Buffer *Buf, char *Char);
// Pop from Start // Pop from Start
...@@ -34,5 +42,19 @@ int BufferFILO(Buffer *Buf, char *Char); ...@@ -34,5 +42,19 @@ int BufferFILO(Buffer *Buf, char *Char);
int BufferPopLast(Buffer* Buf); int BufferPopLast(Buffer* Buf);
// Clear Buffer // Clear Buffer
void ClearBuffer(Buffer* Buf); int ClearBuffer(Buffer* Buf);
int BufferShrinkFIFO(Buffer* Buf, int Num);
int BufferGet(Buffer *Buf, char *CharList, int ListSize, int GetSize);
// get the number of char's till first 0, out put Buf->Length when no 0
int BufferGetStrSize(Buffer *Buf);
// must be used with BufferGetStrSize
// get all char into CharList untill the first 0
int BufferGetStr(Buffer *Buf, char* CharList);
int BufferPopIfTerminate(Buffer *Buf);
int BufferPopIfSpace(Buffer *Buf);
int BufferGetNumber(Buffer *Buf);
#endif #endif
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
#define __CMD_H__ #define __CMD_H__
#include <buffer.h> #include <buffer.h>
#include <myclock.h>
#define CMD_HALT 0 #define CMD_HALT 0
#define CMD_NOINPUT 1 #define CMD_NOINPUT 1
int FeedCommand(Buffer* Buf); int FeedCommand(Buffer** BufferList);
int SetTrainSpeed(Buffer *Out, int ID, int Speed);
#endif #endif
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
*/ */
#define ESC_CANVAS 27 #define ESC_CANVAS 27
#define UP 65
#define DOWN 66
#define RIGHT 67
#define LEFT 68
#define CLEAR_SCREEN bwprintf(COM2, "%c[2J", ESC_CANVAS) #define CLEAR_SCREEN bwprintf(COM2, "%c[2J", ESC_CANVAS)
#define CLEARLINE bwprintf(COM2, "%c[1K",ESC_CANVAS) #define CLEARLINE bwprintf(COM2, "%c[1K",ESC_CANVAS)
...@@ -25,9 +30,15 @@ typedef struct ...@@ -25,9 +30,15 @@ typedef struct
int bChanged; int bChanged;
} CursorPos; } CursorPos;
int ClearScreen(Buffer *Buf);
int ClearLine(Buffer *Buf);
int MoveCursor(Buffer *Buf,char Direction, int Num);
int CursorPOS(Buffer *Buf, int x, int y);
void DrawLine_H(const char Element, const int Length); void DrawLine_H(const char Element, const int Length);
void DrawLine_V(const char Element, const int Length); void DrawLine_V(const char Element, const int Length);
void DrawPanel(); void DrawPanel();
void DrawClock(Clock* MyClock, CursorPos* InCursor); void DrawClock(Buffer** BufferList, Clock* MyClock, CursorPos* InCursor);
int InteractiveInput(Buffer* BufList[],CursorPos* InCursor); int InteractiveInput(Buffer* BufList[],CursorPos* InCursor);
#endif #endif
...@@ -2,11 +2,15 @@ ...@@ -2,11 +2,15 @@
#define __MY_CLOCK_H__ #define __MY_CLOCK_H__
#define CLOCK_LOAD_VALUE 50800 #define CLOCK_LOAD_VALUE 50800
#define SLOW_LOAD_VALUE 200
#define TIMER_LOAD_VALUE 508000;
typedef struct typedef struct
{ {
unsigned int ClockCount; unsigned int ClockCount;
unsigned int LastTimerValue; unsigned int LastTimerValue;
//unsigned int LastClockValue;
//unsigned int* TimerValueRegister;
char bChanged; char bChanged;
} Clock; } Clock;
...@@ -15,4 +19,10 @@ typedef struct ...@@ -15,4 +19,10 @@ typedef struct
void InitClockCount(Clock* MyClock); void InitClockCount(Clock* MyClock);
// update the time count from start of the program // update the time count from start of the program
void UpdateClock(Clock* MyClock); void UpdateClock(Clock* MyClock);
/*
void InitQuickTimer();
void InitSlowTimer(Clock* TimerClock);
unsigned int GetQuick();
unsigned int GetSlow(Clock *TimerClock);
*/
#endif #endif
...@@ -6,8 +6,14 @@ ...@@ -6,8 +6,14 @@
#define COM1 0 #define COM1 0
#define COM2 1 #define COM2 1
#define O_FAILED -11
#define I_FAILED -21
int mygetc(int Channel,char* Char); int mygetc(int Channel,char* Char);
int myputc(int Channel,char Char); int myputc(int Channel,char Char);
int PutToBuffer(char Char, Buffer* Buf); int PutToBuffer(char Char, Buffer* Buf);
int PutStrToBuffer(char *CharList, Buffer* Buf, int Len);
int OutPutFromBuffer(int Channel, Buffer* Buf); int OutPutFromBuffer(int Channel, Buffer* Buf);
int OutPutStrFromBuffer(int Channel, Buffer* Buf);
#endif #endif
...@@ -49,6 +49,26 @@ getc.o: getc.s ...@@ -49,6 +49,26 @@ getc.o: getc.s
getc.elf: getc.o getc.elf: getc.o
$(LD) $(LDFLAGS) -o $@ getc.o -lbwio -lgcc $(LD) $(LDFLAGS) -o $@ getc.o -lbwio -lgcc
stop.s: stop.c
$(XCC) -S $(CFLAGS) stop.c
stop.o: stop.s
$(AS) $(ASFLAGS) -o stop.o stop.s
stop.elf: stop.o
$(LD) $(LDFLAGS) -o $@ stop.o -lbwio -lgcc
tr.s: tr.c
$(XCC) -S $(CFLAGS) tr.c
tr.o: tr.s
$(AS) $(ASFLAGS) -o tr.o tr.s
tr.elf: tr.o
$(LD) $(LDFLAGS) -o $@ tr.o -lmyio -lbuffer -lbwio -lgcc
clean: clean:
-rm -f *.elf *.s *.o startup.map *.a *~ -rm -f *.elf *.s *.o startup.map *.a *~
Archive member included because of file (symbol) Archive member included because of file (symbol)
../lib/libmycanvas.a(mycanvas.o) ../lib/libmycanvas.a(mycanvas.o)
startup.o (DrawClock) startup.o (ClearScreen)
../lib/libmyclock.a(myclock.o) ../lib/libmyclock.a(myclock.o)
startup.o (InitClockCount) startup.o (InitClockCount)
../lib/libcmd.a(cmd.o) ../lib/libmycanvas.a(mycanvas.o) (FeedCommand) ../lib/libcmd.a(cmd.o) ../lib/libmycanvas.a(mycanvas.o) (FeedCommand)
../lib/libmyio.a(myio.o) ../lib/libmycanvas.a(mycanvas.o) (mygetc) ../lib/libmyio.a(myio.o) ../lib/libmycanvas.a(mycanvas.o) (mygetc)
../lib/libbuffer.a(buffer.o) ../lib/libmyio.a(myio.o) (FeedBuffer) ../lib/libbuffer.a(buffer.o) ../lib/libmycanvas.a(mycanvas.o) (BufferReady)
../lib/libbwio.a(bwio.o) startup.o (bwsetfifo) ../lib/libbwio.a(bwio.o) startup.o (bwsetfifo)
/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
../lib/libbwio.a(bwio.o) (__udivsi3) ../lib/libmycanvas.a(mycanvas.o) (__udivsi3)
/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o)
../lib/libmycanvas.a(mycanvas.o) (__divsi3)
/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
../lib/libbwio.a(bwio.o) (__umodsi3) ../lib/libbwio.a(bwio.o) (__umodsi3)
/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o)
...@@ -37,70 +39,92 @@ bss 0x0000000000000000 0x0 ...@@ -37,70 +39,92 @@ bss 0x0000000000000000 0x0
*(.bss) *(.bss)
0x0000000000000000 _BssEnd = . 0x0000000000000000 _BssEnd = .
text 0x0000000000000000 0x1ff0 text 0x0000000000000000 0x3634
*(.text) *(.text)
.text 0x0000000000000000 0x2f4 startup.o .text 0x0000000000000000 0x41c startup.o
0x0000000000000104 main 0x000000000000012c InitializeTrainAndTrack
0x000000000000022c main
0x0000000000000000 initialize 0x0000000000000000 initialize
0x00000000000000a8 runloop 0x00000000000000cc runloop
.text 0x00000000000002f4 0x5b8 ../lib/libmycanvas.a(mycanvas.o) .text 0x000000000000041c 0xc38 ../lib/libmycanvas.a(mycanvas.o)
0x00000000000002f4 DrawLine_H 0x00000000000009ac DrawLine_H
0x0000000000000580 DrawPanel 0x00000000000005a8 ClearLine
0x0000000000000350 DrawLine_V 0x0000000000000d44 DrawPanel
0x00000000000003f4 DrawClock 0x0000000000000a08 DrawLine_V
0x0000000000000700 InteractiveInput 0x00000000000004f4 ClearScreen
.text 0x00000000000008ac 0xf8 ../lib/libmyclock.a(myclock.o) 0x0000000000000484 GetPowerD
0x00000000000008ac InitClockCount 0x0000000000000aac DrawClock
0x0000000000000920 UpdateClock 0x000000000000041c Exponent
.text 0x00000000000009a4 0x70 ../lib/libcmd.a(cmd.o) 0x000000000000065c MoveCursor
0x00000000000009a4 FeedCommand 0x0000000000000790 CursorPOS
.text 0x0000000000000a14 0x2e8 ../lib/libmyio.a(myio.o) 0x0000000000000ec4 InteractiveInput
0x0000000000000be0 OutPutFromBuffer .text 0x0000000000001054 0xfc ../lib/libmyclock.a(myclock.o)
0x0000000000000ba4 PutToBuffer 0x0000000000001054 InitClockCount
0x0000000000000a14 mygetc 0x00000000000010c8 UpdateClock
0x0000000000000ad8 myputc .text 0x0000000000001150 0x458 ../lib/libcmd.a(cmd.o)
.text 0x0000000000000cfc 0x374 ../lib/libbuffer.a(buffer.o) 0x0000000000001150 FeedCommand
0x0000000000000f00 BufferFILO 0x00000000000014b4 SetTrainSpeed
0x0000000000000e58 BufferPopStart .text 0x00000000000015a8 0x4f4 ../lib/libmyio.a(myio.o)
0x0000000000000f88 BufferPopLast 0x000000000000185c OutPutFromBuffer
0x0000000000000cfc FeedBuffer 0x0000000000001738 PutToBuffer
0x0000000000000dd0 BufferFIFO 0x00000000000015a8 mygetc
0x000000000000103c ClearBuffer 0x0000000000001774 PutStrToBuffer
.text 0x0000000000001070 0xc54 ../lib/libbwio.a(bwio.o) 0x0000000000001964 OutPutStrFromBuffer
0x00000000000013e8 bwputr 0x000000000000166c myputc
0x0000000000001954 bwi2a .text 0x0000000000001a9c 0xaf8 ../lib/libbuffer.a(buffer.o)
0x0000000000001070 bwsetfifo 0x0000000000001b44 BufferReady
0x0000000000001244 bwputc 0x0000000000001a9c ASCII2NUM
0x00000000000016a4 bwa2d 0x000000000000200c BufferGet
0x0000000000001138 bwsetspeed 0x00000000000020fc BufferGetStrSize
0x0000000000001308 c2x 0x0000000000001db0 BufferFILO
0x000000000000174c bwa2i 0x0000000000001d04 BufferPopStart
0x00000000000015ec bwgetc 0x0000000000001f58 BufferShrinkFIFO
0x0000000000001810 bwui2a 0x0000000000001e38 BufferPopLast
0x00000000000019b8 bwformat 0x0000000000001ba0 FeedBuffer
0x00000000000014e4 bwputw 0x0000000000001c78 BufferFIFO
0x0000000000001c8c bwprintf 0x0000000000002380 BufferPopIfSpace
0x0000000000001368 bwputx 0x00000000000021e8 BufferGetStr
0x0000000000001468 bwputstr 0x0000000000001ef0 ClearBuffer
.text 0x0000000000001cc4 0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) 0x000000000000243c BufferGetNumber
0x0000000000001cc4 __udivsi3 0x00000000000022e4 BufferPopIfTerminate
0x0000000000001dbc __aeabi_uidivmod .text 0x0000000000002594 0xc54 ../lib/libbwio.a(bwio.o)
.text 0x0000000000001dd4 0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) 0x000000000000290c bwputr
0x0000000000001dd4 __umodsi3 0x0000000000002e78 bwi2a
.text 0x0000000000001ea0 0xe4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) 0x0000000000002594 bwsetfifo
0x0000000000001ea0 __modsi3 0x0000000000002768 bwputc
.text 0x0000000000001f84 0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) 0x0000000000002bc8 bwa2d
0x0000000000001f84 __aeabi_ldiv0 0x000000000000265c bwsetspeed
0x0000000000001f84 __div0 0x000000000000282c c2x
0x0000000000001f84 __aeabi_idiv0 0x0000000000002c70 bwa2i
0x0000000000002b10 bwgetc
0x0000000000002d34 bwui2a
0x0000000000002edc bwformat
0x0000000000002a08 bwputw
0x00000000000031b0 bwprintf
0x000000000000288c bwputx
0x000000000000298c bwputstr
.text 0x00000000000031e8 0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
0x00000000000031e8 __udivsi3
0x00000000000032e0 __aeabi_uidivmod
.text 0x00000000000032f8 0x140 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o)
0x00000000000032f8 __divsi3
0x0000000000003420 __aeabi_idivmod
.text 0x0000000000003438 0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
0x0000000000003438 __umodsi3
.text 0x0000000000003504 0xe4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o)
0x0000000000003504 __modsi3
.text 0x00000000000035e8 0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
0x00000000000035e8 __aeabi_ldiv0
0x00000000000035e8 __div0
0x00000000000035e8 __aeabi_idiv0
*(.got) *(.got)
.got 0x0000000000001f88 0x8 startup.o .got 0x00000000000035ec 0x8 startup.o
*(.got.plt) *(.got.plt)
.got.plt 0x0000000000001f90 0xc startup.o .got.plt 0x00000000000035f4 0xc startup.o
0x0000000000001f90 _GLOBAL_OFFSET_TABLE_ 0x00000000000035f4 _GLOBAL_OFFSET_TABLE_
*(.rodata) *(.rodata)
.rodata 0x0000000000001f9c 0x20 startup.o .rodata 0x0000000000003600 0x18 startup.o
.rodata 0x0000000000001fbc 0x34 ../lib/libmycanvas.a(mycanvas.o) .rodata 0x0000000000003618 0x1c ../lib/libmycanvas.a(mycanvas.o)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
...@@ -124,30 +148,35 @@ OUTPUT(startup.elf elf32-littlearm) ...@@ -124,30 +148,35 @@ OUTPUT(startup.elf elf32-littlearm)
.comment 0x000000000000005a 0x12 ../lib/libbuffer.a(buffer.o) .comment 0x000000000000005a 0x12 ../lib/libbuffer.a(buffer.o)
.comment 0x000000000000006c 0x12 ../lib/libbwio.a(bwio.o) .comment 0x000000000000006c 0x12 ../lib/libbwio.a(bwio.o)
.debug_line 0x0000000000000000 0x1c4 .debug_line 0x0000000000000000 0x256
.debug_line 0x0000000000000000 0x86 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) .debug_line 0x0000000000000000 0x86 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
.debug_line 0x0000000000000086 0x6f /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) .debug_line 0x0000000000000086 0x92 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o)
.debug_line 0x00000000000000f5 0x75 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) .debug_line 0x0000000000000118 0x6f /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
.debug_line 0x000000000000016a 0x5a /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) .debug_line 0x0000000000000187 0x75 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o)
.debug_line 0x00000000000001fc 0x5a /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
.debug_info 0x0000000000000000 0x1c4 .debug_info 0x0000000000000000 0x235
.debug_info 0x0000000000000000 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) .debug_info 0x0000000000000000 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
.debug_info 0x0000000000000071 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) .debug_info 0x0000000000000071 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o)
.debug_info 0x00000000000000e2 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) .debug_info 0x00000000000000e2 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
.debug_info 0x0000000000000153 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) .debug_info 0x0000000000000153 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o)
.debug_info 0x00000000000001c4 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
.debug_abbrev 0x0000000000000000 0x50 .debug_abbrev 0x0000000000000000 0x64
.debug_abbrev 0x0000000000000000 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) .debug_abbrev 0x0000000000000000 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
.debug_abbrev 0x0000000000000014 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) .debug_abbrev 0x0000000000000014 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o)
.debug_abbrev 0x0000000000000028 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) .debug_abbrev 0x0000000000000028 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
.debug_abbrev 0x000000000000003c 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) .debug_abbrev 0x000000000000003c 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o)
.debug_abbrev 0x0000000000000050 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
.debug_aranges 0x0000000000000000 0x80 .debug_aranges 0x0000000000000000 0xa0
.debug_aranges .debug_aranges
0x0000000000000000 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) 0x0000000000000000 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
.debug_aranges .debug_aranges
0x0000000000000020 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) 0x0000000000000020 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o)
.debug_aranges .debug_aranges
0x0000000000000040 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) 0x0000000000000040 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
.debug_aranges .debug_aranges
0x0000000000000060 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) 0x0000000000000060 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o)
.debug_aranges
0x0000000000000080 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
#include <bwio.h>
#include <buffer.h> #include <buffer.h>
int ASCII2NUM(char ch){
if(ch >= '0' && ch<= '9') return ch-'0';
if(ch >= 'a' && ch<= 'f') return ch-'a'+10;
if(ch>= 'A' && ch<= 'F') return ch-'A'+10;
return -1;
}
int BufferReady(Buffer *Buf)
{
int ready =((Buf != 0) && (Buf->Size > 0))? 1:0;
return ready;
}
int FeedBuffer(Buffer *Buf, char Char) int FeedBuffer(Buffer *Buf, char Char)
{ {
if(Buf->Size == 0) return BUFF_NOTREADY; if(BufferReady(Buf)){
if(Buf->Length == Buf->Size) return BUFF_FULL; if(Buf->Length == Buf->Size) return BUFF_FULL;
(Buf->Storage)[Buf->Current] = Char; (Buf->Storage)[Buf->Current] = Char;
Buf->Current = (Buf->Current + 1) % (Buf->Size); Buf->Current = (Buf->Current + 1) % (Buf->Size);
Buf->Length = Buf->Length + 1; Buf->Length = Buf->Length + 1;
return 0; return 0;
}else return BUFF_NOTREADY;
} }
int BufferFIFO(Buffer *Buf, char *Char) int BufferFIFO(Buffer *Buf, char *Char)
{ {
if(Buf->Size == 0) return BUFF_NOTREADY; if(BufferReady(Buf)){
if(Buf->Length == 0) return BUFF_EMPTY; if(Buf->Length == 0) return BUFF_EMPTY;
*Char = (Buf->Storage)[Buf->Start]; *Char = (Buf->Storage)[Buf->Start];
return 0; return 0;
}else return BUFF_NOTREADY;
} }
int BufferPopStart(Buffer *Buf) int BufferPopStart(Buffer *Buf)
{ {
if(Buf->Size == 0) return BUFF_NOTREADY; if(BufferReady(Buf)){
if(Buf->Length == 0) return BUFF_EMPTY; if(Buf->Length == 0) return BUFF_EMPTY;
Buf->Start = (Buf->Start +1) % Buf->Size; Buf->Start = (Buf->Start +1) % Buf->Size;
Buf->Length = (Buf->Length) - 1; Buf->Length = (Buf->Length) - 1;
return 0; return 0;
}else return BUFF_NOTREADY;
} }
int BufferFILO(Buffer *Buf, char *Char) int BufferFILO(Buffer *Buf, char *Char)
...@@ -37,15 +54,123 @@ int BufferFILO(Buffer *Buf, char *Char) ...@@ -37,15 +54,123 @@ int BufferFILO(Buffer *Buf, char *Char)
int BufferPopLast(Buffer *Buf) int BufferPopLast(Buffer *Buf)
{ {
if(Buf->Size == 0) return BUFF_NOTREADY; if(BufferReady(Buf)){
if(Buf->Length == 0) return BUFF_EMPTY; if(Buf->Length == 0) return BUFF_EMPTY;
Buf->Current = (Buf->Current - 1 + Buf->Size) % Buf->Size; Buf->Current = (Buf->Current - 1 + Buf->Size) % Buf->Size;
Buf->Length = (Buf->Length) - 1; Buf->Length = (Buf->Length) - 1;
return 0; return 0;
}else return BUFF_NOTREADY;
}
int ClearBuffer(Buffer *Buf)
{
if(BufferReady(Buf)){
Buf->Length = 0;
Buf->Current = Buf->Start;
return 0;
}else return BUFF_NOTREADY;
}
int BufferShrinkFIFO(Buffer *Buf, int Num)
{
if(BufferReady(Buf)){
int ActualShrink = (Num > Buf->Length)? (Buf->Length): Num;
Buf->Length = Buf->Length - ActualShrink;
Buf->Start = (Buf->Start + ActualShrink) % Buf->Size;
return 0;
}else return BUFF_NOTREADY;
}
int BufferGet(Buffer *Buf, char *CharList, int ListSize, int GetSize)
{
if(BufferReady(Buf)){
if(ListSize < GetSize) return -1;
int ActualGet = (GetSize > Buf->Length)? (Buf->Length): GetSize;
int i = 0;
int Start = Buf->Start;
for(;i<ActualGet; i++){
CharList[i] = (Buf->Storage)[Start + i];
}
return 0;
}else return BUFF_NOTREADY;
}
int BufferGetStrSize(Buffer *Buf){
if(BufferReady(Buf)){
int StrSize = 0;
int i = 0;
int Len = Buf->Length;
int Size = Buf->Size;
int Start = Buf->Start;
//bwprintf(1,"Entered GetStrSize,Len: %d\n\r",Buf->Length);
for(;i<Len;i++){
if(((Buf->Storage)[(Start+i)% Size]) == 0){
//bwprintf(1, "i: %d, char %d \n\r",i,(Buf->Storage)[(Start+i)%Size]);
return StrSize;
}
StrSize += 1;
//bwprintf(1, "i: %d, char: %d\n\r",i,(Buf->Storage)[(Start+i)%Size]);
}
return Len;
}else return BUFF_NOTREADY;
}
int BufferGetStr(Buffer *Buf, char* CharList){
if(BufferReady(Buf)){
int Len = Buf->Length;
int Size = Buf->Size;
int i = 0;
char c;
int Start = Buf->Start;
for(;i<Len; i++){
c = (Buf->Storage)[(Start+i)%Size];
if(c == 0) return 0;
CharList[i] = c;
}
return 0;
}else return BUFF_NOTREADY;
}
int BufferPopIfTerminate(Buffer *Buf)
{
if(BufferReady(Buf)){
if(Buf->Length == 0) return BUFF_EMPTY;
if((Buf->Storage)[Buf->Start] == 0) return BufferPopStart(Buf);
return 0;
}else return BUFF_NOTREADY;
}
int BufferPopIfSpace(Buffer *Buf)
{
if(BufferReady(Buf)){
if(Buf->Length == 0) return BUFF_EMPTY;
if((Buf->Storage)[Buf->Start] == ' ' || (Buf->Storage)[Buf->Start] == 13){
return BufferPopStart(Buf);
}
return 0;
}else return BUFF_NOTREADY;
} }
void ClearBuffer(Buffer *Buf) int BufferGetNumber(Buffer *Buf)
{ {
Buf->Length = 0; if(BufferReady(Buf)){
Buf->Current = Buf->Start; if(Buf->Length == 0) return BUFF_EMPTY;
char c;
int code = BufferFIFO(Buf,&c);
if(code != 0) return code;
BufferPopStart(Buf);
int num = 0;
int bNumExists = 0;
while(c >= '0' && c<= '9'){
bNumExists = 1;
num *= 10;
num += ASCII2NUM(c);
// get next number
code = BufferFIFO(Buf, &c);
if(code != 0) return code;
BufferPopStart(Buf);
}
if(bNumExists == 0) return -1;
return num;
}else return BUFF_NOTREADY;
} }
...@@ -56,7 +56,7 @@ int bwsetspeed( int channel, int speed ) { ...@@ -56,7 +56,7 @@ int bwsetspeed( int channel, int speed ) {
return 0; return 0;
case 2400: case 2400:
*high = 0x0; *high = 0x0;
*low = 0x90; *low = 0xbf;
return 0; return 0;
default: default:
return -1; return -1;
......
#include <bwio.h>
#include <cmd.h> #include <cmd.h>
#include <mycanvas.h> #include <mycanvas.h>
#include <myclock.h>
#include <myio.h> #include <myio.h>
int FeedCommand(Buffer* Buf) int FeedCommand(Buffer** BufferList)
{ {
char FirstChar; char FirstChar;
char SecondChar; char SecondChar;
Buffer* Buf = BufferList[TMN_I_OFFSET];
Buffer* TrainOBuf = BufferList[TRN_O_OFFSET];
BufferFIFO(Buf,&FirstChar); BufferFIFO(Buf,&FirstChar);
BufferPopStart(Buf); BufferPopStart(Buf);
BufferFIFO(Buf,&SecondChar); BufferFIFO(Buf,&SecondChar);
BufferPopStart(Buf); BufferPopStart(Buf);
//bwprintf(COM2, 'FeedCommand First %c\n\r', FirstChar);
switch(FirstChar){ switch(FirstChar){
case 'q': case 'q':
ClearBuffer(Buf); ClearBuffer(Buf);
return CMD_HALT; return CMD_HALT;
case: 't': break;
if(SecondChar == 'r'); case 't':
case: 'r': if(SecondChar == 'r'){
if(SecondChar == 'v'); BufferPopIfSpace(Buf);
case: 's': int TrainID = BufferGetNumber(Buf);
if(SecondChar == 'w'); if(TrainID < 0) return TrainID;
BufferPopIfSpace(Buf);
int TrainSpeed = BufferGetNumber(Buf);
if(TrainSpeed < 0) return TrainSpeed;
BufferPopIfSpace(Buf);
//TrainSpeedList[TrainID-1] = TrainSpeed;
return SetTrainSpeed(TrainOBuf, TrainID, TrainSpeed);
}
case 'r':
if(SecondChar == 'v'){
BufferPopIfSpace(Buf);
int TrainID = BufferGetNumber(Buf);
if(TrainID < 0) return TrainID;
//Slow->LastClockValue = GetSlow(Slow);
//*RVFlag = TrainID;
return SetTrainSpeed(TrainOBuf, TrainID, 15);
}
case 's':
if(SecondChar == 'w'){
BufferPopIfSpace(Buf);
int SwitchID = BufferGetNumber(Buf);
if(SwitchID < 0) return SwitchID;
BufferPopIfSpace(Buf);
BufferFIFO(Buf,&FirstChar);
if(FirstChar == 'S' || FirstChar == 's'){
SetTrainSpeed(TrainOBuf, SwitchID, 33);
}else if(FirstChar == 'C' || FirstChar == 'c'){
SetTrainSpeed(TrainOBuf, SwitchID, 34);
}else return CMD_NOINPUT;
}else break;
case'K':
case 'k':
// emergency
FeedBuffer(TrainOBuf, 97);
FeedBuffer(TrainOBuf, 0);
return OutPutStrFromBuffer(COM1, TrainOBuf);
case 'G':
case 'g':
// go
FeedBuffer(TrainOBuf, 96);
FeedBuffer(TrainOBuf, 0);
return OutPutStrFromBuffer(COM1, TrainOBuf);
default: default:
break; break;
} }
ClearBuffer(Buf); ClearBuffer(Buf);
return CMD_NOINPUT; return CMD_NOINPUT;
}
int SetTrainSpeed(Buffer *Out, int ID, int Speed)
{
if(BufferReady(Out)){
int code = FeedBuffer(Out, (char)Speed);
if(code != 0) return code;
code = FeedBuffer(Out,(char) ID);
if(code != 0) return code;
code = FeedBuffer(Out,0);
if(code != 0) return code;
return OutPutStrFromBuffer(COM1, Out);
}else return BUFF_NOTREADY;
} }
#include <buffer.h>
#include <cmd.h>
#include <mycanvas.h> #include <mycanvas.h>
#include <myio.h> #include <myio.h>
int Exponent(int Num, int Power){
int i = 0;
int Return = 1;
for(;i<Power;i++){
Return = Return * Num;
}
return Return;
}
int GetPowerD(int Num){
int Base = 1;
int Power = 0;
for(;Base <= Num;Base*=10){
Power += 1;
}
return Power-1;
}
int ClearScreen(Buffer *Buf){
if(BufferReady(Buf)){
char Sequence[5];
Sequence[0] = ESC_CANVAS;
Sequence[1] = '[';
Sequence[2] = '2';
Sequence[3] = 'J';
Sequence[4] = 0;
int ReturnStatus = PutStrToBuffer(Sequence, Buf, 5);
if(ReturnStatus == 0){
return OutPutStrFromBuffer(COM2, Buf);
//return OutPutFromBuffer(COM2, Buf);
}else return ReturnStatus;
}else return BUFF_NOTREADY;
}
int ClearLine(Buffer *Buf){
if(BufferReady(Buf)){
char Sequence[5];
Sequence[0] = ESC_CANVAS;
Sequence[1] = '[';
Sequence[2] = '1';
Sequence[3] = 'K';
Sequence[4] = 0;
int ReturnStatus = PutStrToBuffer(Sequence, Buf, 5);
if(ReturnStatus == 0){
return OutPutStrFromBuffer(COM2, Buf);
}else return ReturnStatus;
}else return BUFF_NOTREADY;
}
int MoveCursor(Buffer* Buf, char Direction, int Num){
if(BufferReady(Buf)){
int Power = GetPowerD(Num);
int i = 0;
char c;
if((4+Power) > (Buf->Size - Buf->Length)) return BUFF_CANTFIT;
PutToBuffer(ESC_CANVAS,Buf);
PutToBuffer('[',Buf);
for(;i<Power;i++){
c = '0'+ (Num / Exponent(10, Power - i));
PutToBuffer(c, Buf);
}
return PutToBuffer(Direction,Buf);
//PutToBuffer(0,Buf);
//OutPutStrFromBuffer(COM2, Buf);
}else return BUFF_NOTREADY;
}
int CursorPOS(Buffer *Buf, int x, int y){
if(BufferReady(Buf)){
int xcpy = x;
int ycpy = y;
int xPower = GetPowerD(x);
int yPower = GetPowerD(y);
if((5+xPower+yPower+2) > (Buf->Size - Buf->Length)) return BUFF_CANTFIT;
PutToBuffer(ESC_CANVAS, Buf);
PutToBuffer('[',Buf);
int i = 0;
int tens= 0;
char c;
for(;i<=xPower;i++){
tens = Exponent(10,xPower-i);
c = '0'+(xcpy / tens);
xcpy -= tens;
PutToBuffer(c, Buf);
}
PutToBuffer(';',Buf);
for(i = 0; i<=yPower; i++){
tens = Exponent(10,yPower-i);
c = '0' +(ycpy/tens);
ycpy -= tens;
PutToBuffer(c,Buf);
}
PutToBuffer('H',Buf);
PutToBuffer(0,Buf);
return OutPutStrFromBuffer(COM2, Buf);
}else return BUFF_NOTREADY;
}
void DrawLine_H(const char Element, const int Length) void DrawLine_H(const char Element, const int Length)
{ {
int i = 0; int i = 0;
...@@ -19,15 +119,43 @@ void DrawLine_V(const char Element, const int Length) ...@@ -19,15 +119,43 @@ void DrawLine_V(const char Element, const int Length)
} }
} }
void DrawClock(Clock *MyClock,CursorPos* InCursor){ void DrawClock(Buffer** BufferList, Clock *MyClock,CursorPos* InCursor){
if(MyClock->bChanged !=0){ if(MyClock->bChanged !=0){
Buffer* OBuf = BufferList[TMN_O_OFFSET];
CursorPOS(OBuf,1, 10);
unsigned int Count = MyClock->ClockCount; unsigned int Count = MyClock->ClockCount;
unsigned int Tenth = Count % 10; unsigned int Tenth = Count % 10;
unsigned int Seconds = (Count % 100 )/ 10; unsigned int Seconds = (Count % 100 )/ 10;
unsigned int Tens = (Count % 600) /100; unsigned int Tens = (Count % 600) /100;
unsigned int Minute = Count/600; unsigned int Minute = Count/600;
CURSOR_POS(10, 60);
bwprintf(COM2,"%d:%d%d:%d\n\r",Minute,Tens,Seconds,Tenth); int i = 0;
int Power = GetPowerD(Minute);
char c;
if((8+Power) > (OBuf->Size - OBuf->Length)) return;
unsigned int Mcpy = Minute;
int tens;
for(; i<=Power; i++){
tens = Exponent(10,Power-i);
c = '0' +(Mcpy/tens);
Mcpy -= tens;
PutToBuffer(c,OBuf);
}
char List[8];
List[7] = 0;
List[0] = List[3] = ':';
List[6] = '\r';
List[5] = '\n';
List[1] = Tens + '0';
List[2] = Seconds +'0';
List[4] = Tenth + '0';
PutStrToBuffer(List,OBuf,8);
OutPutStrFromBuffer(COM2, OBuf);
// bwprintf(COM2,"%d:%d%d:%d\n\r",Minute,Tens,Seconds,Tenth);
InCursor->bChanged = 1; InCursor->bChanged = 1;
} }
} }
...@@ -53,23 +181,32 @@ void DrawPanel() ...@@ -53,23 +181,32 @@ void DrawPanel()
} }
int InteractiveInput(Buffer* BuffList[], CursorPos* InCursor){ int InteractiveInput(Buffer* BuffList[], CursorPos* InCursor){
// int * Slow = ClockList[1];
char c; char c;
int OutputResult = 0; int OutputResult = 0;
int commandresult ;
Buffer* Buf = BuffList[TMN_O_OFFSET];
if(mygetc(COM2,&c) == 1){ if(mygetc(COM2,&c) == 1){
PutToBuffer(c, BuffList[TMN_I_OFFSET]);
if(InCursor->bChanged == 1){ if(InCursor->bChanged == 1){
CURSOR_POS(InCursor->x, InCursor->y); CursorPOS(Buf,15, InCursor->y);
//OutPutFromBuffer(COM2,Buf);
InCursor->bChanged = 0; InCursor->bChanged = 0;
} }
PutToBuffer(c, BuffList[TMN_I_OFFSET]); if(c==13){
PutToBuffer(c, BuffList[TMN_O_OFFSET]); ClearLine(BuffList[TMN_O_OFFSET]);
OutputResult = OutPutFromBuffer(COM2, BuffList[TMN_O_OFFSET]); PutToBuffer(c, Buf);
InCursor->y =(OutputResult>=0)? InCursor->y + OutputResult : InCursor->y; OutputResult = OutPutFromBuffer(COM2, Buf);
if(c == 13){ InCursor->y = 2;
InCursor->y = 1; // OutPutFromBuffer(COM2, BuffList[TMN_O_OFFSET]);
CLEARLINE; commandresult = FeedCommand(BuffList);
return FeedCommand(BuffList[TMN_I_OFFSET]); //bwprintf(COM2,"feed command result:%d\n\r",commandresult);
return commandresult;
} }
PutToBuffer(c, Buf);
OutputResult = OutPutFromBuffer(COM2, Buf);
InCursor->y =(OutputResult>=0)? InCursor->y + OutputResult : InCursor->y;
return 2; return 2;
} }else return I_FAILED;
} }
...@@ -12,12 +12,13 @@ void InitClockCount(Clock *MyClock) ...@@ -12,12 +12,13 @@ void InitClockCount(Clock *MyClock)
*Clock3LoadRegister = CLOCK_LOAD_VALUE; *Clock3LoadRegister = CLOCK_LOAD_VALUE;
// enable clock // enable clock
*Clock3ControlRegister = ENABLE_MASK | ClockConfig; *Clock3ControlRegister = ENABLE_MASK | ClockConfig;
//MyClock->TimerValueRegister = (unsigned int *)(TIMER3_BASE + VAL_OFFSET);
} }
void UpdateClock(Clock *MyClock) void UpdateClock(Clock *MyClock)
{ {
unsigned int* TimerValueRegister = (unsigned int *) (TIMER3_BASE + VAL_OFFSET); unsigned int *ValRegister = *((unsigned int *)(TIMER3_BASE+VAL_OFFSET)) ;
unsigned int CurrentTimerValue = *TimerValueRegister; unsigned int CurrentTimerValue = *ValRegister;
if(CurrentTimerValue > MyClock->LastTimerValue){ if(CurrentTimerValue > MyClock->LastTimerValue){
MyClock->ClockCount = MyClock->ClockCount + 1; MyClock->ClockCount = MyClock->ClockCount + 1;
...@@ -25,6 +26,39 @@ void UpdateClock(Clock *MyClock) ...@@ -25,6 +26,39 @@ void UpdateClock(Clock *MyClock)
} else { } else {
MyClock->bChanged = 0; MyClock->bChanged = 0;
} }
MyClock->LastTimerValue = CurrentTimerValue; MyClock->LastTimerValue = CurrentTimerValue;
} }
/*
void InitQuickTimer()
{
//TimerClock->ClockCount = 0;
//TimerClock->LastTimerValue = QUICK_LOAD_VALUE;
unsigned int* Clock1LoadRegister = (unsigned int *)(TIMER1_BASE + LDR_OFFSET);
unsigned int* Clock1ControlRegister = (unsigned int *)(TIMER1_BASE + CRTL_OFFSET);
unsigned int TimerConfig = MODE_MASK | CLKSEL_MASK;
*Clock1LoadRegister = TIMER_LOAD_VALUE;
*Clock1ControlRegister = ENABLE_MASK | TimerConfig;
}
void InitSlowTimer(Clock *TimerClock){
TimerClock->ClockCount = 0;
TimerClock->LastTimerValue = SLOW_LOAD_VALUE;
unsigned int* Clock1LoadRegister = (unsigned int *)(TIMER2_BASE + LDR_OFFSET);
unsigned int* Clock1ControlRegister = (unsigned int *)(TIMER2_BASE + CRTL_OFFSET);
unsigned int TimerConfig = MODE_MASK;
*Clock1LoadRegister = SLOW_LOAD_VALUE;
*Clock1ControlRegister = ENABLE_MASK | TimerConfig;
TimerClock->TimerValueRegister = (unsigned int *)(TIMER2_BASE + VAL_OFFSET);
}
unsigned int GetQuick(){
unsigned int* ClockValueRegister = (unsigned int *)(TIMER1_BASE + VAL_OFFSET);
unsigned int t = *ClockValueRegister;
return t;
}
unsigned int GetSlow(Clock *TimerClock){
return TimerClock->ClockCount;
}
*/
...@@ -52,14 +52,26 @@ int PutToBuffer(char Char, Buffer* Buf) ...@@ -52,14 +52,26 @@ int PutToBuffer(char Char, Buffer* Buf)
return(FeedBuffer(Buf, Char)); return(FeedBuffer(Buf, Char));
} }
int PutStrToBuffer(char *CharList,Buffer* Buf, int Len)
{
if(CharList == 0) return -1;
if(Buf == 0 || Buf->Size == 0) return BUFF_NOTREADY;
if(Len > (Buf->Size - Buf->Length)) return BUFF_CANTFIT;
int i;
for(i = 0; i<Len; i++){
PutToBuffer(CharList[i], Buf);
}
return 0;
}
int OutPutFromBuffer(int Channel, Buffer* Buf) { int OutPutFromBuffer(int Channel, Buffer* Buf) {
char C; char C;
int bPrinted; int bPrinted;
int StatusCode; int StatusCode;
int Counter = 0; int Counter = 0;
int i = 0;
int len = Buf->Length; int len = Buf->Length;
for(;i<len;i++){ //int i = 0;
for(;Counter<len;){
bPrinted = 0; bPrinted = 0;
StatusCode = BufferFIFO(Buf,&C); StatusCode = BufferFIFO(Buf,&C);
...@@ -70,5 +82,30 @@ int OutPutFromBuffer(int Channel, Buffer* Buf) { ...@@ -70,5 +82,30 @@ int OutPutFromBuffer(int Channel, Buffer* Buf) {
if(bPrinted >= 0) Counter += bPrinted; if(bPrinted >= 0) Counter += bPrinted;
if(bPrinted == 1) BufferPopStart(Buf); if(bPrinted == 1) BufferPopStart(Buf);
} }
if(bPrinted <= 0) return -1; if(bPrinted <= 0) return O_FAILED;
return Counter;
}
int OutPutStrFromBuffer(int Channel, Buffer* Buf){
int StrSize = BufferGetStrSize(Buf);
if(StrSize < 0) return StrSize;
char List[256];
BufferGetStr(Buf, List);
char C;
int Counter = 0;
int i = 0;
int code;
int loopcount = 0;
for(;Counter<StrSize;code = 0){
loopcount ++;
C = List[i];
code = myputc(Channel,C);
Counter += code;
if(code == 1) i++;
}
//bwprintf(COM2,"loopcount:%d,strsize:%d\n\r",loopcount,StrSize);
BufferShrinkFIFO(Buf, StrSize);
BufferPopIfTerminate(Buf);
if(Counter == StrSize) return Counter;
return O_FAILED;
} }
...@@ -8,49 +8,121 @@ ...@@ -8,49 +8,121 @@
int initialize(Clock* MyClock) int initialize(Clock* MyClock)
{ {
if(bwsetfifo(COM2, OFF)) return ERR_INIT_IO;
if(bwsetfifo(COM2, OFF)) return ERR_INIT_IO; if(bwsetfifo(COM2, OFF)) return ERR_INIT_IO;
if(bwsetspeed(COM1, 2400)) return ERR_INIT_IO; if(bwsetspeed(COM1, 2400)) return ERR_INIT_IO;
if(bwsetspeed(COM2, 115200)) return ERR_INIT_IO; if(bwsetspeed(COM2, 115200)) return ERR_INIT_IO;
//bwprintf(COM2,"BWIO init done\n\r");
InitClockCount(MyClock); InitClockCount(MyClock);
//bwprintf(COM2,"timer 3 done\n\r");
//InitSlowTimer(ClockList[1]);
//bwprintf(COM2,"timer 2 done\n\r");
//InitQuickTimer();
//bwprintf(COM2,"timer1 done\n\r");
return 0; return 0;
} }
int runloop(Clock* MyClock, Buffer** BuffList, CursorPos *InputPos) int runloop(Buffer** BuffList, CursorPos *InputPos,Clock* MyClock)
{ {
int IOCode;
//Clock *MyClock = ClockList[0];
while(1){ while(1){
UpdateClock(MyClock); //UpdateClock(MyClock);
DrawClock(MyClock, InputPos); //DrawClock(BuffList, MyClock, InputPos);
if(InteractiveInput(BuffList, InputPos) == CMD_HALT) break; //bwprintf(COM2, 'ClockDraw');
IOCode = InteractiveInput(BuffList, InputPos);
//bwprintf(COM2, "IOCode:%d\n\r",IOCode);
if(IOCode == CMD_HALT){
ClearScreen(BuffList[TMN_O_OFFSET]);
return 0;
}
//UpdateClock(ClockList[1]);
//if(IOCode == CMD_HALT){
//ClearScreen(BuffList[3]);
//return 0;
//}else if(IOCode != 2)return IOCode;
/*
if((*RVFlag > 0 && (GetSlow(ClockList[1]) - ClockList[1]->LastClockValue)>=5)){
ClockList[1]->LastClockValue = 0;
SetTrainSpeed(BuffList[TRN_O_OFFSET], *RVFlag, TrainSpeedList[*RVFlag]);
}
*/
} }
return 0; return 0;
} }
void InitializeTrainAndTrack(Buffer* OBuf)
{
int i = 1;
FeedBuffer(OBuf, 96);
FeedBuffer(OBuf, 0);
OutPutFromBuffer(COM1, OBuf);
for(;i<=18;i++){
SetTrainSpeed(OBuf, i, 33);
}
for(i=153;i<=156;i++){
SetTrainSpeed(OBuf, i, 33);
}
for(i=1;i<=80;i++){
SetTrainSpeed(OBuf, i, 0);
}
FeedBuffer(OBuf, 97);
FeedBuffer(OBuf, 0);
OutPutFromBuffer(COM1, OBuf);
}
int main(){ int main(){
//volatile int RVFlag = 0;
volatile Clock MyClock = {0,0,0}; volatile Clock MyClock = {0,0,0};
//volatile Clock Slow = {0,0,0,0,0};
// Clock* ClockList[2];
//ClockList[0] = &MyClock;
//ClockList[1] = &Slow;
int InitCode = initialize(&MyClock);
if(InitCode) return InitCode;
volatile char TrainInputStorage[DEFAULT_BUF_SIZE]; volatile char TrainInputStorage[DEFAULT_BUF_SIZE];
volatile char TermInputStorage[DEFAULT_BUF_SIZE]; volatile char TermInputStorage[DEFAULT_BUF_SIZE];
volatile char TrainOutputStorage[DEFAULT_BUF_SIZE]; volatile char TrainOutputStorage[DEFAULT_BUF_SIZE];
volatile char TermOutputStorage[DEFAULT_BUF_SIZE]; volatile char TermOutputStorage[DEFAULT_BUF_SIZE];
//int TrainSpeedList[80];
Buffer TrainInputBuf = {&TrainInputStorage, DEFAULT_BUF_SIZE,0,0,0}; Buffer TrainInputBuf = {&TrainInputStorage, DEFAULT_BUF_SIZE,0,0,0};
Buffer TermInputBuf = {&TermInputStorage, DEFAULT_BUF_SIZE,0,0,0}; Buffer TermInputBuf = {&TermInputStorage, DEFAULT_BUF_SIZE,0,0,0};
Buffer TrainOutputBuf = {&TrainOutputStorage, DEFAULT_BUF_SIZE,0,0,0}; Buffer TrainOutputBuf = {&TrainOutputStorage, DEFAULT_BUF_SIZE,0,0,0};
Buffer TermOutputBuf = {&TermOutputStorage, DEFAULT_BUF_SIZE,0,0,0}; Buffer TermOutputBuf = {&TermOutputStorage, DEFAULT_BUF_SIZE,0,0,0};
InitializeTrainAndTrack(&TrainOutputBuf);
char TestStorage[4]; char TestStorage[4];
TestStorage[0] = 68; TestStorage[0] = 68;
TestStorage[1] = 69; TestStorage[1] = 69;
TestStorage[2] = 70; TestStorage[2] = 70;
TestStorage[3] = 71; TestStorage[3] = 71;
Buffer Test = {&TestStorage, 4, 4, 0, 3}; Buffer Test = {&TestStorage, 4, 4, 0, 3};
Buffer *BuffList[4] = {&TrainInputBuf,&TermInputBuf,&TrainOutputBuf,&TermOutputBuf}; Buffer *BuffList[4] = {&TrainInputBuf,&TermInputBuf,&TrainOutputBuf,&TermOutputBuf};
CursorPos InputPos = {15,1,1};
int InitCode = initialize(&MyClock);
if(InitCode) return InitCode; CursorPos InputPos = {15,2,1};
CLEAR_SCREEN; // CLEAR_SCREEN;
ClearScreen(BuffList[3]);
//CursorPOS(BuffList[3],15,13);
// DrawPanel(); // DrawPanel();
return runloop(&MyClock, BuffList, &InputPos); return runloop(BuffList, &InputPos, &MyClock);
//return testloop(&Test); //return testloop(&Test);
} }
#include <bwio.h>
int main(){
bwsetfifo(COM1, ON);
//bwsetfifo(COM2, OFF);
bwsetspeed(COM1, 2400);
//bwsetspeed(COM2, 115200);
char B1 = 97;
int i = 0;
while(i<3){
bwputc(COM1,B1);
bwputc(COM1,B1);
i++;
}
//bwputx(COM2,B1);
return 0;
}
src/tr.c 0 → 100644
#include <bwio.h>
#include <buffer.h>
#include <myio.h>
int main(){
bwsetfifo(COM1, OFF);
bwsetfifo(COM2, OFF);
bwsetspeed(COM1, 2400);
bwsetspeed(COM2, 115200);
char list[3];
list[0] = 4;
list[1] = 24;
list[2] = 0;
Buffer B = {&list,3,3,0,2};
int i = 0;
OutPutStrFromBuffer(COM1, &B);
//bwputx(COM2,B1);
return 0;
}
#define m1(p) #p
#define m2(p) m1(p)
//m2(__LINE__)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment