Home AMX User Forum NetLinx Studio
Options

via ftp send file to maste's the root folder

i have problem about send some gui file to the master via ftp .but when i used ftp , i only saw 'doc:user\' and can't up directory.somebody told me amx master has root folder ,but i can't find it .
username : NetLinx
password: password

can anyone help ? thanks

Comments

  • Options
    doc:\user is the ftp/webserver root.
    You also may download your gui file there or in a subfolder.
    To replace the start webpage of the master, put a index.html here, the original pages will not be lost.
  • Options
    viningvining Posts: 4,368
    This is also where the file commands used to read the file will be looking. I assume you talking about the gui file form CF GuiDesigner from another thread. If so you want the file in the "User" directory or create a sub directory with in the "User" directory in which case you'll need to ammend the file path in the code that reads this gui file to include this sub directory.

    You can go up a directory using the directory command /../ to get at the system files PROG.zip, vxWorks, etc but you really don't want to be in there for want you're doing.
  • Options
    jimmywjimmyw Posts: 112
    vining wrote: »
    You can go up a directory using the directory command /../ to get at the system files PROG.zip, vxWorks, etc but you really don't want to be in there for want you're doing.

    I get a 500 denied trying to up dir, I want to look at the vxWorks image, do you have a list of the files hidden below initial ftp directory? PROG.TKN, etc
  • Options
    viningvining Posts: 4,368
    What are you using to try and open it? I handle mine through code and actually display the files on my test TP. I'm running master firmware v3.41.422 and the files being displayed are:

    file:PROG.ZIP
    file:PROG.TKN
    file:vxWorks
    folder:user
    folder:tmp
    folder:ipsec
    folder:certs
    folder:LIB
    folder:CLKMGR_DIR
    file:regfile.reg
    folder:unbound
    folder:bound
    folder:bundle

    I'm pretty sure my code prepends the file and folder designations.
  • Options
    jimmywjimmyw Posts: 112
    Vining, mind posting the code snippet you are using to display the files?


    Thanks,
    Jimmy
  • Options
    viningvining Posts: 4,368
    The code I'm using to display the master's files & directories are the basic file command keywords for opening directories and reading/writng to files.

    I don't think a snippet of my code would help much so here's a little bit more. I wrote this code 2006 and it's kind of scary to look at even for me but if you can do something with it then knock yourself out. This doesn't have any FTP stuff in it (I don't think, should be another file) but you could just use the file commands to "copy" the vxWorks file to your user directory and then use a FTP utility from there. Be careful though cuz I killed a master once transferrring the vxWork file from and then back to my master using my FTP code. I don't think it was a binary FTP transfer, oops. What did I know.

    Also, couldn't you just pull the CF card and put it in a reader and save a ton of time?
    PROGRAM_NAME='FILE_READnWRITE'
    (***********************************************************)
    (*  FILE CREATED ON: 08/27/2006  AT: 19:42:17              *)
    (***********************************************************)
    (*  FILE_LAST_MODIFIED_ON: 10/31/2006  AT: 16:43:00        *)
    (***********************************************************)
    DEFINE_DEVICE
    
    ///////////////
    #if_not_defined dvTP_Read_n_Write
    //
    dvTP_Read_n_Write = 10001:22:0
    //
    #end_if
    ///////////////
    #INCLUDE 'VAV_DEBUG_FEEDBACK'
    
    DEFINE_CONSTANT
    
    MaxDisplayFileList  = 10     // Number of VT Btn Addresses for the list.
    MaxFilePathHistory  = 20     // Max File Path Steps.
    MaxFilePathLength   = 400    // Max Characters for a combined file path.
    MaxReadBufLength    = 10000  // Max buffer size for reading files.
    MaxFileDirBufLength = 100    // Max File Name, buffer.
    MaxFileNameLength   = 100    // Max File Name, Name length.
    VT_FilePath         = 1      // TP's VT text button for returned Read_File string. 
    VT_ViewingXofY      = 2      // TP's VT text button for returned Read_File string.
    VT_ReadFile         = 3      // TP's VT text button for returned Read_File string.
    VT_AdressOffset     = 10     // TP's VT text button Offset for returned lists " begin @ x + 10.
    File_DirRoot []     = '//'   // Root folder for 'user' directory ( same as c:\user ) 
    File_UpDir []       = '/../' // Up to base directory ( same as c:\ ) "you probably shouldn't be in here!"
    
     
    DEFINE_TYPE
    
    structure sFileDirList
         {
         char FileFolder [MaxFileNameLength]
         char FFicon [6]
         }
         
    structure sFilePath
         {
         char FilePath [MaxFileNameLength]
         }
         
    DEFINE_VARIABLE
    
    volatile sFileDirList sFFList[MaxDisplayFileList]
    volatile sFileDirList sFFListSent[MaxDisplayFileList]
    volatile sFilePath sFPath[MaxFilePathHistory]
    volatile sFilePath sFPathSent[MaxFilePathHistory]
    volatile integer nFEntryOffset = 0  
    volatile integer nFnumFilesInDir
    volatile dev devTP_RW_iActiveTP
    
    volatile integer nVT_FileDirFields [] =
         {
         1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
         21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
         }
         
    volatile integer nFTP_TPBtnArray [] =
         {
         1,2,3,4,5,6,7,8,9,10,
         11,12,13,14,15,16,17,18,19, 20,
         21,22,23,24,25
         }
         
    DEV devTP_R_n_W_Array [] = {dvTP_Read_n_Write}
    
    ///////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////
    DEFINE_FUNCTION CHAR fnFUpdateTP(CHAR iFromWhere[])
         {
         stack_var integer n
         for (n = 1; n <= MaxDisplayFileList; n ++)  
    	  {
    	  if(sFFListSent[n].FileFolder != sFFList[n].FileFolder)
    	       {
    	       SELECT
    		    {
    		    active (iFromWhere == 'FileOpen' || iFromWhere == 'FDirError'):
    			 {
    			 SEND_COMMAND devTP_RW_iActiveTP,"'!T',nVT_FileDirFields[VT_AdressOffset + n],
    						  sFFList[n].FileFolder" ;
    			 }
    		    active (iFromWhere == 'FileDir'):
    			 {
    			 if (length_string(sFFList[n].FileFolder))
    			      {
    			      SEND_COMMAND devTP_RW_iActiveTP,"'!T',nVT_FileDirFields[VT_AdressOffset + n],
    					     sFFList[n].FFicon,': ',sFFList[n].FileFolder" ;
    			      }
    			 else
    			      {
    			      SEND_COMMAND devTP_RW_iActiveTP,"'!T',nVT_FileDirFields[VT_AdressOffset  + n],
    					     sFFList[n].FileFolder" ;
    			      }
    			 }
    		    active (iFromWhere == 'D_Start'):
    			 {
    			 SEND_COMMAND devTP_R_n_W_Array,"'!T',nVT_FileDirFields[VT_AdressOffset + n],
    						  sFFList[n].FileFolder" ;
    			 }
    		    }
    	       }
    	  } 
         if (nFnumFilesInDir < MaxDisplayFileList)
    	  {
    	  if (iFromWhere != 'D_Start')
    	       {
    	       SEND_COMMAND devTP_RW_iActiveTP,"'!T',2,'Viewing ',itoa(nFEntryOffset + 1),' - ',
    					itoa(nFnumFilesInDir),13,10,'of  ',itoa(nFnumFilesInDir)" ;
    	       }
    	  else 
    	       {
    	       SEND_COMMAND devTP_R_n_W_Array,"'!T',2,'Viewing ',itoa(1),' - ',itoa(10),13,10,'of  ',itoa(0)" ;
    	       }
    	  }
         else
    	  {
    	  SEND_COMMAND devTP_RW_iActiveTP,"'!T',2,'Viewing ',itoa(nFEntryOffset + 1),' - ',
    					itoa(nFEntryOffset + MaxDisplayFileList),13,10,'of  ',itoa(nFnumFilesInDir)" ;
    	  }
         SEND_COMMAND devTP_RW_iActiveTP,"'!T',VT_FilePath,fnFileBuildPath(fnFilePathGetIndex ('query'))" ;
         RETURN TRUE ;
         }
    DEFINE_FUNCTION CHAR fnF_TPDataSent(CHAR iFromWhere[])
         {
         stack_var integer n
         for (n = 1; n <= MaxDisplayFileList; n ++)  
    	  {
    	  if(sFFListSent[n].FileFolder != sFFList[n].FileFolder)
    	       {
    	       if(!length_string( sFFListSent[n].FileFolder) && !length_string(sFFList[n].FileFolder))
    		    {
    		    n = MaxDisplayFileList + 1 ;
    		    }
    	       if(n != MaxDisplayFileList + 1)
    		    {
    		    sFFListSent[n].FileFolder = sFFList[n].FileFolder ;
    		    sFFListSent[n].FFicon = sFFList[n].FFicon ;
    		    }
    	       }
    	  }
         #IF_DEFINED VAV_RnW_DEBUG
         SEND_STRING 0,"'FUNCTION fnF_TPDataSent. TP''s updated & sent STRUCT mirrored! line-<',ITOA(__LINE__),'>',crlf" ;
         #END_IF
         RETURN TRUE ;
         }
    DEFINE_FUNCTION CHAR fnFResetPageNum()
         {
         nFEntryOffset = 0 ;
         RETURN TRUE ;
         }
         
    DEFINE_FUNCTION CHAR fnFileWrite_ToFile(CHAR iWriteFileName[],CHAR iWriteFileBuf[])
         {                                       //filename   //buffer containing data to write
         stack_var slong nWriteFHandle ;
         stack_var slong nWriteFResult ;
         
         nWriteFHandle = file_open(iWriteFileName,FILE_RW_NEW) ;
         if (nWriteFHandle > 0) 
    	  {
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnFileWrite_ToFile. File_Open successful for *',
    					     iWriteFileName,'*! line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  nWriteFResult = FILE_WRITE (nWriteFHandle,iWriteFileBuf,length_string(iWriteFileBuf)) ;
    	  if (nWriteFResult > 0) 
    	       {
    	       #IF_DEFINED VAV_RnW_DEBUG
    	       SEND_STRING 0,"'FUNCTION fnFileWrite_ToFile. File_Write OK. Wrote a ',
    					     itoa(nWriteFResult),
    					     ' CHAR String!  line-<',ITOA(__LINE__),'>',crlf" ; 
    	       #END_IF
    	       }
    	  else
    	       {
    	       stack_var char cErrorMsg [20] ;
    	       switch (itoa(nWriteFResult)) 
    		    {
    		    case '-11': {cErrorMsg = 'disk full'} ;
    		    case '-5' : {cErrorMsg = 'disk I/O error'} ;
    		    case '-1' : {cErrorMsg = 'invalid file handle'} ;
    		    case '-0' : {cErrorMsg = 'zero bits returned?'} ;
    		    }
    	       #IF_DEFINED VAV_RnW_DEBUG
    	       SEND_STRING 0,"'FUNCTION fnFileWrite_ToFile. Bad File_Write_Line: ',cErrorMsg,
    						  '! line-<',ITOA(__LINE__),'>',crlf" ;
    	       #END_IF
    	       }
    	  file_close(nWriteFHandle) ;
         	  }
         else
    	  {
    	  stack_var char cErrorMsg [40] ;
    	  switch (itoa(nWriteFHandle)) 
    	       {
    	       case '-2': {cErrorMsg = 'invalid file path or name'} ;
    	       case '-5': {cErrorMsg = 'disk I/O error'} ;
    	       case '-3': {cErrorMsg = 'invalid value supplied for IOFlag'} ;
    	       }
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnFileWrite_ToFile. Bad File_Open: ',cErrorMsg,
    						  '! line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  }
         file_close(nWriteFHandle) ;
         RETURN TRUE ; 
         }     
    
    DEFINE_FUNCTION CHAR[MaxReadBufLength]fnFileRead(CHAR icReadFile[],INTEGER inReadFStrLen)
         {
         stack_var slong nReadFHandle ;
         stack_var slong nReadFResult ;
         stack_var char cReadFileBuf [MaxReadBufLength] ;
         
         fnClearDispFileList('NORMAL','FileOpen')
         nReadFHandle = file_open(icReadFile,FILE_READ_ONLY) ;
         if (nReadFHandle > 0) 
    	  {
    	  fnFResetPageNum() ;
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnReadFile. File_Open successful for *',
    					     icReadFile,'*! line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  nReadFResult = file_read(nReadFHandle,cReadFileBuf,inReadFStrLen) ;
    	  if (nReadFResult > 0) 
    	       {
    	       #IF_DEFINED VAV_RnW_DEBUG
    	       SEND_STRING 0,"'FUNCTION fnReadFile. File_Read OK. Rcvd: a ',
    					     itoa(length_string(cReadFileBuf)),
    					     ' CHAR String!  line-<',ITOA(__LINE__),'>',crlf" ; 
    	       #END_IF
    	       }
    	  else
    	       {
    	       stack_var char cErrorMsg [20] ;
    	       switch (itoa(nReadFResult)) 
    		    {
    		    case '-9': {cErrorMsg = 'end-of-file reached'} ;
    		    case '-6': {cErrorMsg = 'invalid parameter'} ;
    		    case '-5': {cErrorMsg = 'disk I/O error'} ;
    		    case '-1': {cErrorMsg = 'invalid file handle'} ;
    		    case '-0': {cErrorMsg = 'zero bits returned?'} ;
    		    }
    	       #IF_DEFINED VAV_RnW_DEBUG
    	       SEND_STRING 0,"'FUNCTION fnReadFile. Bad Read_File: ',cErrorMsg,
    						  '! line-<',ITOA(__LINE__),'>',crlf" ;
    	       #END_IF
    	       }
    	  file_close(nReadFHandle) ;
    	  }
         else
    	  {
    	  stack_var char cErrorMsg [40] ;
    	  switch (itoa(nReadFHandle)) 
    	       {
    	       case '-2': {cErrorMsg = 'invalid file path or name'} ;
    	       case '-5': {cErrorMsg = 'disk I/O error'} ;
    	       case '-3': {cErrorMsg = 'invalid value supplied for IOFlag'} ;
    	       }
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnReadFile. Bad Open_File: ',cErrorMsg,
    						  '! line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  }
         file_close(nReadFHandle) ;
         RETURN cReadFileBuf ;
         }
    
    DEFINE_FUNCTION CHAR fnFileDirectory(CHAR icFileDirPath[],CHAR iDoWhat [])
         {
         stack_var long nFileDirEntry ;
         stack_var slong nFDirReturn ;
         stack_var integer nFConvert ;
         stack_var char cFileDirBuf [MaxFileDirBufLength] ;
              
         nFileDirEntry = 1 ;
         nFDirReturn = file_dir(icFileDirPath,cFileDirBuf,nFileDirEntry + nFEntryOffset) ;
         if (nFDirReturn > 0)
    	  {
    	  nFConvert = type_cast(nFDirReturn) ;
    	  nFnumFilesInDir = nFEntryOffset + (nFConvert + 1) ;
    	  if(iDoWhat != 'PageUpBtn'  &&  iDoWhat != 'PageDwnBtn')
    	       {
    	       fnFResetPageNum() ;
    	       }
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnFileDirectory. File_Dir inquiry returned successful! ',
    			      itoa(nFConvert +1),' files/folders found! line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  fnClearDispFileList('NORMAL','FileDir')
    	  while(nFDirReturn > 0 && nFileDirEntry <= MaxDisplayFileList) 
    	       {
    	       nFDirReturn = file_dir(icFileDirPath,cFileDirBuf,nFileDirEntry + nFEntryOffset) ;
    	       if (length_string(cFileDirBuf)) 
    		    {
    		    stack_var integer nFileDirForF
    		    nFileDirForF = find_string(cFileDirBuf,'/',1) ;
    		    if(nFileDirForF == 1)
    			 {
    			 sFFList[nFileDirEntry].FileFolder = mid_string(cFileDirBuf,2,length_string(cFileDirBuf)-1) ;
    			 sFFList[nFileDirEntry].FFicon = 'folder' ;
    			 }
    		    else
    			 {
    			 sFFList[nFileDirEntry].FileFolder = cFileDirBuf ;
    			 sFFList[nFileDirEntry].FFicon = 'file' ;
    			 }
    		    nFileDirEntry ++ ;
    		    }
    	       }
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnFileDirectory. File_Dir returned. Return = ',itoa(nFileDirEntry -1),
    						       ' + offset ',ITOA(nFEntryOffset),' Line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  fnFUpdateTP('FileDir') ;
    	  }
         else
    	  {
    	  stack_var char cErrorMsg [100] ;
    	  switch (itoa(nFDirReturn)) 
    	       {
    	       case '-12': {cErrorMsg = 'directory not loaded'} ;
    	       case '-10': {cErrorMsg = 'buffer too small'} ;
    	       case '-6' : {cErrorMsg = 'invalid parameter (i.e. Entry points beyond the end of the directory)'} ;
    	       case '-5' : {cErrorMsg = 'Disk I/O error'} ;
    	       case '-4' : {cErrorMsg = 'invalid directory path'} ;
    	       case '0'  : {cErrorMsg = 'directory empty or unkown directory error'} ;
    	       }
    	  nFnumFilesInDir = 0 ;
    	  sFFList[1].FileFolder = cErrorMsg ;
    	  sFFList[1].FFicon = 'file' ;
    	  fnClearDispFileList('ERROR','FDirError') ;
    	  #IF_DEFINED VAV_RnW_DEBUG
    	  SEND_STRING 0,"'FUNCTION fnFileDirectory. Bad File_Directory return: ',cErrorMsg,'! line-<',ITOA(__LINE__),'>',crlf" ;
    	  #END_IF
    	  }
         RETURN TRUE ;
         }
         
    DEFINE_FUNCTION CHAR fnClearDispFileList(CHAR iReturnType [8],CHAR iFromWhere[9])
         {
         stack_var integer n ;
         stack_var integer nStp ;
         switch (iReturnType)
    	  {
    	  case 'NORMAL': {nStp = 1} ;
    	  case 'ERROR' : {nStp = 2} ;
    	  }
         for (n = nStp; n <= MaxDisplayFileList; n ++)
    	  {
    	  sFFList[n].FileFolder = '' ;
    	  sFFList[n].FFicon = '' ;
    	  sFFListSent[n].FileFolder = 'refresh' ;
    	  sFFListSent[n].FFicon = 'fresh' ;
    	  }
         #IF_DEFINED VAV_RnW_DEBUG
         SEND_STRING 0,"'FUNCTION fnClearDispFileList. All File/Folder Structures cleared or refreshed! line-<',
    								      ITOA(__LINE__),'>',crlf" ;
         #END_IF
         if (iFromWhere == 'D_Start' || iFromWhere == 'FDirError')
    	  {
    	  fnFUpdateTP(iFromWhere) ;
    	  }
         RETURN TRUE ;
         }
         
    DEFINE_FUNCTION integer fnFilePathGetIndex(CHAR iPLUSorMINUS [])
         {
         stack_var integer nFFIindex ;
         stack_var integer nFFLocation ;
         nFFLocation = 0 ;
         for (nFFIindex = 1; nFFIindex <= MaxFilePathHistory; nFFIindex ++)
    	  {
    	  if(!length_string(sFPath[nFFIindex].FilePath))//find first open structure slot
    	       {
    	       nFFLocation = nFFIindex ;
    	       nFFIindex = MaxFilePathHistory + 1 ; //slot found exit loop!
    	       }
    	  else if (nFFIindex = MaxFilePathHistory) //no slot available 
    	       {
    	       nFFLocation = MaxFilePathHistory + 1 ;
    	       }
    	  }
         if ((iPLUSorMINUS == 'plus') || (iPLUSorMINUS == 'query'))
    	  {
    	  if (nFFLocation <= MaxFilePathHistory)
    	       {
    	       Switch (iPLUSorMINUS)
    		    {
    		    case 'query':{ nFFLocation = nFFLocation - 1 } ;
    		    case 'plus' :{ nFFLocation = nFFLocation } ;
    		    }
    	       }
    	  else if (nFFLocation > MaxFilePathHistory)
    	       {
    	       Switch (iPLUSorMINUS)
    		    {
    		    case 'query':{ nFFLocation = nFFLocation - 1 } ;
    		    case 'plus' :{ nFFLocation = 0 } ;
    		    }
    	       }
    	  }
         else if (iPLUSorMINUS == 'minus')
    	  {
    	  if (nFFLocation > 2)
    	       {
    	       sFPath[nFFLocation -1].FilePath = '' ;
    	       nFFLocation =  nFFLocation - 2 ;
    	       }
    	  else 
    	       {
    	       nFFLocation = 1 ;
    	       }
    	  }
         #IF_DEFINED VAV_RnW_DEBUG
         SEND_STRING 0,"'FUNCTION fnFilePathGetIndex. Returned index is ',itoa(nFFLocation),'! line-<',ITOA(__LINE__),'>',crlf" ;
         #END_IF
         RETURN nFFLocation ;
         }
    
    DEFINE_FUNCTION CHAR [MaxFilePathLength] fnFileBuildPath(INTEGER iFPathCount)
         {
         stack_var integer nFCount ;
         stack_var Char cFCombinePathTemp [MaxFilePathLength] ;
         
         for (nFCount = 1 ; nFCount <= iFPathCount; nFCount ++)
    	  {
    	  if (length_string(sFPath[nFCount].FilePath))
    	       {
    	       if (nFCount == 1)
    		    {
    		    cFCombinePathTemp = sFPath[nFCount].FilePath ;
    		    }
    	       else if (nFCount == 2)
    		    {
    		    cFCombinePathTemp = "cFCombinePathTemp,sFPath[nFCount].FilePath" ;
    		    }
    	       else 
    		    {
    		    cFCombinePathTemp = "cFCombinePathTemp,'/',sFPath[nFCount].FilePath" ;
    		    }
    	       }
    	  }
         #IF_DEFINED VAV_RnW_DEBUG
         SEND_STRING 0,"'FUNCTION fnFileBuildPath. Current file path ',cFCombinePathTemp,'--line-<',ITOA(__LINE__),'>',crlf" ;
         #END_IF
         RETURN cFCombinePathTemp ;
         }
         
    DEFINE_FUNCTION CHAR[MaxFilePathLength] fnFGetFilePath(CHAR iDoWhat [])
         {
         stack_var integer nFIndexer ;
         stack_var char cFilePathTemp [MaxFilePathLength] ;
    
         nFIndexer = fnFilePathGetIndex('plus') ;
         cFilePathTemp = fnFileBuildPath(nFIndexer) ;
         #IF_DEFINED VAV_RnW_DEBUG
         SEND_STRING 0,"'FUNCTION fnFileBuildPath. Current file path ',cFilePathTemp,'--line-<',ITOA(__LINE__),'>',crlf" ;
         #END_IF
         RETURN cFilePathTemp ;
         }
         
    DEFINE_START
    
    
    wait 700 
         {
         fnClearDispFileList('NORMAL','D_Start') ;
         sFPath[1].FilePath = File_DirRoot ;
         }
         
    DEFINE_EVENT
    
    BUTTON_EVENT [devTP_R_n_W_Array,nFTP_TPBtnArray]
         {
         PUSH:
    	  {
    	  stack_var integer nFileBtn
    	  
    	  nFileBtn = get_last (nFTP_TPBtnArray)
    	  devTP_RW_iActiveTP = button.input.device
    	  to [devTP_RW_iActiveTP,nFileBtn]
    	  SELECT
    	       {
    	       active (nFileBtn <= 10)://GENERAL BUTTONS
    		    {
    		    Switch (nFileBtn)////add button functions as needed
    			 {
    			 case 1:{fnFileDirectory(File_DirRoot,'RootBtn') fnFResetPageNum() ;}
    			 case 2: {  }
    			 case 3: // ANOTHER ROOT BUTTON "CHANGE THIS TO SOMETHING USEFUL OR ELIMINATE COMPLETELY!!!!"
    			      {
    			      stack_var integer nFDelete
    			      
    			      for (nFDelete = fnFilePathGetIndex('minus') ; nFDelete > 1; nFDelete -- )
    				   {
    				   sFPath[nFDelete].FilePath = '' ;
    				   }
    			      sFPath[1].FilePath = File_UpDir ;
    			      fnFileDirectory(sFPath[1].FilePath,'UpDirBtn') ;
    			      }
    			 case 4:// ANOTHER ROOT METHOD "CHANGE THIS TO SOMETHING USEFUL OR ELIMINATE COMPLETELY!!!!"
    			      {
    			      fnFileDirectory('','RootBtn') ;
    			      }    
    			 case 5: // ROOT 'user' DIRECTORY BUTTON
    			      {
    			      stack_var integer nReadFStrLen ;
    			      stack_var integer nFDelete
    			      stack_var integer nFIndex	
    
    			      for (nFDelete = fnFilePathGetIndex('minus') ; nFDelete > 1; nFDelete -- )
    				   {
    				   sFPath[nFDelete].FilePath = '' ;
    				   }
    			      sFPath[1].FilePath = File_DirRoot ;
    			      fnFileDirectory(sFPath[1].FilePath,'RootBtn') ;
    			      }
    			 case 6: // BACK BUTTON
    			      {
    			      stack_var integer nB ;
    			      stack_var char cFilePathTemp [MaxFilePathLength] ;
    			      
    			      nB = fnFilePathGetIndex('minus') ;
    			      cFilePathTemp = fnFileBuildPath(nB) ;		      
    			      fnFileDirectory(cFilePathTemp,'BackBtn') ;
    			      }
    			 case 9: // PAGE UP BUTTON
    			      {
    			      stack_var integer nFIndexer ;
    			      stack_var char cFilePathTemp [MaxFilePathLength] ;
    			      
    			      nFIndexer = fnFilePathGetIndex('plus') ;
    			      cFilePathTemp = fnFileBuildPath(nFIndexer) ;	
    			      if(nFEntryOffset > MaxDisplayFileList)
    				   {
    				   nFEntryOffset = nFEntryOffset - 10 ;
    				   fnFileDirectory(cFilePathTemp,'PageUpBtn') ;
    				   }
    			      else if (nFEntryOffset > 0)
    				   {
    				   nFEntryOffset = 0 ;
    				   fnFileDirectory(cFilePathTemp,'PageUpBtn') ;
    				   }
    			      else 
    				   {
    				   nFEntryOffset = 0 ;
    				   }
    			      }
    			 case 10: // PAGE DOWN
    			      {
    			      stack_var integer nFIndexer ;
    			      stack_var char cFilePathTemp [MaxFilePathLength] ;
    			      
    			      nFIndexer = fnFilePathGetIndex('plus') ;
    			      cFilePathTemp = fnFileBuildPath(nFIndexer) ;
    			      
    			      if((nFnumFilesInDir - nFEntryOffset) > (MaxDisplayFileList * 2 ))
    				   {
    				   nFEntryOffset = nFEntryOffset + MaxDisplayFileList ;
    				   fnFileDirectory(cFilePathTemp,'PageDwnBtn') ;
    				   }
    			      else
    				   {
    				   if ((nFnumFilesInDir - nFEntryOffset) > MaxDisplayFileList)
    					{
    					nFEntryOffset = nFnumFilesInDir - MaxDisplayFileList ;
    					fnFileDirectory(cFilePathTemp,'PageDwnBtn') ;
    					}
    				   else
    					{
    					if (nFnumFilesInDir > MaxDisplayFileList)
    					     {
    					     nFEntryOffset = nFnumFilesInDir - MaxDisplayFileList ;
    					     fnFileDirectory(cFilePathTemp,'PageDwnBtn') ;
    					     }
    					else
    					     {
    					     nFEntryOffset = 0
    					     }
    					}
    				   }
    			      }
    			 }
    		    }
    	       active (nFileBtn >= 11 && nFileBtn <= 20):// SELECT BUTTONS FOR RETURNED LIST
                        {
    		    stack_var integer nFIndexer ;
    		    stack_var integer n ;
    		    nFIndexer = fnFilePathGetIndex('plus') ;
    		    if (nFIndexer) // returned value not zero meaning slot available!
    			 {
    			 if (sFFList[nFileBtn - 10].FFicon == 'folder')
    			      {
    			      stack_var integer nFPath
    			      stack_var char cFTempPath [MaxFilePathLength]
    			      sFPath[nFIndexer].FilePath = sFFList[nFileBtn - 10].FileFolder ;
    			      cFTempPath = fnFileBuildPath(nFIndexer) ; 
    			      fnFileDirectory(cFTempPath,'OpenNew') ; 
    			      }
    			 else if (sFFList[nFileBtn - 10].FFicon == 'file')
    			      {
    			      stack_var char cFFile [MaxReadBufLength]
    			      sFPath[nFIndexer].FilePath = sFFList[nFileBtn - 10].FileFolder ;
    			      cFFile = fnFileRead(sFPath[nFIndexer].FilePath,MaxReadBufLength) ;
    			      sFFList[1].FileFolder = cFFile
    			      fnFUpdateTP('FileOpen')
    			      }
    			 else
    			      {
    			      n = 1  ///does nothing just filler
    			      // pop-up something
    			      }
    			 }
    		    else
    			 {
    			 n = 0 ///does nothing just filler
    			 // pop-up something
    			 }
    		    }
    	       }
    	  }
         }
    
    
         
    DEFINE_PROGRAM
    
    ////////////////////////////////////////////////////////
    
    
    
    /////////////////////////////////////////////////////////
    
    
    
    /////////////////////////////////////////////////////////
    

    When you run across this stuff:
    #IF_DEFINED VAV_RnW_DEBUG
         SEND_STRING 0,"'FUNCTION fnF_TPDataSent. TP''s updated & sent STRUCT mirrored! line-<',ITOA(__LINE__),'>',crlf" ;
         #END_IF
    
    
    you can get rid of the compiling directives. Back then I thought I would just compile with debug info during testing and then the final code would be compiled with out it. I've since decided f' that in lieu of a debug variable in a function call and keeping it in all the time.
  • Options
    jimmywjimmyw Posts: 112
    I could pull the CF card but then I would have to pull it everytime a new FW came out, I have been able to pull out the files already via ftp, just doesnt support directory change of /../ or even listing of it. The reason for the poking is thus, I am VERY preliminary right now but I may be able to extend ni-2100 fairly simply into 3100s each Motorola CAN handle 2 io 2 ir 2 serial and 2 relay, why its done this way I dont know, I can emulate a chipset on the i2c bus and tell it that I am another motorola chip and get it to talk to me for more serial ports etc. This is not for field installation, but for my house, for although I may be nosy, I dont have alot of spare cash to buy an ni3000
  • Options
    viningvining Posts: 4,368
    Maybe the easiest thing to do which I think I said in the last post would be to use the file commands and just copy from the root directory and put the file in the user directory and ftp from there if you still need to.
  • Options
    PhreaKPhreaK Posts: 966
    If you're just wanting to poke you can use the 'list' command from within a telnet session. Its hidden from the standard telnet user but if you connect then user the 'superuser' command it'll give you the info you need about it when you type help.

    You can then use ftp to get and put files of interest using an absolute location.
Sign In or Register to comment.