Changeset 62 in projects
- Timestamp:
- Jan 6, 2011, 7:02:14 AM (13 years ago)
- Location:
- bull-anelex-project/trunk/anelex-interface/src
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
bull-anelex-project/trunk/anelex-interface/src/anelex.c
r60 r62 1 /** 2 * ANELEX PRINTER Interface Microcontroller 3 * 4 * anelex.c: All communication related routines to the anelex device. 5 * 6 * This file is part of the Bull Anelex Project 7 * Copyright (C) 2010, 2011 Sven Köppel, technikum29.de 8 * 9 * This program is free software; you can redistribute 10 * it and/or modify it under the terms of the GNU General 11 * Public License as published by the Free Software 12 * Foundation; either version 3 of the License, or (at 13 * your option) any later version. 14 * 15 * This program is distributed in the hope that it will 16 * be useful, but WITHOUT ANY WARRANTY; without even the 17 * implied warranty of MERCHANTABILITY or FITNESS FOR A 18 * PARTICULAR PURPOSE. See the GNU General Public License 19 * for more details. 20 * 21 * You should have received a copy of the GNU General 22 * Public License along with this program; if not, see 23 * <http://www.gnu.org/licenses/>. 24 * 25 **/ 26 1 27 #include "toolchain.h" 2 28 #include "anelex_code.h" … … 6 32 // startup line printing 7 33 //puts("Starting line transmission"); 8 line_counter= 0;34 current_line_cnt = 0; 9 35 print_line_feed(); 10 36 line_state = LINE_TRANSMITTING; … … 25 51 // Communication Announcement steigende Flanke. 26 52 // je nach zustand 27 28 53 if(line_state != LINE_TRANSMITTING) 29 54 return; 30 55 31 uint8_t current_counter = line_counter; // volatile lokal holen, spaeter unnoetig56 uint8_t current_counter = current_line_cnt; // volatile lokal holen, spaeter unnoetig 32 57 33 58 if(current_counter < LINE_LENGTH) { … … 37 62 // normales zeichen 38 63 char transformed = anelex_code[ orig ]; 39 //printf("%d: Zeichen %c, entspricht oktal %o\n", current_counter, orig, transformed);64 printf("%d: Zeichen %c, entspricht oktal %o\n", current_counter, orig, transformed); 40 65 //printf("%d", current_counter, orig); 41 66 //_delay_us(100); … … 49 74 // jetzt bis zum naechsten Zeichen warten 50 75 51 line_counter++;76 current_line_cnt++; 52 77 return; 53 78 } -
bull-anelex-project/trunk/anelex-interface/src/anelex.h
r60 r62 1 1 #ifndef ANELEX_H 2 2 #define ANELEX_H 3 4 /** 5 * ANELEX PRINTER Interface Microcontroller 6 * Anelex communication 7 * 8 * All I/O with the Anelex device. 9 * 10 * Copyright (C) 2010, 2011 Sven Köppel, technikum29.de 11 * 12 * This program is free software; you can redistribute 13 * it and/or modify it under the terms of the GNU General 14 * Public License as published by the Free Software 15 * Foundation; either version 3 of the License, or (at 16 * your option) any later version. 17 * 18 * This program is distributed in the hope that it will 19 * be useful, but WITHOUT ANY WARRANTY; without even the 20 * implied warranty of MERCHANTABILITY or FITNESS FOR A 21 * PARTICULAR PURPOSE. See the GNU General Public License 22 * for more details. 23 * 24 * You should have received a copy of the GNU General 25 * Public License along with this program; if not, see 26 * <http://www.gnu.org/licenses/>. 27 * 28 **/ 29 30 #include <avr/interrupt.h> 31 #include <util/delay.h> 32 #include <string.h> 33 #include <stdio.h> 34 35 #include "wiring.h" 36 37 #define LINE_LENGTH 120 38 char current_line[LINE_LENGTH]; 39 volatile uint8_t current_line_cnt; 3 40 4 41 void print_line(); … … 7 44 // + zwei ISRs 8 45 9 volatile uint8_t line_counter; 46 /** 47 * State of printer driver (anelex.c): 48 **/ 49 volatile enum line_state_t { 50 LINE_FINISHED, // Printer has finished printing and is ready for 51 // transmit new data from pbuf to printer. 10 52 11 volatile enum line_state_t { 12 LINE_FINISHED, 13 LINE_TRANSMITTING, 14 LINE_PRINTING 53 LINE_TRANSMITTING, // Current line is transmitted from pbuf to printer. 54 // so by now the anelex ISRs are working at high speed. 55 // All other work should be avoided (like RS232 rx). 56 57 LINE_PRINTING // Printer is working (no transmission possible), 58 // best time to recieve new data via RS232. 59 // This time is about 32ms 15 60 } line_state; 16 61 -
bull-anelex-project/trunk/anelex-interface/src/anelex_code.h
r60 r62 1 1 #ifndef ANELEX_CODE_H 2 2 #define ANELEX_CODE_H 3 4 /** 5 * ANELEX PRINTER Interface Microcontroller 6 * Anelex code character set 7 * 8 * This file stores the anelex character set as a mapping 9 * array: 10 * anelex_code(ASCII) -> ANELEX_CHAR 11 * 12 * This file is part of the Bull Anelex Project 13 * Copyright (C) 2010, 2011 Sven Köppel, technikum29.de 14 * 15 * This program is free software; you can redistribute 16 * it and/or modify it under the terms of the GNU General 17 * Public License as published by the Free Software 18 * Foundation; either version 3 of the License, or (at 19 * your option) any later version. 20 * 21 * This program is distributed in the hope that it will 22 * be useful, but WITHOUT ANY WARRANTY; without even the 23 * implied warranty of MERCHANTABILITY or FITNESS FOR A 24 * PARTICULAR PURPOSE. See the GNU General Public License 25 * for more details. 26 * 27 * You should have received a copy of the GNU General 28 * Public License along with this program; if not, see 29 * <http://www.gnu.org/licenses/>. 30 * 31 **/ 3 32 4 33 // magic value that indicated non-valid entry -
bull-anelex-project/trunk/anelex-interface/src/data.c
r60 r62 1 /* Store strings in Program memory. 64KByte of text! :) */ 2 3 #include <avr/pgmspace.h> 1 /** 2 * ANELEX PRINTER Interface Microcontroller 3 * Test strings 4 * 5 * These are 64KByte of text strings, stored in 6 * program memory. 7 * 8 * This file is part of the Bull Anelex Project 9 * Copyright (C) 2010, 2011 Sven Köppel, technikum29.de 10 * 11 * This program is free software; you can redistribute 12 * it and/or modify it under the terms of the GNU General 13 * Public License as published by the Free Software 14 * Foundation; either version 3 of the License, or (at 15 * your option) any later version. 16 * 17 * This program is distributed in the hope that it will 18 * be useful, but WITHOUT ANY WARRANTY; without even the 19 * implied warranty of MERCHANTABILITY or FITNESS FOR A 20 * PARTICULAR PURPOSE. See the GNU General Public License 21 * for more details. 22 * 23 * You should have received a copy of the GNU General 24 * Public License along with this program; if not, see 25 * <http://www.gnu.org/licenses/>. 26 * 27 **/ 28 29 #include "data.h" 30 31 //#include <avr/pgmspace.h> 32 #include "data.h" 4 33 5 34 char string_helloworld[] PROGMEM = "HELLO WORLD"; … … 44 73 "====\n" 45 74 "\n" 46 " This is the ANELEX printer interface microcontroller. Any text which is recieved\n"47 " via RS232 will be directly printed out. There is some verbose output (which you\n"48 " can ignore), especially for every bad character (which is not in the charset of\n"49 " the printer).\n"75 " This is the ANELEX printer interface microcontroller. Any text which is\n" 76 " recieved via RS232 will be directly printed out. There is some verbose output\n" 77 " (which you can ignore), especially for every bad character (which is not in\n" 78 " the charset of the printer).\n" 50 79 "\n" 51 80 " Alternatively, you can push the button on the microcontroller board, which will\n" … … 53 82 " interpreted as commands. These commands are available:\n" 54 83 "\n" 55 " help Prints out this help message\n" 56 " ping Just prints something back\n" 57 " test N Starts the test procedure number N, while N is a number (like ?test 42)\n" 58 " list List all available tests\n" 59 " list N Just output the test string number N on the RS232 terminal\n" 84 " help Prints out this help message\n" 85 " ping Just prints something back\n" 86 " print N Starts the test procedure number N, while N is a number\n" 87 " list List all available tests\n" 88 " list N Just output the test string number N on the RS232 terminal\n" 89 "\n"; 90 91 // yes, this is the list of strings message 92 char string_list_of_strings[] PROGMEM = 93 "ID NAME CONTENT\n" 94 "== ============== =======================================================\n" 95 " 1 helloworld A simple HELLO WORLD oneliner\n" 96 " 2 simple A-Z, 0-9 tests, 4 lines\n" 97 " 3 charset The full character set from the ANELEX printer, 7 lines\n" 98 " 4 pangrams Pangrams (sentences with each letter), 7 lines\n" 99 " 5 numbers 8 lines of numbers\n" 100 " 6 shortandlong very short and long lines of numbers\n" 101 " 7 bullhomepagetext An text excerpt from technikum29.de, 19 lines\n" 102 " 8 werther Die Leiden des jungen Werther, excerpt, 26 lines\n" 103 " 9 pi 120x100 columns, first digits of pi = 2.31...\n" 60 104 "\n"; 61 105 … … 231 275 04925485346941469775164932709504934639382432227188515974054702148289711177792376122578873477188196825462981268685817050\n"; 232 276 233 char string_e_81x200[] PROGMEM = "\ 234 2.7182818284590452353602874713526624977572470936999595749669676277240766303535\n\ 235 47594571382178525166427427466391932003059921817413596629043572900334295260595630\n\ 236 73813232862794349076323382988075319525101901157383418793070215408914993488416750\n\ 237 92447614606680822648001684774118537423454424371075390777449920695517027618386062\n\ 238 61331384583000752044933826560297606737113200709328709127443747047230696977209310\n\ 239 14169283681902551510865746377211125238978442505695369677078544996996794686445490\n\ 240 59879316368892300987931277361782154249992295763514822082698951936680331825288693\n\ 241 98496465105820939239829488793320362509443117301238197068416140397019837679320683\n\ 242 28237646480429531180232878250981945581530175671736133206981125099618188159304169\n\ 243 03515988885193458072738667385894228792284998920868058257492796104841984443634632\n\ 244 44968487560233624827041978623209002160990235304369941849146314093431738143640546\n\ 245 25315209618369088870701676839642437814059271456354906130310720851038375051011574\n\ 246 77041718986106873969655212671546889570350354021234078498193343210681701210056278\n\ 247 80235193033224745015853904730419957777093503660416997329725088687696640355570716\n\ 248 22684471625607988265178713419512466520103059212366771943252786753985589448969709\n\ 249 64097545918569563802363701621120477427228364896134225164450781824423529486363721\n\ 250 41740238893441247963574370263755294448337998016125492278509257782562092622648326\n\ 251 27793338656648162772516401910590049164499828931505660472580277863186415519565324\n\ 252 42586982946959308019152987211725563475463964479101459040905862984967912874068705\n\ 253 04895858671747985466775757320568128845920541334053922000113786300945560688166740\n\ 254 01698420558040336379537645203040243225661352783695117788386387443966253224985065\n\ 255 49958862342818997077332761717839280349465014345588970719425863987727547109629537\n\ 256 41521115136835062752602326484728703920764310059584116612054529703023647254929666\n\ 257 93811513732275364509888903136020572481765851180630364428123149655070475102544650\n\ 258 11727211555194866850800368532281831521960037356252794495158284188294787610852639\n\ 259 81395599006737648292244375287184624578036192981971399147564488262603903381441823\n\ 260 26251509748279877799643730899703888677822713836057729788241256119071766394650706\n\ 261 33045279546618550966661856647097113444740160704626215680717481877844371436988218\n\ 262 55967095910259686200235371858874856965220005031173439207321139080329363447972735\n\ 263 59552773490717837934216370120500545132638354400018632399149070547977805669785335\n\ 264 80489669062951194324730995876552368128590413832411607226029983305353708761389396\n\ 265 39177957454016137223618789365260538155841587186925538606164779834025435128439612\n\ 266 94603529133259427949043372990857315802909586313826832914771163963370924003168945\n\ 267 86360606458459251269946557248391865642097526850823075442545993769170419777800853\n\ 268 62730941710163434907696423722294352366125572508814779223151974778060569672538017\n\ 269 18077636034624592787784658506560507808442115296975218908740196609066518035165017\n\ 270 92504619501366585436632712549639908549144200014574760819302212066024330096412704\n\ 271 89439039717719518069908699860663658323227870937650226014929101151717763594460202\n\ 272 32493002804018677239102880978666056511832600436885088171572386698422422010249505\n\ 273 51881694803221002515426494639812873677658927688163598312477886520141174110913601\n\ 274 16499507662907794364600585194199856016264790761532103872755712699251827568798930\n\ 275 27617611461625493564959037980458381823233686120162437365698467037858533052758333\n\ 276 37939907521660692380533698879565137285593883499894707416181550125397064648171946\n\ 277 70834819721448889879067650379590366967249499254527903372963616265897603949857674\n\ 278 13973594410237443297093554779826296145914429364514286171585873397467918975712119\n\ 279 56187385783644758448423555581050025611492391518893099463428413936080383091662818\n\ 280 81150371528496705974162562823609216807515017772538740256425347087908913729172282\n\ 281 86115159156837252416307722544063378759310598267609442032619242853170187817729602\n\ 282 35413060672136046000389661093647095141417185777014180606443636815464440053316087\n\ 283 78314317444081194942297559931401188868331483280270655383300469329011574414756313\n\ 284 99972217038046170928945790962716622607407187499753592127560844147378233032703301\n\ 285 68237193648002173285734935947564334129943024850235732214597843282641421684878721\n\ 286 67336701061509424345698440187331281010794512722373788612605816566805371439612788\n\ 287 87325273738903928905068653241380627960259303877276977837928684093253658807339884\n\ 288 57218746021005311483351323850047827169376218004904795597959290591655470505777514\n\ 289 30817511269898518840871856402603530558373783242292418562564425502267215598027401\n\ 290 26179719280471396006891638286652770097527670697770364392602243728418408832518487\n\ 291 70472638440379530166905465937461619323840363893131364327137688841026811219891275\n\ 292 22305625675625470172508634976536728860596675274086862740791285657699631378975303\n\ 293 46606166698042182677245605306607738996242183408598820718646826232150802882863597\n\ 294 46839654358856685503773131296587975810501214916207656769950659715344763470320853\n\ 295 21560367482860837865680307306265763346977429563464371670939719306087696349532884\n\ 296 68336130388294310408002968738691170666661468000151211434422560238744743252507693\n\ 297 87077775193299942137277211258843608715834835626961661980572526612206797540621062\n\ 298 08064988291845439530152998209250300549825704339055357016865312052649561485724925\n\ 299 73862069174036952135337325316663454665885972866594511364413703313936721185695539\n\ 300 52108458407244323835586063106806964924851232632699514603596037297253198368423363\n\ 301 90463213671011619282171115028280160448805880238203198149309636959673583274202498\n\ 302 82456849412738605664913525267060462344505492275811517093149218795927180019409688\n\ 303 66986837037302200475314338181092708030017205935530520700706072233999463990571311\n\ 304 58709963577735902719628506114651483752620956534671329002599439766311454590268589\n\ 305 89791158370934193704411551219201171648805669459381311838437656206278463104903462\n\ 306 93950029458341164824114969758326011800731699437393506966295712410273239138741754\n\ 307 92307186245454322203955273529524024590380574450289224688628533654221381572213116\n\ 308 32881120521464898051800920247193917105553901139433166815158288436876069611025051\n\ 309 71007392762385553386272553538830960671644662370922646809671254061869502143176211\n\ 310 66814009759528149390722260111268115310838731761732323526360583817315103459573653\n\ 311 82235349929358228368510078108846343499835184044517042701893819942434100905753762\n\ 312 57767571118090088164183319201962623416288166521374717325477727783488774366518828\n\ 313 75215668571950637193656539038944936642176400312152787022236646363575550356557694\n\ 314 88865495002708539236171055021311474137441061344455441921013361729962856948991933\n\ 315 69184729478580729156088510396781959429833186480756083679551496636448965592948187\n\ 316 85178403877332624705194505041984774201418394773120281588684570729054405751060128\n\ 317 52580565947030468363445926525521370080687520095934536073162261187281739280746230\n\ 318 94685367823106097921599360019946237993434210687813497346959246469752506246958616\n\ 319 90917857397659519939299399556754271465491045686070209901260681870498417807917392\n\ 320 40719459963230602547079017745275131868099822847308607665368668555164677029113368\n\ 321 27563107223346726113705490795365834538637196235856312618387156774118738527722922\n\ 322 59474337378569553845624680101390572787101651296663676445187246565373040244368414\n\ 323 08144887329578473484900030194778880204603246608428753518483649591950828883232065\n\ 324 22128104190448047247949291342284951970022601310430062410717971502793433263407995\n\ 325 96053144605323048852897291765987601666781193793237245385720960758227717848336161\n\ 326 35826128962261181294559274627671377944875867536575448614076119311259585126557597\n\ 327 34573015333642630767985443385761715333462325270572005303988289499034259566232975\n\ 328 78248873502925916682589445689465599265845476269452878051650172067478541788798227\n\ 329 68065366506419109734345288783386217261562695826544782056729877564263253215942944\n\ 330 18039943217000090542650763095588465895171709147607437136893319469090981904501290\n\ 331 30709956622662030318264936573369841955577696378762491885286568660760056602560544\n\ 332 57113372868402055744160308370523122425872234388541231794813885500756893811249353\n\ 333 86318635287083799845692619981794523364087429591180747453419551420351726184200845\n\ 334 50917084568236820089773945584267921427347756087964427920270831215015640634134161\n\ 335 71664480698154837644915739001212170415478725919989438253649505147713793991472052\n\ 336 19529079396137621107238494290616357604596231253506068537651423115349665683715116\n\ 337 60422079639446662116325515772907097847315627827759878813649195125748332879377157\n\ 338 14590910648416426783099497236744201758622694021594079244805412553604313179926967\n\ 339 39157542419296607312393763542139230617876753958711436104089409966089471418340698\n\ 340 36299367536262154524729846421375289107988438130609555262272083751862983706678722\n\ 341 44301957937937860721072542772890717328548743743557819665117166183308811291202452\n\ 342 04048682200072344035025448202834254187884653602591506445271657700044521097735585\n\ 343 89762265548494162171498953238342160011406295071849042778925855274303522139683567\n\ 344 90180764060421383073087744601708426882722611771808426643336517800021719034492342\n\ 345 64266292261456004337383868335555343453004264818473989215627086095650629340405264\n\ 346 94324426144566592129122564889356965500915430642613425266847259491431423939884543\n\ 347 24863274618428466559853323122104662598901417121034460842716166190012571958707932\n\ 348 17569698544013397622096749454185407118446433946990162698351607848924514058940946\n\ 349 39526780735457970030705116368251948770118976400282764841416058720618418529718915\n\ 350 40196882532893091496653457535714273184820163846448324990378860690080727093276731\n\ 351 27581966563941148961716832980455139729506687604740915420428429993541025829113502\n\ 352 24169076943166857424252250902693903481485645130306992519959043638402842926741257\n\ 353 34224477655841778861717372654620854982944989467873509295816526320722589923687684\n\ 354 57017823038096567883112289305809140572610865884845873101658151167533327674887014\n\ 355 82916741970151255978257270740643180860142814902414678047232759768426963393577354\n\ 356 29301867394397163886117642090040686633988568416810038723892144831760701166845038\n\ 357 87212364367043314091155733280182977988736590916659612402021778558854876176161989\n\ 358 37079438005666336488436508914480557103976521469602766258359905198704230017946553\n\ 359 67885674302859746001437854832370687011900784994049309189191816493272597740300748\n\ 360 79681484882342932023012128032327460392219687528340516906974194257614673978110715\n\ 361 46418627336909158497318501118396048253351874843892317729261354302493256289637136\n\ 362 19772854566229244616444972845978677115741256703078718851093363444801496752406185\n\ 363 36569532074170533486782754827815415561966911055101472799040386897220465550833170\n\ 364 78239480878599050194756310898412414467282186545997159663901564194175182093593261\n\ 365 63168883801327587526014605076760983926257264111201352885913178482994756824725648\n\ 366 85533357279772205543568126302535748216585414000805314820697137262149755576051890\n\ 367 48162237679041492674260007104592269531483518813746388710427354476762357793399397\n\ 368 06323966049691453032738878745579059349377723201429548033450006952569809352828877\n\ 369 83710670585567749481373858630385762823040694005665340584887527005308832459182183\n\ 370 49431804983419963998145877343586311594057044368351528538360944295596436067609022\n\ 371 17418968835481316439974377641583652422346426195973904554506806952328507518687194\n\ 372 49064767791886720306418630751053512149851051207313846648717547518382979990189317\n\ 373 75155063998101646641459210240683829460320853555405814715927322067756766921366408\n\ 374 15059008069525406106285364082932766219319399338616238360691117677854482361293268\n\ 375 58199965239275488427435414402884536455595124735546139403154952097397051896240157\n\ 376 97683263945063323045219264504965173546677569929571898969047090273028854494541669\n\ 377 97919929480382549802859460290527631455803165140662291712234293758061439934849143\n\ 378 62107993576737317948964252488813720435579287511385856973381976083524423240466778\n\ 379 02094839963994668483377470672548361884827300064831916382602211055522124673332318\n\ 380 44630055044818499169966220877461402161570210296033185887273332987793525701823938\n\ 381 61244026868339555870607758169954398469568540671174444932479519572159419645863736\n\ 382 12691552645757478698596424217659289686238350637043393981167139754473622862550680\n\ 383 36826641355414480489977213731741191999700172939073033508690209225191244473932783\n\ 384 76156321810842898207706974138707053266117683698647741787180202729412982310888796\n\ 385 83188085436732780687977165911165422445380662586171172949803824887998650406156397\n\ 386 56299369628093581897614910171453435566595427570641944088338168411111662007597872\n\ 387 44137082333917886114708228657531078536674695018462140736493917366254937783014074\n\ 388 30266842215033511773647185387232404042103790775026602011481493548222891666364078\n\ 389 24501668153412135052785785393326061102498022730936367402135153864316930152674605\n\ 390 36064351732154701091440650878823636764236831187390937464232609021646365627553976\n\ 391 83401948293279575062439964527257862440037598342205080893512902312247597064410567\n\ 392 83618708771723335554654825989068612014101072224659040085537982352538851716235182\n\ 393 56518482203125214950700378300411216212126052726059944320443056274522916128891766\n\ 394 81416063913123597535039032007752958739241247645185080916391145929607115634420434\n\ 395 71335447209811784614510778723991406062902282766643092649005922498102910687594345\n\ 396 33858330391178747575977065953570979640012224092199031158229259667913153991561438\n\ 397 07012926078019702258966292336815431249941225946002339947222817105660393187722680\n\ 398 04938331489803385489094686851307892920642428191747958661999444111962087304980643\n\ 399 85006852620258432842085582338566936649849720817046135376163584015342840674118587\n\ 400 58154651459827022867667185530931192334019128617061336487318319756081256946008940\n\ 401 29530944291195902959685639230376899763274622839007354571445964141082292859222393\n\ 402 32836210192822937243590283003884445701383771632056518351970100115722010956997890\n\ 403 48496445343461212922496473235612632195115570156582442766159932646315580667205312\n\ 404 75969485380573642083849188870951760522878173394627476446568589009362661233111529\n\ 405 10816041524100214195937349786431661556732702792109593543055579732660554677963552\n\ 406 00537830461954063697184291616858273412221714588587081427409024818544642177487692\n\ 407 50933287856706746773812267528316535592452045780705413525769032535227389638474956\n\ 408 46255940378924925007624386893776475310102323746733771474581625530698032499033676\n\ 409 45543030527456151296121458594443215074905149145395098100138873792637996487372839\n\ 410 64168975551322759620118382486507469854920380976919326064376087432093856028156428\n\ 411 49756549307909733854185583515789409814007691892389063090542534883896831762904120\n\ 412 21294916719581193579120316251434409650313283521672802137241594734409549831613832\n\ 413 25054867081722214751384251667904454166173032008203309028954888085167972584958134\n\ 414 07132180533988828139346049850532340472595097214331492586604248511405819579711564\n\ 415 19145884283300052568477687430591639049430687134311879618963747550336282093994934\n\ 416 36903210319768981120555953694654247041733238953940460353253967583543953505167202\n\ 417 61647961347790912327995264929045151148307923369382166010702872651938143844844532\n\ 418 63951739411013115250275046574934306376654186612891526444692622288436629946273246\n\ 419 79587363835019371427864713980540382155134632237020715331348870831741465914924063\n\ 420 59493020921122052610312390682941345696785958518393491382340884274312419099152870\n\ 421 80433280913299307893686712741392289003306999587592181529761248240911695158778996\n\ 422 40903525773459382482320530555672380950222667904396142318529919891810655544124772\n\ 423 04508510210071522352342792531266930108270633942321762570076323139159349709946933\n\ 424 24101390877916165122680441480976561897973504315139606691325837903374862083669547\n\ 425 50832803187867077511775256639634792592197335779495554986552141933981702686399873\n\ 426 88347010255262052312317215254062571636771270010760912281528326508984359568975961\n\ 427 03837215772683117073455225019412170154131879365181850202087732690613359218200076\n\ 428 23272695032838273912438281981708711681089511878967467070733778695925655427133400\n\ 429 52326706040004348843432902760360498027862160749469654989210474443927871934536701\n\ 430 79867392080384563372331198385586263800851634559719444199434462476112384461761573\n\ 431 62420159350785208256006041015568898995017325543372980735616998611019084720966007\n\ 432 08320280569917042590103876928658336557728758684250492690370934262028022399861803\n\ 433 40021132074219864291738367917623282644464575633033655677737480864410996914182777\n\ 434 42534170109884358531893391759345115740238472929090154685591637926961968410006765\n"; 435 436 PGM_P builtin_strings[] PROGMEM = { 277 278 // this is an array in normal RAM filled with pointers to program space: 279 PGM_P builtin_strings[] = { 280 // 10 ordinary test strings 437 281 string_helloworld, 438 282 string_simple, … … 444 288 string_werther, 445 289 string_pi_120x100, 446 string_e_81x200 290 291 // 2 meta like strings (which are not listed in the list of strings) 292 string_help_message, 293 string_list_of_strings, 447 294 }; -
bull-anelex-project/trunk/anelex-interface/src/frontend.c
r60 r62 1 /** 2 * ANELEX PRINTER Interface Microcontroller 3 * RS232 client interaction 4 * 5 * This file collects all routines that directly communicate 6 * to the computer/PC/user/terminal/other uc/anything that is 7 * wired via the RS232 port. 8 * 9 * This file is part of the Bull Anelex Project 10 * Copyright (C) 2010, 2011 Sven Köppel, technikum29.de 11 * 12 * This program is free software; you can redistribute 13 * it and/or modify it under the terms of the GNU General 14 * Public License as published by the Free Software 15 * Foundation; either version 3 of the License, or (at 16 * your option) any later version. 17 * 18 * This program is distributed in the hope that it will 19 * be useful, but WITHOUT ANY WARRANTY; without even the 20 * implied warranty of MERCHANTABILITY or FITNESS FOR A 21 * PARTICULAR PURPOSE. See the GNU General Public License 22 * for more details. 23 * 24 * You should have received a copy of the GNU General 25 * Public License along with this program; if not, see 26 * <http://www.gnu.org/licenses/>. 27 * 28 **/ 29 1 30 #include "frontend.h" 2 31 #include "anelex.h" 32 #include "data.h" 33 34 35 // das hier ist write_advance fuer den print_buffer (pbuf) 36 // nicht ISR, sondern INTERRUPTABLE machen! also selbst unterbrechbar! 37 ISR(USART0_RX_vect) { 38 char c = UDR0; 39 // verbose debugging with states: 40 //printf("read %x, r=%d, w=%d, used=%d, loss=%d, dirt=%d, nl=%d, cts=%s\n", 41 // c, pbuf.read_offset, pbuf.write_offset, pbuf.used_elements, pbuf.data_loss, pbuf.dirty_write, pbuf.line_counter, is_cts()?"on":"off"); 42 43 if(c == '\r') { 44 switch(input_line_end) { 45 case CRNL: 46 // Windows default \r\n: Ignore CR, only obey NL 47 return; 48 case CR: 49 // \r only as line end: just convert to ordinary unix style \n 50 c = '\n'; 51 case NL: 52 // just NL which is our standard mode. 53 break; 54 } // switch 55 } // if CR 56 57 if(!is_cts()) pbuf.dirty_write++; // just for debugging 58 59 int8_t new_offset = (pbuf.write_offset + 1) % BUFFER_LEN; 60 61 if(new_offset == pbuf.read_offset) { 62 // no more space! 63 pbuf.data_loss++; 64 // wipe current data! Data Loss! 65 putchar('@'); 66 } else { 67 // still space left 68 pbuf.buffer[new_offset] = c; 69 pbuf.write_offset = new_offset; 70 pbuf.used_elements++; 71 if(c == '\n') { 72 pbuf.line_counter++; 73 } 74 putchar(c); // vorsicht bei Newlines - hier beabsichtigt (NL->NLCR) 75 } 76 77 // when space is running out then make PC stop sending. 78 if(pbuf.used_elements > BUFFER_LEN - 10) 79 stop_cts(); 80 81 // line_state, number of lines, etc. is checked in readline()! 82 } 83 84 3 85 4 86 void readline() { 5 int position; 6 memset(¤t_line, 0, LINE_LENGTH); 7 start_cts(); 87 memset(¤t_line, 0, LINE_LENGTH); // null the output buffer (important) 88 89 if(builtin_data.index) { 90 // read text from builtin memory (data.c). 91 PGM_P string = builtin_strings[builtin_data.index - 1]; 92 93 int nlpos = strchr_P(string[builtin_data.read_offset], '\n'); 94 if(nlpos > LINE_LENGTH) nlpos = LINE_LENGTH; 95 strncpy_P(current_line, string[builtin_data.read_offset], nlpos - builtin_data.read_offset); 96 97 builtin_data.read_offset += nlpos + 1; // one behind the newline 98 if(builtin_data.read_offset >= strlen_P(string)) { 99 puts("Reached end of string!"); 100 builtin_data.index = 0; 101 builtin_data.read_offset = 0; 102 } 103 return; 104 } 105 106 start_cts(); // let PC start sending! (important) 107 pbuf.data_loss = 0; // reset statistics for 108 pbuf.dirty_write = 0; // new readline run. 8 109 9 110 // loop for first user input 10 111 for(;;) { 11 if(has_character()) 12 break; 13 else if(is_button()) { 14 // wait for button press finished 112 if(line_state == LINE_FINISHED && pbuf.line_counter) { 113 // printer finished printing and is ready for new data. 114 // and we have detected a full line in the buffer 115 //_delay_ms(2000); // zum manuellen testen: schnell viele zeilen eingeben 116 stop_cts(); 117 break; 118 } else if(is_button()) { 119 // button pressed down - wait until raised again 120 stop_cts(); 15 121 while(is_button()); 122 puts("Button pressed."); 16 123 strcpy(current_line, "?print 1"); 17 puts("Button pressed."); 18 stop_cts(); 19 return; 20 } else if(line_state == LINE_FINISHED) { 21 // LINE_PRINTING-Phase ist vorbei, Zeile ist jetzt fertig. 22 // Aber wir warten immer noch auf User Interaction... 23 // puts("Printer is ready for new cycle, but you haven't even started typing."); 24 } 25 } 26 27 // read in the line 28 for(position=0; position < LINE_LENGTH; position++) { 29 char* c = ¤t_line[position]; // shortcut 124 return; // important: Quit readline now. 125 } else if(!is_cts()) { 126 // apperantly the buffer is full and the ISR made a full stop. 127 // Hence we must use current contents as a line (remark that the 128 // line is not finished!). Since the buffer should be large, the 129 // line is longer than the printer can print, anyway. 130 puts("ctsoff"); 131 break; 132 } 133 } 134 135 // now copy one line from the buffer to the current_line 136 // output buffer for the anelex driver (which is already filled with 0x00) 137 for(int i=0; i < LINE_LENGTH; i++) { 138 // read advance: 139 pbuf.read_offset = (pbuf.read_offset + 1) % BUFFER_LEN; 140 141 char c = pbuf.buffer[pbuf.read_offset]; 142 pbuf.buffer[pbuf.read_offset] = '\0'; 143 pbuf.used_elements--; 144 if(c == '\n') { 145 // end of line detected 146 pbuf.line_counter--; 147 break; 148 } else 149 // store char to anelex driver buffer 150 current_line[i] = c; 30 151 31 // wait for a character at UART 32 while( !has_character() ); 33 34 // got a character 35 *c = UDR0; 36 37 // check the recieved character for line ending 38 if(*c == '\n' || *c == '\r') 39 break; 40 } 41 42 stop_cts(); 43 current_line[position+1] = '\0'; 44 45 // terminal echo: 46 puts(current_line); // printf("%d: %s\n", strlen(buffer), buffer); 47 48 // done. 49 return; 50 } 51 52 bool_t exec_command() { 53 char* command = current_line + 1; 152 if(!pbuf.used_elements) 153 // buffer is absolutely empty 154 break; 155 } // for 156 157 // checkout some statistics 158 if(pbuf.data_loss) { 159 printf("Lost %d chars!\n", pbuf.data_loss); 160 } 161 162 } // readline() 163 164 165 void exec_command() { 166 char* command = current_line + 1; // strip leading '?' 54 167 printf("Executing command %s\n", command); 55 168 56 if(strcasecmp(command, "help") >= 0) { 169 if(strcasecmp(command, "help") == 0) { 170 builtin_print_help(); 171 } else if(memcmp(command, "list", 4) == 0) { // 4 = strlen("list") 172 int i = atoi(command + 4); // returns 0 on error 173 if(i <= 0 || i > builtin_strings_length) { 174 printf("! Usage: ?list ID with ID between 0 and %d\n", builtin_strings_length); 175 builtin_print_list(); 176 } else { 177 // just print out text on terminal 178 puts_P(builtin_strings[i-1]); 179 } 180 } else if(memcmp(command, "print", 5) == 0) { // 5 = strlen("print") 181 int i = atoi(command + 5); 182 if(i <= 0 || i > builtin_strings_length) { 183 printf("! Same syntax like ?list, just prints out to the ANELEX.\n" 184 "! Make sure you tested before on terminal, e.g ?list 5 => ?print 5\n"); 185 } else { 186 // print out text on ANELEX. That is: 187 printf("! Now printing text no. %d on ANELEX printer\n", i); 188 builtin_data.index = i; 189 return; // read new line, all work is done in readline() 190 } 57 191 } else { 58 192 puts("! Command not understood. Please type ?help"); 59 193 } 60 61 return 0; 62 } 63 64 int uart_transmit(char c, FILE *stream) { 194 } // exec_command 195 196 int stdout_transmit(char c, FILE *stream) { 65 197 if (c == '\n') 66 uart_transmit('\r', stream); 67 loop_until_bit_is_set(UCSR0A, UDRE0); 68 UDR0 = c; 198 stdout_transmit('\r', stream); 199 uart_transmit(c); 69 200 return 0; 70 201 } … … 85 216 86 217 UCSR0C = UCSR0C & 0b11110111; 87 // 1 Stop bit (Bit 3 = 0) 218 // 1 Stop bit (Bit 3 = 0) 219 220 UCSR0B = UCSR0B | (1 << RXCIE0); 221 // Enable Recieve Interrupt (Print Buffer) 88 222 } 89 223 -
bull-anelex-project/trunk/anelex-interface/src/frontend.h
r60 r62 1 #include "toolchain.h" 1 #ifndef __ANELEX_FRONTEND_H__ 2 #define __ANELEX_FRONTEND_H__ 3 /** 4 * ANELEX PRINTER Interface Microcontroller 5 * RS232 client interaction 6 * 7 * This file collects all routines that directly communicate 8 * to the computer/PC/user/terminal/other uc/anything that is 9 * wired via the RS232 port. 10 * 11 * This file is part of the Bull Anelex Project 12 * Copyright (C) 2010, 2011 Sven Köppel, technikum29.de 13 * 14 * This program is free software; you can redistribute 15 * it and/or modify it under the terms of the GNU General 16 * Public License as published by the Free Software 17 * Foundation; either version 3 of the License, or (at 18 * your option) any later version. 19 * 20 * This program is distributed in the hope that it will 21 * be useful, but WITHOUT ANY WARRANTY; without even the 22 * implied warranty of MERCHANTABILITY or FITNESS FOR A 23 * PARTICULAR PURPOSE. See the GNU General Public License 24 * for more details. 25 * 26 * You should have received a copy of the GNU General 27 * Public License along with this program; if not, see 28 * <http://www.gnu.org/licenses/>. 29 * 30 **/ 31 32 2 33 #include <stdio.h> 3 34 #include <stdlib.h> // abs, itoa 35 #include <string.h> 36 #include <stdint.h> // int8_t, uint16_t 37 #include <avr/interrupt.h> // ISRs 4 38 5 int uart_transmit(char c, FILE *stream); 39 #include "toolchain.h" 40 #include "wiring.h" 41 42 // some versatile defs: 43 typedef unsigned char byte_t; 44 typedef uint8_t bool_t; 45 46 /**** Frontend parameters ****/ 47 48 /** 49 * Input Newlines on RS232: 50 * We are internally working all Unix style (\n only) in the print_buffer 51 * (pbuf). Output is always with full Windows \r\n encoding. 52 * Change settings with ?lineend. 53 **/ 54 enum line_end_t { 55 CR, // only carrage return (default HyperTerminal on Windows) 56 NL, // only newline (other uc, Unix) 57 CRNL // "\r\n" (typically Windows... in ordinary ways) 58 } input_line_end; 59 60 /** 61 * Builtin program memory test texts: 62 * set this to [1..builtin_strings_length-1] to print this builtin string 63 * to the anelex. A value of 0 (default) disables the builtin memory system. 64 * Attention: Array is counted from 1! 65 **/ 66 struct builtin_options_t { 67 uint8_t index; 68 uint8_t read_offset; 69 } builtin_data; 70 71 /**** Buffer logic ****/ 72 73 /** 74 * The Print Buffer: 75 * This is a FIFO ringbuffer for all RS232 input. All texts are saved 76 * by an USART RX ISR and afterwards copied in a simple line based 77 * array for the anelex output driver (anelex.h). 78 **/ 79 80 #define BUFFER_LEN 20 81 82 volatile struct print_buffer_t { 83 char buffer[BUFFER_LEN]; 84 uint8_t write_offset; 85 uint8_t read_offset; 86 uint8_t used_elements; // # of occupied elements (this could be also dynamically calculated 87 // with sth like read_offset - write_offset, but this is faster) 88 89 uint8_t data_loss; // # of chars recieved which could not be saved (bad!!) 90 uint8_t dirty_write; // # of chars written while CTS was low (just for notice) 91 uint8_t line_counter; // # of (new)lines currently in buffer 92 } pbuf; // print_buffer shorthand 93 94 95 int stdout_transmit(char c, FILE *stream); 96 inline void uart_transmit(char c) { 97 loop_until_bit_is_set(UCSR0A, UDRE0); 98 UDR0 = c; 99 } 6 100 void uart_init(uint32_t Baud); 7 101 void print_bits(byte_t byte); 8 102 void readline(); 9 103 void process_current_line(); 10 bool_t exec_command(); 104 void exec_command(); 105 106 #endif /* __ANELEX_FRONTEND_H__ */ -
bull-anelex-project/trunk/anelex-interface/src/main.c
r60 r62 8 8 9 9 #include "wiring.h" 10 #include "anelex.h" 10 11 #include "toolchain.h" 11 12 #include "frontend.h" 12 13 13 static FILE output = FDEV_SETUP_STREAM( uart_transmit, NULL, _FDEV_SETUP_WRITE);14 static FILE output = FDEV_SETUP_STREAM(stdout_transmit, NULL, _FDEV_SETUP_WRITE); 14 15 15 16 void Initialize() … … 60 61 uart_init(38400); 61 62 stdout = &output; 63 64 // startwerte fuer strukturen: 62 65 line_state = LINE_FINISHED; // Startwert 66 input_line_end = CR; 67 68 _delay_ms(2000); 63 69 64 70 puts("ANELEX Interface Microcontroller (c) 2010 Sven Koeppel"); … … 67 73 puts("3. Press Button to print default text. 4. Obey RS232 hardware flow control."); 68 74 stop_led(); 75 69 76 70 77 for(;;) { … … 75 82 // process user input 76 83 if(current_line[0] == '?') { 77 // if exec_command returns 0, read a new line, 78 // else continue processing current_line. 79 if(!exec_command()) 80 continue; 84 exec_command(); 85 continue; 81 86 } 82 87 -
bull-anelex-project/trunk/anelex-interface/src/toolchain.h
r60 r62 17 17 // F_CPU wird durch die make file (den Aufruf von AVR Studio) bereits definiert 18 18 19 #include "wiring.h"20 #include "anelex.h"21 19 22 #include "avr/io.h"23 #include "avr/interrupt.h"24 20 25 #include <util/delay.h>26 #include <string.h>27 #include <stdio.h>28 #include <stdint.h> // int8_t, uint16_t29 typedef unsigned char byte_t;30 typedef uint8_t bool_t;31 32 // *globale* sachen:33 #define LINE_LENGTH 12034 char current_line[LINE_LENGTH];35 21 36 22 -
bull-anelex-project/trunk/anelex-interface/src/wiring.h
r60 r62 78 78 #define start_cts() ( PORTD &= ~(1 << PORTD_CTS) ) 79 79 #define stop_cts() ( PORTD |= (1 << PORTD_CTS) ) 80 #define is_cts() (!( PIND & (1 << PIND7) )) 80 81 81 82
Note: See TracChangeset
for help on using the changeset viewer.