diff --git a/include/buffer.h b/include/buffer.h index 2099af948f7bfe258be5ad798819f61ad0c2dcc7..ec93d8181c32618f46bf871c1efdaba793127ba0 100644 --- a/include/buffer.h +++ b/include/buffer.h @@ -1,9 +1,10 @@ #ifndef __BUFFER_H__ #define __BUFFER_H__ -#define BUFF_FULL -1 -#define BUFF_EMPTY -2 -#define BUFF_NOTREADY -3 +#define BUFF_FULL -10 +#define BUFF_EMPTY -20 +#define BUFF_NOTREADY -30 +#define BUFF_CANTFIT -40 #define TRN_I_OFFSET 0 #define TMN_I_OFFSET 1 @@ -20,8 +21,15 @@ typedef struct int Current; } Buffer; +char D2ASCII(int Num); + +int BufferReady(Buffer *Buf); + int FeedBuffer(Buffer *Buf, char Char); // Fill Char with the char in Start + +int FeedBufferStr(Buffer *Buf, char* Str, int Len); + int BufferFIFO(Buffer *Buf, char *Char); // Pop from Start @@ -34,5 +42,19 @@ int BufferFILO(Buffer *Buf, char *Char); int BufferPopLast(Buffer* Buf); // 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 diff --git a/include/cmd.h b/include/cmd.h index 7f802d5966c9adfda7dd8aad30192ce68a9a7565..817658d0afecaa9b383aa0a618656c827fbbe803 100644 --- a/include/cmd.h +++ b/include/cmd.h @@ -2,8 +2,10 @@ #define __CMD_H__ #include <buffer.h> +#include <myclock.h> #define CMD_HALT 0 #define CMD_NOINPUT 1 -int FeedCommand(Buffer* Buf); +int FeedCommand(Buffer** BufferList); +int SetTrainSpeed(Buffer *Out, int ID, int Speed); #endif diff --git a/include/mycanvas.h b/include/mycanvas.h index fa791e0b979b81c21e28cd587159e52bc62b020a..613c2eea62de88cd648892019993df088be3f1a1 100644 --- a/include/mycanvas.h +++ b/include/mycanvas.h @@ -9,6 +9,11 @@ */ #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 CLEARLINE bwprintf(COM2, "%c[1K",ESC_CANVAS) @@ -25,9 +30,15 @@ typedef struct int bChanged; } 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_V(const char Element, const int Length); void DrawPanel(); -void DrawClock(Clock* MyClock, CursorPos* InCursor); +void DrawClock(Buffer** BufferList, Clock* MyClock, CursorPos* InCursor); int InteractiveInput(Buffer* BufList[],CursorPos* InCursor); #endif diff --git a/include/myclock.h b/include/myclock.h index 35d3a9a14374833e6465aa7d6aea9550eefbf1fc..af937205fb8340bb01a9fcbc578ebb876b321a8f 100644 --- a/include/myclock.h +++ b/include/myclock.h @@ -2,11 +2,15 @@ #define __MY_CLOCK_H__ #define CLOCK_LOAD_VALUE 50800 +#define SLOW_LOAD_VALUE 200 +#define TIMER_LOAD_VALUE 508000; typedef struct { unsigned int ClockCount; unsigned int LastTimerValue; + //unsigned int LastClockValue; + //unsigned int* TimerValueRegister; char bChanged; } Clock; @@ -15,4 +19,10 @@ typedef struct void InitClockCount(Clock* MyClock); // update the time count from start of the program void UpdateClock(Clock* MyClock); +/* +void InitQuickTimer(); +void InitSlowTimer(Clock* TimerClock); +unsigned int GetQuick(); +unsigned int GetSlow(Clock *TimerClock); +*/ #endif diff --git a/include/myio.h b/include/myio.h index 53a56808ead27849c6039e005049c1fbdae8cd22..4fd3f242677dba7bcd9593becde6e0841dd7076e 100644 --- a/include/myio.h +++ b/include/myio.h @@ -6,8 +6,14 @@ #define COM1 0 #define COM2 1 +#define O_FAILED -11 +#define I_FAILED -21 + + int mygetc(int Channel,char* Char); int myputc(int Channel,char Char); int PutToBuffer(char Char, Buffer* Buf); +int PutStrToBuffer(char *CharList, Buffer* Buf, int Len); int OutPutFromBuffer(int Channel, Buffer* Buf); +int OutPutStrFromBuffer(int Channel, Buffer* Buf); #endif diff --git a/src/Makefile b/src/Makefile index f0f02e7c88459fbca9622fc52734a6371f667a18..5af1fd858e8b3cc6b58ead65612ade835b0d7bd8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -49,6 +49,26 @@ getc.o: getc.s getc.elf: getc.o $(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: -rm -f *.elf *.s *.o startup.map *.a *~ diff --git a/src/first.map b/src/first.map index 632af885905f5c0ee356706191013cdd81cdf02f..a0b84a2323b2f19fd271b780859491cc19ac7946 100644 --- a/src/first.map +++ b/src/first.map @@ -1,15 +1,17 @@ Archive member included because of file (symbol) ../lib/libmycanvas.a(mycanvas.o) - startup.o (DrawClock) + startup.o (ClearScreen) ../lib/libmyclock.a(myclock.o) startup.o (InitClockCount) ../lib/libcmd.a(cmd.o) ../lib/libmycanvas.a(mycanvas.o) (FeedCommand) ../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) /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) ../lib/libbwio.a(bwio.o) (__umodsi3) /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) @@ -37,70 +39,92 @@ bss 0x0000000000000000 0x0 *(.bss) 0x0000000000000000 _BssEnd = . -text 0x0000000000000000 0x1ff0 +text 0x0000000000000000 0x3634 *(.text) - .text 0x0000000000000000 0x2f4 startup.o - 0x0000000000000104 main + .text 0x0000000000000000 0x41c startup.o + 0x000000000000012c InitializeTrainAndTrack + 0x000000000000022c main 0x0000000000000000 initialize - 0x00000000000000a8 runloop - .text 0x00000000000002f4 0x5b8 ../lib/libmycanvas.a(mycanvas.o) - 0x00000000000002f4 DrawLine_H - 0x0000000000000580 DrawPanel - 0x0000000000000350 DrawLine_V - 0x00000000000003f4 DrawClock - 0x0000000000000700 InteractiveInput - .text 0x00000000000008ac 0xf8 ../lib/libmyclock.a(myclock.o) - 0x00000000000008ac InitClockCount - 0x0000000000000920 UpdateClock - .text 0x00000000000009a4 0x70 ../lib/libcmd.a(cmd.o) - 0x00000000000009a4 FeedCommand - .text 0x0000000000000a14 0x2e8 ../lib/libmyio.a(myio.o) - 0x0000000000000be0 OutPutFromBuffer - 0x0000000000000ba4 PutToBuffer - 0x0000000000000a14 mygetc - 0x0000000000000ad8 myputc - .text 0x0000000000000cfc 0x374 ../lib/libbuffer.a(buffer.o) - 0x0000000000000f00 BufferFILO - 0x0000000000000e58 BufferPopStart - 0x0000000000000f88 BufferPopLast - 0x0000000000000cfc FeedBuffer - 0x0000000000000dd0 BufferFIFO - 0x000000000000103c ClearBuffer - .text 0x0000000000001070 0xc54 ../lib/libbwio.a(bwio.o) - 0x00000000000013e8 bwputr - 0x0000000000001954 bwi2a - 0x0000000000001070 bwsetfifo - 0x0000000000001244 bwputc - 0x00000000000016a4 bwa2d - 0x0000000000001138 bwsetspeed - 0x0000000000001308 c2x - 0x000000000000174c bwa2i - 0x00000000000015ec bwgetc - 0x0000000000001810 bwui2a - 0x00000000000019b8 bwformat - 0x00000000000014e4 bwputw - 0x0000000000001c8c bwprintf - 0x0000000000001368 bwputx - 0x0000000000001468 bwputstr - .text 0x0000000000001cc4 0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) - 0x0000000000001cc4 __udivsi3 - 0x0000000000001dbc __aeabi_uidivmod - .text 0x0000000000001dd4 0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) - 0x0000000000001dd4 __umodsi3 - .text 0x0000000000001ea0 0xe4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.o) - 0x0000000000001ea0 __modsi3 - .text 0x0000000000001f84 0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) - 0x0000000000001f84 __aeabi_ldiv0 - 0x0000000000001f84 __div0 - 0x0000000000001f84 __aeabi_idiv0 + 0x00000000000000cc runloop + .text 0x000000000000041c 0xc38 ../lib/libmycanvas.a(mycanvas.o) + 0x00000000000009ac DrawLine_H + 0x00000000000005a8 ClearLine + 0x0000000000000d44 DrawPanel + 0x0000000000000a08 DrawLine_V + 0x00000000000004f4 ClearScreen + 0x0000000000000484 GetPowerD + 0x0000000000000aac DrawClock + 0x000000000000041c Exponent + 0x000000000000065c MoveCursor + 0x0000000000000790 CursorPOS + 0x0000000000000ec4 InteractiveInput + .text 0x0000000000001054 0xfc ../lib/libmyclock.a(myclock.o) + 0x0000000000001054 InitClockCount + 0x00000000000010c8 UpdateClock + .text 0x0000000000001150 0x458 ../lib/libcmd.a(cmd.o) + 0x0000000000001150 FeedCommand + 0x00000000000014b4 SetTrainSpeed + .text 0x00000000000015a8 0x4f4 ../lib/libmyio.a(myio.o) + 0x000000000000185c OutPutFromBuffer + 0x0000000000001738 PutToBuffer + 0x00000000000015a8 mygetc + 0x0000000000001774 PutStrToBuffer + 0x0000000000001964 OutPutStrFromBuffer + 0x000000000000166c myputc + .text 0x0000000000001a9c 0xaf8 ../lib/libbuffer.a(buffer.o) + 0x0000000000001b44 BufferReady + 0x0000000000001a9c ASCII2NUM + 0x000000000000200c BufferGet + 0x00000000000020fc BufferGetStrSize + 0x0000000000001db0 BufferFILO + 0x0000000000001d04 BufferPopStart + 0x0000000000001f58 BufferShrinkFIFO + 0x0000000000001e38 BufferPopLast + 0x0000000000001ba0 FeedBuffer + 0x0000000000001c78 BufferFIFO + 0x0000000000002380 BufferPopIfSpace + 0x00000000000021e8 BufferGetStr + 0x0000000000001ef0 ClearBuffer + 0x000000000000243c BufferGetNumber + 0x00000000000022e4 BufferPopIfTerminate + .text 0x0000000000002594 0xc54 ../lib/libbwio.a(bwio.o) + 0x000000000000290c bwputr + 0x0000000000002e78 bwi2a + 0x0000000000002594 bwsetfifo + 0x0000000000002768 bwputc + 0x0000000000002bc8 bwa2d + 0x000000000000265c bwsetspeed + 0x000000000000282c c2x + 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 0x0000000000001f88 0x8 startup.o + .got 0x00000000000035ec 0x8 startup.o *(.got.plt) - .got.plt 0x0000000000001f90 0xc startup.o - 0x0000000000001f90 _GLOBAL_OFFSET_TABLE_ + .got.plt 0x00000000000035f4 0xc startup.o + 0x00000000000035f4 _GLOBAL_OFFSET_TABLE_ *(.rodata) - .rodata 0x0000000000001f9c 0x20 startup.o - .rodata 0x0000000000001fbc 0x34 ../lib/libmycanvas.a(mycanvas.o) + .rodata 0x0000000000003600 0x18 startup.o + .rodata 0x0000000000003618 0x1c ../lib/libmycanvas.a(mycanvas.o) *(.glue_7) *(.glue_7t) @@ -124,30 +148,35 @@ OUTPUT(startup.elf elf32-littlearm) .comment 0x000000000000005a 0x12 ../lib/libbuffer.a(buffer.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 0x0000000000000086 0x6f /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) - .debug_line 0x00000000000000f5 0x75 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.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 0x0000000000000086 0x92 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_divsi3.o) + .debug_line 0x0000000000000118 0x6f /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.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 0x0000000000000071 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) - .debug_info 0x00000000000000e2 0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.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 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(_umodsi3.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 0x0000000000000014 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) - .debug_abbrev 0x0000000000000028 0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_modsi3.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 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(_umodsi3.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 0x0000000000000000 0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) .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 - 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 - 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) diff --git a/src/libsrc/buffer.c b/src/libsrc/buffer.c index 7f1074a7c2a3338b3d512611522ce3e9dec7277a..39994c2637faef3d7dfbd24c4fb63326ead1057c 100644 --- a/src/libsrc/buffer.c +++ b/src/libsrc/buffer.c @@ -1,30 +1,47 @@ +#include <bwio.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) { - if(Buf->Size == 0) return BUFF_NOTREADY; - if(Buf->Length == Buf->Size) return BUFF_FULL; - (Buf->Storage)[Buf->Current] = Char; - Buf->Current = (Buf->Current + 1) % (Buf->Size); - Buf->Length = Buf->Length + 1; - return 0; + if(BufferReady(Buf)){ + if(Buf->Length == Buf->Size) return BUFF_FULL; + (Buf->Storage)[Buf->Current] = Char; + Buf->Current = (Buf->Current + 1) % (Buf->Size); + Buf->Length = Buf->Length + 1; + return 0; + }else return BUFF_NOTREADY; } int BufferFIFO(Buffer *Buf, char *Char) { - if(Buf->Size == 0) return BUFF_NOTREADY; - if(Buf->Length == 0) return BUFF_EMPTY; - *Char = (Buf->Storage)[Buf->Start]; - return 0; + if(BufferReady(Buf)){ + if(Buf->Length == 0) return BUFF_EMPTY; + *Char = (Buf->Storage)[Buf->Start]; + return 0; + }else return BUFF_NOTREADY; } int BufferPopStart(Buffer *Buf) { - if(Buf->Size == 0) return BUFF_NOTREADY; - if(Buf->Length == 0) return BUFF_EMPTY; - Buf->Start = (Buf->Start +1) % Buf->Size; - Buf->Length = (Buf->Length) - 1; - return 0; + if(BufferReady(Buf)){ + if(Buf->Length == 0) return BUFF_EMPTY; + Buf->Start = (Buf->Start +1) % Buf->Size; + Buf->Length = (Buf->Length) - 1; + return 0; + }else return BUFF_NOTREADY; } int BufferFILO(Buffer *Buf, char *Char) @@ -37,15 +54,123 @@ int BufferFILO(Buffer *Buf, char *Char) int BufferPopLast(Buffer *Buf) { - if(Buf->Size == 0) return BUFF_NOTREADY; - if(Buf->Length == 0) return BUFF_EMPTY; - Buf->Current = (Buf->Current - 1 + Buf->Size) % Buf->Size; - Buf->Length = (Buf->Length) - 1; - return 0; + if(BufferReady(Buf)){ + if(Buf->Length == 0) return BUFF_EMPTY; + Buf->Current = (Buf->Current - 1 + Buf->Size) % Buf->Size; + Buf->Length = (Buf->Length) - 1; + 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; - Buf->Current = Buf->Start; + if(BufferReady(Buf)){ + 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; } diff --git a/src/libsrc/bwio.c b/src/libsrc/bwio.c index 5bccaf100bdcf03a19e966727a75964c5d4b1e1f..dcb131845013e29fe7cea02ef4c33d21b9e1c5f0 100644 --- a/src/libsrc/bwio.c +++ b/src/libsrc/bwio.c @@ -56,7 +56,7 @@ int bwsetspeed( int channel, int speed ) { return 0; case 2400: *high = 0x0; - *low = 0x90; + *low = 0xbf; return 0; default: return -1; diff --git a/src/libsrc/cmd.c b/src/libsrc/cmd.c index 69cbd0a152995aaefdc74b0059cc952f381c04c6..60417fbe846a530ce71d1e526c7eef9e9d9afaab 100644 --- a/src/libsrc/cmd.c +++ b/src/libsrc/cmd.c @@ -1,31 +1,90 @@ +#include <bwio.h> #include <cmd.h> #include <mycanvas.h> +#include <myclock.h> #include <myio.h> -int FeedCommand(Buffer* Buf) +int FeedCommand(Buffer** BufferList) { char FirstChar; char SecondChar; + + Buffer* Buf = BufferList[TMN_I_OFFSET]; + Buffer* TrainOBuf = BufferList[TRN_O_OFFSET]; BufferFIFO(Buf,&FirstChar); BufferPopStart(Buf); BufferFIFO(Buf,&SecondChar); BufferPopStart(Buf); + //bwprintf(COM2, 'FeedCommand First %c\n\r', FirstChar); switch(FirstChar){ case 'q': ClearBuffer(Buf); return CMD_HALT; - case: 't': - if(SecondChar == 'r'); - case: 'r': - if(SecondChar == 'v'); - case: 's': - if(SecondChar == 'w'); + break; + case 't': + if(SecondChar == 'r'){ + BufferPopIfSpace(Buf); + int TrainID = BufferGetNumber(Buf); + 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: break; } ClearBuffer(Buf); 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; } diff --git a/src/libsrc/mycanvas.c b/src/libsrc/mycanvas.c index 9a43769b852b9705e4f61254f7bf80d77e288e92..b720628174c378fdbbccad5f9233ec5e7af944f3 100644 --- a/src/libsrc/mycanvas.c +++ b/src/libsrc/mycanvas.c @@ -1,6 +1,106 @@ +#include <buffer.h> +#include <cmd.h> #include <mycanvas.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) { int i = 0; @@ -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){ + Buffer* OBuf = BufferList[TMN_O_OFFSET]; + CursorPOS(OBuf,1, 10); + unsigned int Count = MyClock->ClockCount; unsigned int Tenth = Count % 10; unsigned int Seconds = (Count % 100 )/ 10; unsigned int Tens = (Count % 600) /100; 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; } } @@ -53,23 +181,32 @@ void DrawPanel() } int InteractiveInput(Buffer* BuffList[], CursorPos* InCursor){ + // int * Slow = ClockList[1]; char c; int OutputResult = 0; + int commandresult ; + Buffer* Buf = BuffList[TMN_O_OFFSET]; if(mygetc(COM2,&c) == 1){ + PutToBuffer(c, BuffList[TMN_I_OFFSET]); if(InCursor->bChanged == 1){ - CURSOR_POS(InCursor->x, InCursor->y); + CursorPOS(Buf,15, InCursor->y); + //OutPutFromBuffer(COM2,Buf); InCursor->bChanged = 0; } - PutToBuffer(c, BuffList[TMN_I_OFFSET]); - PutToBuffer(c, BuffList[TMN_O_OFFSET]); - OutputResult = OutPutFromBuffer(COM2, BuffList[TMN_O_OFFSET]); - InCursor->y =(OutputResult>=0)? InCursor->y + OutputResult : InCursor->y; - if(c == 13){ - InCursor->y = 1; - CLEARLINE; - return FeedCommand(BuffList[TMN_I_OFFSET]); + if(c==13){ + ClearLine(BuffList[TMN_O_OFFSET]); + PutToBuffer(c, Buf); + OutputResult = OutPutFromBuffer(COM2, Buf); + InCursor->y = 2; + // OutPutFromBuffer(COM2, BuffList[TMN_O_OFFSET]); + commandresult = FeedCommand(BuffList); + //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; - } + }else return I_FAILED; } diff --git a/src/libsrc/myclock.c b/src/libsrc/myclock.c index 47bdf582ddaa45c133f61b4262ed0dc8c22297b7..300ed32835d174772bd0127f5d2270610f04fe9b 100644 --- a/src/libsrc/myclock.c +++ b/src/libsrc/myclock.c @@ -12,12 +12,13 @@ void InitClockCount(Clock *MyClock) *Clock3LoadRegister = CLOCK_LOAD_VALUE; // enable clock *Clock3ControlRegister = ENABLE_MASK | ClockConfig; + //MyClock->TimerValueRegister = (unsigned int *)(TIMER3_BASE + VAL_OFFSET); } void UpdateClock(Clock *MyClock) { - unsigned int* TimerValueRegister = (unsigned int *) (TIMER3_BASE + VAL_OFFSET); - unsigned int CurrentTimerValue = *TimerValueRegister; + unsigned int *ValRegister = *((unsigned int *)(TIMER3_BASE+VAL_OFFSET)) ; + unsigned int CurrentTimerValue = *ValRegister; if(CurrentTimerValue > MyClock->LastTimerValue){ MyClock->ClockCount = MyClock->ClockCount + 1; @@ -25,6 +26,39 @@ void UpdateClock(Clock *MyClock) } else { MyClock->bChanged = 0; } - 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; +} +*/ diff --git a/src/libsrc/myio.c b/src/libsrc/myio.c index 2b3e5e447662f1c699cbcb99fd0af80df6e81986..ad75e1e91be5a4d5d5415e6b71898df510c7326a 100644 --- a/src/libsrc/myio.c +++ b/src/libsrc/myio.c @@ -52,14 +52,26 @@ int PutToBuffer(char Char, Buffer* Buf) 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) { char C; int bPrinted; int StatusCode; int Counter = 0; - int i = 0; int len = Buf->Length; - for(;i<len;i++){ + //int i = 0; + for(;Counter<len;){ bPrinted = 0; StatusCode = BufferFIFO(Buf,&C); @@ -70,5 +82,30 @@ int OutPutFromBuffer(int Channel, Buffer* Buf) { if(bPrinted >= 0) Counter += bPrinted; 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; } diff --git a/src/startup.c b/src/startup.c index b55408a237c8c265790f82d2d64f1d19cde48e31..dce36d297b1079ad311743e3e3b78409dbaa0593 100644 --- a/src/startup.c +++ b/src/startup.c @@ -8,49 +8,121 @@ int initialize(Clock* MyClock) { + 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(COM2, 115200)) return ERR_INIT_IO; + //bwprintf(COM2,"BWIO init done\n\r"); 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; } -int runloop(Clock* MyClock, Buffer** BuffList, CursorPos *InputPos) +int runloop(Buffer** BuffList, CursorPos *InputPos,Clock* MyClock) { + int IOCode; + //Clock *MyClock = ClockList[0]; while(1){ - UpdateClock(MyClock); - DrawClock(MyClock, InputPos); - if(InteractiveInput(BuffList, InputPos) == CMD_HALT) break; + //UpdateClock(MyClock); + //DrawClock(BuffList, MyClock, InputPos); + //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; } +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(){ + //volatile int RVFlag = 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 TermInputStorage[DEFAULT_BUF_SIZE]; volatile char TrainOutputStorage[DEFAULT_BUF_SIZE]; volatile char TermOutputStorage[DEFAULT_BUF_SIZE]; + //int TrainSpeedList[80]; + Buffer TrainInputBuf = {&TrainInputStorage, 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 TermOutputBuf = {&TermOutputStorage, DEFAULT_BUF_SIZE,0,0,0}; + + + InitializeTrainAndTrack(&TrainOutputBuf); + char TestStorage[4]; TestStorage[0] = 68; TestStorage[1] = 69; TestStorage[2] = 70; TestStorage[3] = 71; Buffer Test = {&TestStorage, 4, 4, 0, 3}; + + Buffer *BuffList[4] = {&TrainInputBuf,&TermInputBuf,&TrainOutputBuf,&TermOutputBuf}; - CursorPos InputPos = {15,1,1}; - int InitCode = initialize(&MyClock); - if(InitCode) return InitCode; - CLEAR_SCREEN; + + + CursorPos InputPos = {15,2,1}; + // CLEAR_SCREEN; + ClearScreen(BuffList[3]); + //CursorPOS(BuffList[3],15,13); // DrawPanel(); - return runloop(&MyClock, BuffList, &InputPos); + return runloop(BuffList, &InputPos, &MyClock); + //return testloop(&Test); } diff --git a/src/stop.c b/src/stop.c new file mode 100644 index 0000000000000000000000000000000000000000..29a8aac508bf017161405f6a07ffb9f8985dbb74 --- /dev/null +++ b/src/stop.c @@ -0,0 +1,17 @@ +#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; +} diff --git a/src/tr.c b/src/tr.c new file mode 100644 index 0000000000000000000000000000000000000000..21e7aaf3f99e18d5284427d4f4e6864fb1460665 --- /dev/null +++ b/src/tr.c @@ -0,0 +1,19 @@ +#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; +} diff --git a/src/tricks.c b/src/tricks.c new file mode 100644 index 0000000000000000000000000000000000000000..8baea0a3a4f99803ccba8874c2e230a8c8f4277f --- /dev/null +++ b/src/tricks.c @@ -0,0 +1,3 @@ +#define m1(p) #p +#define m2(p) m1(p) +//m2(__LINE__)