int mmc_dump(char **argv, unsigned short argc){
  int resp; 
  char *buffer=NULL;
  unsigned long sector=0;
  int i;
  //check if sector given
  if(argc!=0){
    //read sector
    if(1!=sscanf(argv[1],"%ul",&sector)){
      //print error
      printf("Error parsing sector \"%s\"\r\n",argv[1]);
      return -1;
    }
  }
  //get buffer, set a timeout of 2 secconds
  buffer=BUS_get_buffer(CTL_TIMEOUT_DELAY,2048);
  //check for error
  if(buffer==NULL){
    printf("Error : Timeout while waiting for buffer.\r\n");
    return -1;
  }
  //read from SD card
  resp=mmcReadBlock(sector,(unsigned char*)buffer);
  //print response from SD card
  printf("%s\r\n",SD_error_str(resp));
  //print out buffer
  for(i=0;i<512/16;i++){
    printf(HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR "\r\n",
    buffer[i*16],buffer[i*16+1],buffer[i*16+2],buffer[i*16+3],buffer[i*16+4],buffer[i*16+5],buffer[i*16+6],buffer[i*16+7],buffer[i*16+8],buffer[i*16+9],buffer[i*16+10],
    buffer[i*16+11],buffer[i*16+12],buffer[i*16+13],buffer[i*16+14],buffer[i*16+15]);
  }
  //free buffer
  BUS_free_buffer();
  return 0;
}
Example #2
0
int pictlist_Cmd(char **argv,unsigned short argc){
    IMG_DAT *block;
    int found,i,num;
    int res;
    ticker time;
    unsigned short check;
    // locate pictures on SD card
    block=(IMG_DAT*)BUS_get_buffer(CTL_TIMEOUT_DELAY,1000);
    if(block==NULL){
        printf("Error: Buffer busy\r\n");
        return -2;
    }
    //print header
    printf("Slot\tImage\tBlocks\t Timestamp\r\n");
    //look at all the images
    for(i = 0,num=0; i < NUM_IMG_SLOTS; i++){
        //read from SD card
        res=mmcReadBlock(IMG_ADDR_START+i*IMG_SLOT_SIZE,(unsigned char*)block);
        if(res==MMC_SUCCESS){
            //check block type
            if(block->magic==BT_IMG_START){
                //calculate CRC
                check=crc16(block,sizeof(*block)-sizeof(block->CRC));
                //check if CRC's match
                if(check==block->CRC){
                    num++;
                    //time is at the beginning of data
                    time=*(ticker*)block->dat;
                    //print info
                    printf("%4i\t%5i\t%6i\t%10lu\r\n",i,block->num,block->block,time);
                }
            }
        }else{
            printf("Error Reading from SD card %s\r\n",SD_error_str(res));
            break;
        }
    }
    BUS_free_buffer();
    //check how many images were found
    switch(num){
        case 0:
            printf("\r\nNo images found in memory\r\n");
        break;
        case 1:
            printf("\r\n1 image in memory\r\n");
        break;
        default:
            printf("\r\nThere are %i images in memory\r\n",num);
        break;
    }
    return 0;
}
Example #3
0
void putCharToMMCBuffer(char c)
{
    if (mmc_buffer_index < 512)
    {
        mmc_buffer[mmc_buffer_index] = c;
        mmc_buffer_index++;
    }
    else
    {
        mmc_buffer_index = 0;
        mmcWriteBlock(mmc_block_index);
        mmc_block_index += 512;

        memset(&mmc_buffer, 0x00, 512);
        mmcReadBlock(mmc_block_index - 512, 512);
        //pCDC.Write(&pCDC, mmc_buffer, 512);
    }
}
int mmc_read(char **argv, unsigned short argc){
  char *ptr=NULL,*buffer=NULL; 
  int resp;
   //get buffer, set a timeout of 2 secconds
  buffer=BUS_get_buffer(CTL_TIMEOUT_DELAY,2048);
  //check for error
  if(buffer==NULL){
    printf("Error : Timeout while waiting for buffer.\r\n");
    return -1;
  }
  //init buffer
  memset(buffer,0,513);
  //read from SD card
  resp=mmcReadBlock(0,(unsigned char*)buffer);
  //check for error
  if(resp!=MMC_SUCCESS){
    //print error from SD card
    printf("%s\r\n",SD_error_str(resp));
    return 1;
  }
  //force termination after last byte
  buffer[512]=0;
  //check for non printable chars
  for(ptr=(char*)buffer;ptr!=0;ptr++){
    //check for non printable chars
    if(!isprint(*ptr)){
      //check for null
      if(*ptr){
        //not null, non printable char encountered
        printf("String prematurely terminated due to a non printable character.\r\n");
      }
      //terminate string
      *ptr=0;
      //exit loop
      break;
    }
  }
  //print out the string
  printf("Here is the string you wrote:\r\n\'%s\'\r\n",buffer);
  //free buffer
  BUS_free_buffer();
  return 0;
}
int mmc_multiRTstCmd(char **argv, unsigned short argc){
  unsigned char *ptr,*buffer;
  int resp;
  unsigned long i,start,end;
  unsigned short multi=1;
  if(argc<2){
    printf("Error : too few arguments\r\n");
    return -1;
  }
  if(argc>3){
    printf("Error : too many arguments\r\n");
    return -2;
  }
  //get start and end
  errno=0;
  start=strtoul(argv[1],NULL,0);
  end=strtoul(argv[2],NULL,0);
  if(errno){
    printf("Error : could not parse arguments\r\n");
    return -4;
  }
  if((end-start)*512>BUS_get_buffer_size()){
    printf("Error : data size too large for buffer.\r\n");
    return -5;
  }
  if(argc>2){
    if(!strcmp("single",argv[3])){
      multi=0;
    }else if(!strcmp("multi",argv[3])){
      multi=1;
    }else{
      //unknown argument
      printf("Error : unknown argument \"%s\".\r\n",argv[3]);
      return -3;
    }
  }
  //get buffer, set a timeout of 2 secconds
  buffer=BUS_get_buffer(CTL_TIMEOUT_DELAY,2048);
  #ifndef ACDS_BUILD
    //TESTING: set line high
    P8OUT|=BIT0;
  #endif
  if(!multi){
    //write each block in sequence
    for(i=start,ptr=buffer;i<end;i++,ptr+=512){
      if((resp=mmcReadBlock(i,ptr))!=MMC_SUCCESS){
        printf("Error reading block %li. Aborting.\r\n",i);     
        printf("%s\r\n",SD_error_str(resp));
        //free buffer
        BUS_free_buffer();
        return 1;   
      }
    }
  }else{
    //write all blocks with one command
    if((resp=mmcReadBlocks(start,end-start,buffer))!=MMC_SUCCESS){
      printf("Error with read.\r\n");
      printf("resp = 0x%04X\r\n%s\r\n",resp,SD_error_str(resp));
      //free buffer
      BUS_free_buffer();
      return 1;   
    }
  }
  #ifndef ACDS_BUILD
    //TESTING: set line low
    P8OUT&=~BIT0;
  #endif
  //print out buffer
  for(i=0;i<(end-start)*512/16;i++){
    printf(HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR HEXOUT_STR "\r\n",
    buffer[i*16],buffer[i*16+1],buffer[i*16+2],buffer[i*16+3],buffer[i*16+4],buffer[i*16+5],buffer[i*16+6],buffer[i*16+7],buffer[i*16+8],buffer[i*16+9],buffer[i*16+10],
    buffer[i*16+11],buffer[i*16+12],buffer[i*16+13],buffer[i*16+14],buffer[i*16+15]);
  }
  printf("Data read sucussfully\r\n");
  //free buffer
  BUS_free_buffer();
  return 0;
}
//write LFSR pattern onto SD card sectors and read it back
int mmc_TstCmd(char **argv, unsigned short argc){
  int resp;
  char seed,*buffer=NULL;
  short lfsr;
  int j,count,tc,dat=DAT_LFSR,have_seed=0;
  unsigned long i,start,end;
  if(argc<2){
    printf("Error : Too few arguments\r\n");
    return 1;
  }
  errno=0;
  start=strtoul(argv[1],NULL,0);
  end=strtoul(argv[2],NULL,0);
  if(argc>=3){
    //other arguments are optional
    for(i=3;i<=argc;i++){
      if(!strcmp(argv[i],"LFSR")){
        dat=DAT_LFSR;
      }else if(!strcmp(argv[i],"count")){
        dat=DAT_COUNT;
      }else if(!strncmp("seed=",argv[i],sizeof("seed"))){
        //parse seed
        seed=atoi(argv[i]+sizeof("seed"));
        have_seed=1;
      }else{
        printf("Error : unknown argument \"%s\".\r\n",argv[i]);
        return 3;
      }
    }
  }
  if(!have_seed){
    //seed LFSR from TAR
    seed=TAR;   //not concerned about correct value so don't worry about diffrent clocks
    //make sure seed is not zero
    if(seed==0){
      seed=1;
    }
    printf("seed = %i\r\n",(unsigned short)seed);
  }
  if(errno){
    printf("Error : could not parse arguments\r\n");
    return 2;
  }
  //get buffer, set a timeout of 2 secconds
  buffer=BUS_get_buffer(CTL_TIMEOUT_DELAY,2048);
  //check for error
  if(buffer==NULL){
    printf("Error : Timeout while waiting for buffer.\r\n");
    return -1;
  }
  #ifndef ACDS_BUILD
    //TESTING: set line high
    P8OUT|=BIT0;
  #endif
  //write to sectors
  for(i=start,lfsr=seed;i<=end;i++){
    //fill with psudo random data
    for(j=0;j<512;j++){
      buffer[j]=lfsr;
      //print out first few bytes
      /*if(j<20){
        printf("0x%02X, ",buffer[j]);
      }*/
      //get next in sequence
      lfsr=dat_next(lfsr,dat);
    }
    //printf("\r\n");
    //write data
    resp=mmcWriteBlock(i,(unsigned char*)buffer);
    if(resp!=MMC_SUCCESS){
      printf("Error : write failure for sector %i\r\nresp = 0x%04X\r\n%s\r\n",i,resp,SD_error_str(resp));
      //free buffer
      BUS_free_buffer();
      return -1;
    }
  }
  //read back sectors and check for correctness
  for(i=start,lfsr=seed,tc=0;i<=end;i++){
    //clear block data
    memset(buffer,0,512);
    //read data from card
    resp=mmcReadBlock(i,(unsigned char*)buffer);
    if(resp!=MMC_SUCCESS){
      printf("Error : read failure for sector %i\r\nresp = 0x%04X\r\n%s\r\n",i,resp,SD_error_str(resp));
      //free buffer
      BUS_free_buffer();
      return -1;
    }
    //compare to psudo random data
    for(j=0,count=0;j<512;j++){
      //print out the first few bytes
      /*if(j<20){
        printf("0x%02X =? 0x%02X, ",lfsr,buffer[j]);
      }*/
      if(buffer[j]!=lfsr){
        count++;
        //printf("Error found in byte %i in sector %i\r\n",j,i);
        //printf("Error b%i  s%i\r\n",j,i);
      }
      //get next in sequence
      lfsr=dat_next(lfsr,dat);
    }
    //printf("\r\n");
    if(count!=0){
      printf("%i errors found in sector %i\r\n",count,i);
      tc+=count;
    }
  }
  #ifndef ACDS_BUILD
    //TESTING: set line low
    P8OUT&=~BIT0;
  #endif
  if(tc==0){
    printf("All sectors read susussfully!\r\n");
  }
  //free buffer
  BUS_free_buffer();
  return 0;
}
Example #7
0
void parseSettings(char data[MSG_SIZE])
{
    int i;
    int  settings_size;

    char cmdDelim[] = "#";
    char *cmdParts = NULL;

    cmdParts = strtok( data, cmdDelim );

    if (strcmp(cmdParts, "TEST") == 0)
    {
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "TEST") == 0)
        {
            //INITIAL TEST
            printTrace("INITIAL TEST\r\n");
            for (i = 0; i < 15; i++)
            {
                startBlinking(50000);
            }
        }
        if (strcmp(cmdParts, "START") == 0)
        {
            printTrace("TEST READING ACTIVATED\r\n");
            test_read = 1;
        }
        if (strcmp(cmdParts, "STOP") == 0)
        {
            printTrace("TEST READING STOPPED\r\n");
            test_read = 0;
        }
    }

    if (strcmp(cmdParts, "ZERO") == 0)
    {
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "SET") == 0)
        {
            set_zero = pressure;
        }
        if (strcmp(cmdParts, "UNSET") == 0)
        {
            set_zero = 0;
        }
    }
    /*
    //AAT process
    if (strcmp(cmdParts, "DIAG") == 0)
    {
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "START") == 0)
        {
            aatDiag = 1;
            aatDiagStep = 0;
        }
        if (strcmp(cmdParts, "STOP") == 0)
        {
            aatDiag = 0;
        }
        if (strcmp(cmdParts, "STEP4") == 0)
        {
            printTrace("DIAG#3#DONE\r\n");
            AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3);
            aatDiagStep = 4;
            diagForce = maxForce;
        }
    }
    if (strcmp(cmdParts, "POSITION") == 0)
    {
        // POSITION SETTING
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "MAX") == 0)
        {
            //MAX POSITION
            maxPos = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"MAX POSITION IS SET TO: %d\r\n", maxPos);
            printTrace(msg);
        }
        if (strcmp(cmdParts, "MIN") == 0)
        {
            //MIN POSITION
            minPos = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"MIN POSITION IS SET TO: %d\r\n", minPos);
            printTrace(msg);
        }
        if (strcmp(cmdParts, "SET") == 0)
        {
            //CUR POSITION
            curPos = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"CURRENT POSITION IS SET TO: %d\r\n", curPos);
            printTrace(msg);
        }
    }
    if (strcmp(cmdParts, "FORCE") == 0)
    {
        // FORCE SETTING
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "MAX") == 0)
        {
            //MAX FORCE
            maxForce = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"MAX FORCE IS SET TO: %d\r\n", maxForce);
            printTrace(msg);
        }
        if (strcmp(cmdParts, "MIN") == 0)
        {
            //MIN FORCE
            minForce = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"MIN FORCE IS SET TO: %d\r\n", minForce);
            printTrace(msg);
        }
        if (strcmp(cmdParts, "SET") == 0)
        {
            //CUR FORCE
            curForce = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"CURRENT FORCE IS SET TO: %d\r\n", curForce);
            printTrace(msg);
        }
        //AAT process
        if (strcmp(cmdParts, "DIAGMIN") == 0)
        {
            //CUR FORCE
            minDiagForce = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"MINIMUM DIAG FORCE IS SET TO: %d\r\n", minDiagForce);
            printTrace(msg);
        }
        if (strcmp(cmdParts, "DIAGLOCK") == 0)
        {
            //CUR FORCE
            lockDiagForce = atoi(strtok( NULL, cmdDelim ));
            sprintf((char *)msg,"LOCK DIAG FORCE IS SET TO: %d\r\n", lockDiagForce);
            printTrace(msg);
        }
    }
    //AAT setting
    if (strcmp(cmdParts, "PRESSURE") == 0)
    {
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "SETLOCK") == 0)
        {
            //LOCK PRESSURE
            lockDiagPressure = pressure;
            sprintf((char *)msg,"LOCK PRESSURE IS SET TO: %d\r\n", lockDiagPressure);
            printTrace(msg);
        }
    }
    if (strcmp(cmdParts, "SETTINGS") == 0)
    {
        //SETTINGS
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "GET") == 0)
        {
            sprintf((char *)msg,"SETTINGS: %-80s\r\n", OUR_FLASH_ADDR);
            printTrace(msg);
        }
        if (strcmp(cmdParts, "SET") == 0)
        {
            for(int r = 0; r < 128; r++)
            {
                settings[r] = '\0';
            }
            sprintf((char *)settings,"POSITION#MIN#%d~POSITION#MAX#%d~POSITION#SET#%d~FORCE#MIN#%d~FORCE#MAX#%d~FORCE#SET#%d", minPos, maxPos, curPos, minForce, maxForce, curForce);
            settings_size = strlen(settings) + 1;
            flashWrite(OUR_FLASH_ADDR, settings, settings_size);
            printTrace(settings);
            sprintf((char *)msg,"\r\nWrote %d bytes to flash at address 0x%08X.\r\n", (3 + settings_size) & ~3, OUR_FLASH_ADDR);
            printTrace(msg);
        }
    }
    if (strcmp(cmdParts, "READINGS") == 0)
    {
        // READINGS
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "START") == 0)
        {
            //START
            cmdParts = strtok( NULL, cmdDelim );
            if (strcmp(cmdParts, "TRACE") == 0)
            {
                sprintf((char *)msg,"READINGS STARTED\r\n", maxPos);
                printTrace(msg);
                dataReading = 0;
            }
            if (strcmp(cmdParts, "DATA") == 0)
            {
                dataReading = 1;
            }
            reading = 1;
        }
        if (strcmp(cmdParts, "STOP") == 0)
        {
            //STOP
            sprintf((char *)msg,"READINGS STOPPED\r\n", minPos);
            printTrace(msg);
            reading = 0;
        }
    }
    if (strcmp(cmdParts, "VALUES") == 0)
    {
        // GET CURRENT VALUES
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "GET") == 0)
        {
            sprintf((char *)msg,"POSITION#MIN#%d~POSITION#MAX#%d~POSITION#SET#%d~FORCE#MIN#%d~FORCE#MAX#%d~FORCE#SET#%d", minPos, maxPos, curPos, minForce, maxForce, curForce);
            printTrace(msg);
        }
    }
    if (strcmp(cmdParts, "LED") == 0)
    {
        // LEDs control
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "RED") == 0)
        {
            //GREEN LED
            cmdParts = strtok( NULL, cmdDelim );
            if (strcmp(cmdParts, "ON") == 0)
            {
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1);
            }
            if (strcmp(cmdParts, "OFF") == 0)
            {
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1);
            }
            if (strcmp(cmdParts, "SET") == 0)
            {
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1);
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2);
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3);
            }
        }
        if (strcmp(cmdParts, "YELLOW") == 0)
        {ne MMC_SUCCESS           0x00
            //YELLOW LED
            cmdParts = strtok( NULL, cmdDelim );
            if (strcmp(cmdParts, "ON") == 0)
            {
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2);
            }
            if (strcmp(cmdParts, "OFF") == 0)
            {
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2);
            }
            if (strcmp(cmdParts, "SET") == 0)
            {
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2);
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1);
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3);
            }
        }
        if (strcmp(cmdParts, "GREEN") == 0)
        {
            //RED LED
            cmdParts = strtok( NULL, cmdDelim );
            if (strcmp(cmdParts, "ON") == 0)
            {
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3);
            }
            if (strcmp(cmdParts, "OFF") == 0)
            {
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3);
            }
            if (strcmp(cmdParts, "SET") == 0)
            {
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3);
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2);
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1);
            }
        }
        if (strcmp(cmdParts, "ALLOFF") == 0)
        {
            AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1);
            AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2);
            AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3);
        }
    }
    */
    if (strcmp(cmdParts, "MMC") == 0)
    {
        cmdParts = strtok( NULL, cmdDelim );
        if (strcmp(cmdParts, "READ") == 0)
        {
            //INITIAL TEST
            printTrace("STORED MMC VALUES:\r\n");
            int blockIndex;
            for (blockIndex = 0; blockIndex < 2048; blockIndex++)
            {
                memset(&mmc_buffer, 0x00, 512);
                mmcReadBlock(blockIndex * 512, 512);
                pCDC.Write(&pCDC, mmc_buffer, 512);
            }
            printTrace("\r\n");
            Delay(2500000);
        }
        if (strcmp(cmdParts, "CLEAR") == 0)
        {
            printTrace("CLEARING SD CARD...\r\n");
            clearMMCCard();
            printTrace("CLEARING DONE\r\n");
        }
        if (strcmp(cmdParts, "START") == 0)
        {
            storingOnMMC = 1;
        }
        if (strcmp(cmdParts, "STOP") == 0)
        {
            storingOnMMC = 0;
        }
    }
}
Example #8
0
File: mmc.c Project: MaxGekk/ZigZag
unsigned char mmcReadBuf(unsigned long sector)
{
   return mmcReadBlock(sector << 9, 512, mmc_buffer);
}