Changeset 32c7682 in thomson for elec/CrO2/software/cro2.cpp


Ignore:
Timestamp:
Jan 28, 2012, 3:13:17 PM (12 years ago)
Author:
Adrien Destugues <pulkomandy@…>
Branches:
main
Children:
c7b4218
Parents:
96bc8fa
Message:
  • Poll motor on pin status and report it in the GUI.
  • Some cleanup of device class.

git-svn-id: svn://localhost/thomson@12 85ae3b6b-dc8f-4344-a89d-598714f2e4e5

File:
1 edited

Legend:

Unmodified
Added
Removed
  • elec/CrO2/software/cro2.cpp

    r96bc8fa r32c7682  
    55 */
    66
     7#include <iostream>
    78#include <stdio.h>
    89#include <stdlib.h>
     
    1516
    1617#include "device.h"
     18#include "poller.h"
    1719
    1820/* UI */
     
    2931
    3032
     33Ihandle* motoron;
    3134void GUI_open(int* argc, char*** argv)
    3235{
     
    4851        );
    4952
     53        // CONTROL
     54        motoron = IupProgressBar();
     55        IupSetAttribute(motoron, "RASTERSIZE", "16x16");
     56
     57        // EXPLORE
    5058        Ihandle* platformlist = IupList(NULL);
    5159        IupSetAttribute(platformlist, "EXPAND", "HORIZONTAL");
     
    5967        Ihandle* tabs = IupTabs(
    6068                IupVbox(
    61                         IupLabel("Hello World"),
     69                        IupHbox(
     70                                IupLabel("Motor"),
     71                                motoron,
     72                                NULL
     73                        ),
     74                        IupHbox(
     75                                IupToggle("play",NULL),
     76                                IupToggle("REC",NULL),
     77                                NULL
     78                        ),
    6279                        NULL
    6380                ),
     
    89106        IupShow(dialog);
    90107
     108        // Run the timer
     109        startPolling();
     110
    91111        IupMainLoop();
    92112
     
    106126    }
    107127
    108         Device dev; // Constructor inits communication.
    109                 // TODO handle thrown exceptions.
     128        try {
     129                Device& dev = Device::getDevice(); // Constructor inits communication.
    110130
    111     if(strcmp(argv[1], "get") == 0){
    112                 memset(buffer, 0, 275);
    113                 nBytes = dev.read(buffer, sizeof(buffer));
    114     }else if(strcmp(argv[1], "put") == 0){
     131                if(strcmp(argv[1], "get") == 0){
     132                        memset(buffer, 0, 275);
     133                        nBytes = dev.read(buffer, sizeof(buffer));
     134                }else if(strcmp(argv[1], "put") == 0){
    115135
    116                 while (dev.getStatus() & 8)
    117                         usleep(1000000);
     136                        // wait for motor on
     137                        while (dev.getStatus() & 8)
     138                                usleep(1000000);
    118139
    119                 FILE* fptr = fopen(argv[2], "rb");
    120                 int blockid;
    121                 uint8_t blktype, blksize;
    122                 sscanf(argv[3], "%d", &blockid);
     140                        // load file
     141                        FILE* fptr = fopen(argv[2], "rb");
     142                        int blockid;
     143                        uint8_t blktype, blksize;
     144                        sscanf(argv[3], "%d", &blockid);
    123145
    124                 do
    125                 {
     146                        // fast-forward to requested block
    126147                        do
    127148                        {
     149                                do
     150                                {
     151                                        fread(&blktype, 1, 1, fptr);
     152                                        if (feof(fptr))
     153                                        {
     154                                                fprintf(stderr, "end of file.\n");
     155                                                fclose(fptr);
     156                                                exit(0);
     157                                        }
     158                                }
     159                                while(blktype != 0x5A); // skip sync header
     160
    128161                                fread(&blktype, 1, 1, fptr);
    129                                 if (feof(fptr))
     162                                fread(&blksize, 1, 1, fptr);
     163                                blksize -= 2;
     164                                fread(buffer, 1, blksize + 1, fptr);
     165                                if (blktype == 0)
    130166                                {
    131                                         fprintf(stderr, "end of file.\n");
    132                                         fclose(fptr);
    133                                         exit(0);
     167                                        // new file
     168                                        printf("%.11s\n",buffer);
    134169                                }
    135170                        }
    136                         while(blktype != 0x5A); // skip sync header
     171                        while (blockid --);
    137172
    138                         fread(&blktype, 1, 1, fptr);
    139                         fread(&blksize, 1, 1, fptr);
    140                         blksize -= 2;
    141                         fread(buffer, 1, blksize + 1, fptr);
    142                         if (blktype == 0)
    143                         {
    144                                 // new file
    145                                 printf("%.11s\n",buffer);
    146                         }
     173                        fclose(fptr);
     174
     175                        nBytes = dev.write(buffer, blksize, blktype);
     176                }else{
     177                        // TODO print usage
     178                        exit(2);
    147179                }
    148                 while (blockid --);
    149180
    150                 fclose(fptr);
    151 
    152                 nBytes = dev.write(buffer, blksize, blktype);
    153     }else{
    154                 GUI_open(&argc, &argv);
    155     }
    156 
    157         if (nBytes < 0) fprintf(stderr, "USB error %s\n", usb_strerror());
    158     return 0;
     181                if (nBytes < 0) fprintf(stderr, "USB error %s\n", usb_strerror());
     182                return 0;
     183        }
     184        catch(const char* error)
     185        {
     186                std::cerr << error << std::endl;
     187        }
    159188}
    160189
Note: See TracChangeset for help on using the changeset viewer.