Changeset 50 in projects


Ignore:
Timestamp:
Dec 14, 2009, 7:26:15 PM (10 years ago)
Author:
sven
Message:
  • The PC Documation M200 uC Serial Communication Protocol: Initial write
  • driver/documation-m200: Implemented the protocol (code compiles, but not tested yet on device)

-- Sven @ p3

Location:
punch-card
Files:
6 added
6 edited

Legend:

Unmodified
Added
Removed
  • punch-card/driver/documation-m200/avr-m200-card-reader-controller.aps

    r46 r50  
    1 <AVRStudio><MANAGEMENT><ProjectName>avr-m200-card-reader-controller</ProjectName><Created>03-Dec-2009 19:44:28</Created><LastEdit>03-Dec-2009 20:16:26</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>03-Dec-2009 19:44:28</Created><Version>4</Version><Build>4, 17, 0, 655</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>bin\avr-m200-card-reader-controller.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>src\main.c</SOURCEFILE><SOURCEFILE>src\punchcard.c</SOURCEFILE><HEADERFILE>src\punchcard.h</HEADERFILE><HEADERFILE>src\wiring.h</HEADERFILE><OTHERFILE>bin\avr-m200-card-reader-controller.lss</OTHERFILE><OTHERFILE>bin\avr-m200-card-reader-controller.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>avr-m200-card-reader-controller.elf</OUTPUTFILENAME><OUTPUTDIR>bin\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>D:\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>D:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="1" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
     1<AVRStudio><MANAGEMENT><ProjectName>avr-m200-card-reader-controller</ProjectName><Created>03-Dec-2009 19:44:28</Created><LastEdit>14-Dec-2009 19:22:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>03-Dec-2009 19:44:28</Created><Version>4</Version><Build>4, 17, 0, 655</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>bin\avr-m200-card-reader-controller.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>src\main.c</SOURCEFILE><SOURCEFILE>src\punchcard.c</SOURCEFILE><SOURCEFILE>src\io.c</SOURCEFILE><HEADERFILE>src\punchcard.h</HEADERFILE><HEADERFILE>src\wiring.h</HEADERFILE><HEADERFILE>D:\Server\htdocs\paper-tape-project\punch-card\protocols\documation-m200\pc-uc-protocol.h</HEADERFILE><HEADERFILE>src\io.h</HEADERFILE><OTHERFILE>bin\avr-m200-card-reader-controller.lss</OTHERFILE><OTHERFILE>bin\avr-m200-card-reader-controller.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>avr-m200-card-reader-controller.elf</OUTPUTFILENAME><OUTPUTDIR>bin\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS><INCLUDE>..\protocols\documation-m200\</INCLUDE><INCLUDE>..\..\protocols\documation-m200\</INCLUDE></INCDIRS><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99   -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>D:\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>D:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\src\punchcard.h</Name><Name>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\src\wiring.h</Name><Name>D:\Server\htdocs\paper-tape-project\punch-card\protocols\documation-m200\pc-uc-protocol.h</Name><Name>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\src\io.h</Name><Name>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\src\main.c</Name><Name>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\src\punchcard.c</Name><Name>D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\src\io.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="0" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>src\main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>src\punchcard.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>src\wiring.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>src\io.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>src\io.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>src\punchcard.c</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>D:\Server\htdocs\paper-tape-project\punch-card\protocols\documation-m200\pc-uc-protocol.h</FileName><Status>1</Status></File00006></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
  • punch-card/driver/documation-m200/bin/Makefile

    r46 r50  
    1616## Compile options common for all C compilation units.
    1717CFLAGS = $(COMMON)
    18 CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
     18CFLAGS += -Wall -gdwarf-2 -std=gnu99   -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    1919CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
    2020
     
    3737
    3838
     39## Include Directories
     40INCLUDES = -I"D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\..\protocols\documation-m200" -I"D:\Server\htdocs\paper-tape-project\punch-card\driver\documation-m200\..\..\protocols\documation-m200"
     41
    3942## Objects that must be built in order to link
    40 OBJECTS = main.o punchcard.o
     43OBJECTS = main.o punchcard.o io.o
    4144
    4245## Objects explicitly added by the user
     
    5154
    5255punchcard.o: ../src/punchcard.c
     56        $(CC) $(INCLUDES) $(CFLAGS) -c  $<
     57
     58io.o: ../src/io.c
    5359        $(CC) $(INCLUDES) $(CFLAGS) -c  $<
    5460
  • punch-card/driver/documation-m200/src/main.c

    r46 r50  
    4444#include "punchcard.h"
    4545#include "wiring.h"
     46#include "io.h"
    4647
    4748char Text1[80];
    4849
    49 int uart_transmit(char c, FILE* stream);
    5050static FILE uart = FDEV_SETUP_STREAM(uart_transmit, NULL, _FDEV_SETUP_WRITE);
    5151
     
    8484}
    8585
     86
    8687void UartInit(uint32_t Baud)
    8788{
    88         int BaudRate = OSCSPEED / (16 * Baud) - 1;
    89 
    90         UBRR0H = (unsigned char) BaudRate>>8;
    91         UBRR0L = (unsigned char) BaudRate;
    92         //set BaudRate
    93 
    94         UCSR0B = UCSR0B | (0b00011000);
    95         // RXEN & TXEN enable (Bits 4, 3 = 1)
    96 
    97         UCSR0C = (UCSR0C | (0b10000110));
    98         // USART Register Select (Bit 7 = 1)
    99         // 8 data bits per frame (Bit 2, 1 = 1)
    100 
    101         UCSR0C = UCSR0C & 0b11110111;
    102         // 1 Stop bit (Bit 3 = 0)       
    103 }
    104 
    105 int uart_transmit(char c, FILE* stream) {
    106         if(c == '\n')
    107                 uart_transmit('\r', stream);
    108 
    109         while (!(UCSR0A & 0b00100000));
    110         // PENDING: Hardware flow control
    111         UDR0 = c;
    112         return 0;
    113 }
    114 
    115 unsigned char UartReceive(void)
    116 {
    117         if (UCSR0A & 0b10000000)
    118         //if RXC(Bit 7) = 1
    119                 return UDR0;
    120         else
    121                 return 0;
    122 }
    123 
    124 void UartTransmit(unsigned char Data)
    125 {
    126         while (!(UCSR0A & 0b00100000));
    127         //while UDRE = 0 --> ;
    128         UDR0 = Data;
    129 }
    130 
    131 void LedMode (unsigned char Temp)
    132 {
    133         switch (Temp)
    134         {
    135         // 1 - LED ON
    136         case 1: PORTB = PORTB & 0&11111110;
    137                 PORTC = PORTC & 0&10111111;
    138          break;
    139         // 2 - Led OFF
    140         case 2: PORTB = PORTB | 0b00000001;
    141                 PORTC = PORTC | 0b01000000;
    142           break;
    143         // 3 - Toggle Led
    144         case 3: if (PINB & 0b00000001) PORTB = PORTB & 0b11111110;
    145                         else    PORTB = PORTB | 0b00000001; break;
    146         }
    147 }
    148 
    149 unsigned char Length(char Temp[20])
    150 {
    151         unsigned char L=0;
    152         while (Temp[L]) L++;
    153         return L;
    154 }
    155 
    156 void Write(char Text[80])
    157 {
    158         unsigned char Len, i, T;
    159         Len = Length(Text);
    160         //UartTransmit(Len);
    161         for (i=0; i<Len; i++)
    162         {
    163                 T = Text[i];
    164                 UartTransmit(T);
    165         }
    166         strcpy(Text, "");
    167 }
    168 
    169 void WriteLn(char Text[80])
    170 {
    171         unsigned char Len, i, T;
    172         Len = Length(Text);
    173         //UartTransmit(Len);
    174         for (i=0; i<Len; i++)
    175         {
    176                 T = Text[i];
    177                 UartTransmit(T);
    178         }
    179         strcpy(Text, "");
    180         UartTransmit(10);
    181         UartTransmit(13);
    182 }
    183 
    184 void BlinkLed(void)
    185 {
    186         unsigned int Br;
    187         unsigned char State, End=0;
    188         State = PINB;
    189         WriteLn("");
    190         strcpy(Text1, "Press any Key");
    191         WriteLn(Text1);
    192         while (End == 0)
    193         {
    194                 End = UartReceive();
    195                 if ((End == 0) & (!(PINB & 0b00010000)))
    196                 {
    197                         LedMode(3);
    198                         for (Br = 20000; Br; Br--);
    199                 }               
    200         }
    201         PORTB = State; 
    202 }
    203 
    204 void print_bits(byte_t byte) {
    205         char str[10];
    206         byte_t bit; byte_t pos = 0;
    207         for(bit = 7; bit >= 0; bit--) {
    208                 str[pos++] = ( (1 << bit) & byte ) ? '1' : '0';
    209         }
    210         str[8] = ' ';
    211         str[9] = '\0';
    212 
    213         strcat(Text1, str);
    214 }
     89        int BaudRate = OSCSPEED / (16 * Baud) - 1;
     90
     91        UBRR0H = (unsigned char) BaudRate>>8;
     92        UBRR0L = (unsigned char) BaudRate;
     93        //set BaudRate
     94
     95        UCSR0B = UCSR0B | (0b00011000);
     96        // RXEN & TXEN enable (Bits 4, 3 = 1)
     97
     98        UCSR0C = (UCSR0C | (0b10000110));
     99        // USART Register Select (Bit 7 = 1)
     100        // 8 data bits per frame (Bit 2, 1 = 1)
     101
     102        UCSR0C = UCSR0C & 0b11110111;
     103        // 1 Stop bit (Bit 3 = 0)     
     104}
     105
    215106
    216107/**
     
    218109 **/
    219110
    220 static struct previous_pin_memory {
    221         uint8_t pinc;
    222         uint8_t pinb;
    223 } prev;
    224 
    225 static uint8_t user_start = 0; // muss noch sauber umgesetzt werden
    226 static uint8_t reader_waits_for_space = 0; // also defacto der WRITER
    227111
    228112ISR(PCINT1_vect) {
     
    233117
    234118        uint8_t pinb_jetzt = PINB;
    235         uint8_t pin_changed = (pinb_jetzt ^ prev.pinb) & PCMSK1;
    236         uint8_t rising_edge = ((((~prev.pinb) & pinb_jetzt) & PCMSK1) & pin_changed) == pin_changed ? 1 : 0;
     119        uint8_t pin_changed = (pinb_jetzt ^ status.prev_pinb) & PCMSK1;
     120        uint8_t rising_edge = ((((~status.prev_pinb) & pinb_jetzt) & PCMSK1) & pin_changed) == pin_changed ? 1 : 0;
    237121       
    238122        char* name = "???";
     
    244128                        printf("Too lazy, but not "); // und jetzt nicht breaken :-)
    245129                default:
    246                         printf("Illegal PCINT1 raise: %x=>%x, %x, %x\n", prev.pinb, pinb_jetzt, pin_changed, rising_edge);
    247                         prev.pinb = pinb_jetzt;
     130                        printf("Illegal PCINT1 raise: %x=>%x, %x, %x\n", status.prev_pinb, pinb_jetzt, pin_changed, rising_edge);
     131                        status.prev_pinb = pinb_jetzt;
    248132                        return;
    249133        }
     
    251135        printf("%s %s\n", name, rising_edge ? "raising" : "falling");
    252136
    253         prev.pinb = pinb_jetzt;
     137        status.prev_pinb = pinb_jetzt;
    254138}
    255139
     
    264148
    265149        uint8_t pinc_jetzt = PINC;
    266         uint8_t pin_changed = (pinc_jetzt ^ prev.pinc) & PCMSK2;
    267         uint8_t rising_edge = check( pin_changed, (~prev.pinc) & pinc_jetzt );
     150        uint8_t pin_changed = (pinc_jetzt ^ status.prev_pinc) & PCMSK2;
     151        uint8_t rising_edge = check( pin_changed, (~status.prev_pinc) & pinc_jetzt );
    268152
    269153        switch( pin_changed ) {
     
    283167                                                // urhm... wait for user to start? user condition?
    284168                                                // yeah: quick & dirty:
    285                                                 if(user_start) {
     169                                                if(status.user_instruction == START_READER) {
    286170                                                        // start. BSY signal will create new card.
    287171                                                        start_reader();
     
    326210                        // illegal intterupt!
    327211                        printf("Illegal interrupt! PINC was %x is %x changed %x flanke %x\n",
    328                                 prev.pinc, pinc_jetzt, pin_changed, rising_edge);
     212                                status.prev_pinc, pinc_jetzt, pin_changed, rising_edge);
    329213                        break;
    330214        }
    331215
    332216        // backup new "old" value
    333         prev.pinc = pinc_jetzt;
     217        status.prev_pinc = pinc_jetzt;
    334218} // ISR
    335219
     
    391275                        stop_reader();
    392276                        puts("No more space on buffer.");
    393                         reader_waits_for_space = 1;
     277                        status.reader_waits_for_space = 1;
    394278                }
    395279        }
     
    411295        Init();
    412296        UartInit(38400);
    413         LedMode(1);
     297        start_led();
    414298
    415299        // nette sachen machen koennen
    416300        stdout = &uart;
    417301
    418         unsigned char Action = 0, display_menu;
    419         enum format {
    420                 HEX = 4,
    421                 DEBUG = 5,
    422                 BINARY = 6
    423         } out_format = DEBUG;
    424         while (1)
    425         {
    426                 Action = 0;
    427                 display_menu = 0;
    428                 //out_format = 4;
    429                 puts("");
    430                 puts("Menu");
    431                 puts(" 1) Start reading");
    432                 puts(" 2) Stop reading");
    433                 puts(" 3) Stop; Reset buffer");
    434                 puts(" 4) HEX  5) DEBUG  6) BINARY JONES");
    435                 puts("");
    436                 puts("Choose Action: ");
    437 
    438                 while (! display_menu)
    439                 {
    440                         // erst mal buffer abarbeiten
    441                         if( current_read_card.offset == CARD_READY ) {
    442                                 int col;
    443 
    444                                 printf("Karte in rd %d rw %d, cols rd %d rw %d\n", card_buffer.read_offset, card_buffer.write_offset,
    445                                         current_read_card.offset, current_write_card.offset);
    446 
    447                                 // Karte abgearbeitet
    448                                 current_read_card.offset = CARD_DONE;
    449 
    450                                 //break; // Karte NICHT komplett ausgeben. Hier stoppen.
    451 
    452                                
    453                                 if(out_format != BINARY) {
    454                                         for(col = 0; col < CARD_LEN; col++) {
    455                                                 if(out_format == HEX) {
    456                                                         printf("%x,%x ", (uint8_t) (current_read_card.columns[col] >> 8),
    457                                                                 (uint8_t) (current_read_card.columns[col]));
    458                                                 } else if(out_format == DEBUG) {
    459                                                         printf("%02d: ", col+1);
    460                                                         column_print( &current_read_card.columns[col] );
    461                                                 } else {
    462                                                         puts("Bad output format");
    463                                                         break;
    464                                                 }
    465                                         }
    466                                         puts("");
    467                                 } else { // binary
    468                                         puts("<CARD>");
    469                                         // make two columns to three bytes, after Douglas Jones
    470                                         uint8_t x = 0;
    471                                         Column even_col, odd_col;
    472                                         while(x <= CARD_LEN) {
    473                                                 even_col = current_read_card.columns[x++];
    474                                                 odd_col = current_read_card.columns[x++];
    475 
    476                                                 putchar( even_col >> 4 ); // erstes byte
    477                                                 putchar( ((even_col & 017) << 4) | (odd_col >> 8) ); // zweites byte
    478                                                 putchar( odd_col & 00377 ); // drittes byte
    479                                         }
    480                                         puts("</CARD>");
    481                                 }
    482                         }
    483 
    484                         if( current_read_card.offset == CARD_DONE) {
    485                                 // alle karten abgearbeitet, versuche zur naechsten
    486                                 // Karte zu kommen
    487                                 if( card_buffer_read_advance() != SUCCESS) {
    488                                         puts("output waiting for next");
    489                                 } else {
    490                                         puts("cr+");
    491                                 }
    492 
    493                                 // und der Writer kann jetzt auch wieder loslegen
    494                                 // also eigentlich wartet hier ja der WRITER
    495                                 if(reader_waits_for_space) {
    496                                         // leser hat auf uns gewartet (puffer war voll, leser war angehalten,
    497                                         // wir haben nun eine weitere Karte gelesen => Leser kann in dieses
    498                                         // Feld nun wieder schreiben)
    499                                         if(card_buffer_write_advance() == SUCCESS) {
    500                                                 // es kann wieder weitergehen fuer den Leser
    501                                                 reader_waits_for_space = 0;
    502                                                 start_reader();
    503                                         } else {
    504                                                 puts("Deadline, writer waits for reader");
    505                                         }
    506                                 }
    507 
    508                         }
    509 
    510 
    511                         // dann nutzereingaben abarbeiten
    512                         Action = UartReceive();
    513                         if (Action)     Action = Action - 48;
    514                         if (Action)
    515                         {
    516                                 display_menu = 1;
    517                                 switch(Action) {
    518                                         case 1:
    519                                                 user_start = 1;
    520                                                 start_reader();
    521                                                 start_led();
    522                                                 break;
    523                                         case 2:
    524                                                 user_start = 0;
    525                                                 stop_reader();
    526                                                 stop_led();
    527                                                 break;
    528                                         case 3:
    529                                                 puts("Soft Reset");
    530                                                 user_start = 0;
    531                                                 stop_reader();
    532                                                 stop_led();
    533                                                 card_buffer_flush();
    534                                                 break;
    535                                         case 4:
    536                                         case 5:
    537                                         case 6:
    538                                                 out_format = Action;
    539                                                 printf("Setting out format to %d\n", out_format);
    540                                                 break;
    541                                         default:
    542                                                 printf("Illegal input %d\n", Action);
    543                                 }
    544                         } // if action
    545                 }
    546         }
     302        user_input_loop();
    547303        return 0;
    548304}
  • punch-card/driver/documation-m200/src/punchcard.c

    r46 r50  
    1111
    1212// print column out (debugging), needing 16 bytes!
    13 void column_print(Column* c) {
     13void column_print(const Column* c) {
    1414        char str[20];
    1515        str[0] = '|';
  • punch-card/driver/documation-m200/src/punchcard.h

    r46 r50  
     1#ifndef __M200_PUNCHCARD_H__
     2#define __M200_PUNCHCARD_H__
     3
    14/**
    25 * AVR M200 Punch card reader controller
     
    4043
    4144#include <string.h> // memset
     45#include <stdlib.h> // abs (gcc builtin)
    4246#include <avr/pgmspace.h> // zeichentabelle am Ende
    4347
     
    9296
    9397// print column out (debugging)
    94 void column_print(Column* c);
     98void column_print(const Column* c);
    9599
    96100
     
    160164int8_t card_buffer_read_advance();
    161165int8_t card_buffer_write_advance();
     166
     167#endif /* __M200_PUNCHCARD_H__ */
  • punch-card/driver/documation-m200/src/wiring.h

    r46 r50  
     1#ifndef __M200_WIRING_H__
     2#define __M200_WIRING_H__
     3
    14/**
    25 * specific things about the wiring of the uC on the board
     
    7275#define start_led()             ( PORTB &= ~(1 << PORTB_LED) )
    7376#define stop_led()              ( PORTB |= (1 << PORTB_LED) )
     77
     78#endif /* __M200_WIRING_H__ */
Note: See TracChangeset for help on using the changeset viewer.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License