Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table of Contents
minLevel1
maxLevel2

1. F_OpenInstancesAndFPAs
Anchor
F_OpenInstancesAndFPAs
F_OpenInstancesAndFPAs

General Description

Multi API-DLL scans USB ports or LAN for connected FPAs listed in the setup file, or input string. When an FPA listed in the setup file is found, the corresponding API-DLL is copied on disk if necessary, and loaded. F_Initialization should be called for each FPA after this function succeeds.

...

In both cases, for the setup file and the input string, if a specied specified FPA is missing then it will not
affect subsequent entries. Therefore, a setup file with these contents:

...

Code Block
FPA-1 20090123
FPA-2 20090346
FPA-3 empty
FPA-4 20090245

Output

INT_X : number of instances opened successfully

...

All FPAs terminate communication with target devices and close target devices according to configuration settings (power setting, adapter line states, etc.). Finally, the USB/Ethernet connections to the FPAs are terminated and API-DLL instances are freed. The Multi API-DLL can now be used to open a new set of FPAs using the function F_OpenInstancesAndFPAs.

Syntax

Code Block
languagecpp
INT_X F_CloseInstances ( void );

Input

none.

Output

INT_X : success or failed

  • TRUE (1) - success

  • FALSE (0) - failed

3. F_Set_FPA_index
Anchor
F_Set_FPA_index
F_Set_FPA_index

General Description

Select desired FPA index to perform specific tasks (access specific API-DLL instance).

...

BYTE fpa : desired FPA index, 1 to 64, or 0 for all

Output

INT_X : success or error

IMPORTANT

...

BYTE : current FPA index as set using F_Set_FPA_index

5. F_Check_FPA_index

General Description

...

Anchor
F_Check_FPA_index
F_Check_FPA_index

General Description

Get current FPA index and check if index is valid. A valid index corresponds to an individual FPA that has been opened with F_OpenInstancesAndFPAs. If FPA index was set to 0 (all), then this function will only return 0, even if no FPAs are open. Does not indicate whether FPA index is enabled or disabled.

...

Code Block
languagecpp
INT_X F_Check_FPA_index ( void );

Input

none.

Output

INT_X : current fpa index if valid

6. F_Enable_FPA_index

...

BYTE fpa : desired FPA index, 1 to 64

Output

none.

8. F_LastStatus
Anchor
F_LastStatus
F_LastStatus

General Description

Return value from the last function call issued to the specified FPA (API-DLL instance). This function is useful when multiple FPAs are being programmed using FPA index 0 (all), but the return value was not the same for all FPAs (i.e. 4 FPAs succeeded, 1 FPA failed). When the return value is not the same for all FPAs then, then the actual return value from the Multi API-DLL will be FPA_UNMATCHED_RESULTS. To find out per FPA return values, select each FPA index individually using F_Set_FPA_index, and call F_LastStatus for each index.

...

BYTE fpa : desired FPA index, 1 to 64.

Output

INT_X : Last return value from the selected FPA (API-DLL instance).

9. F_Multi_DLLTypeVer

...

  • Code Block
    	// return	 Type + Version	
    	//           Type	0x6000 - Multi-FPA FlashPro430
    	//					0x7000 - Multi-FPA GangPro430
    	//					0x8000 - Multi-FPA FlashPro-CC
    	//					0x9000 - Multi-FPA GangPro-CC
    	//					0xC000 - Multi-FPA FlashPro2000
    	//					0xD000 - Multi-FPA GangPro2000
    	//				   0x10000 - Multi-FPA FlashPro-ARM
    	//				   0x11000 - Multi-FPA GangPro-ARM
    	//				   0x17000 - Multi-FPA FlashPro-M
    	//				   0x18000 - Multi-FPA GangPro-M
    	//			 Version = 0x0FFF & version
  • FPA_INVALID_NO (-2 or 0xFFFFFFFE) : FPA not opened with Multi API-DLL Functions | F_OpenInstancesAndFPAs or index out of range

10. F_Get_FPA_SN

...

BYTE fpa : desired FPA index, 1 to 64

Output

INT_X : serial number

11. F_Get_FPA_Label

...

Code Block
languagecpp
#define ADAPTER_HARDWARE_PN_SIZE		16	
#define ADAPTER_DESCRIPTION_SIZE		32
#define FPA_LABEL_SIZE					((ADAPTER_HARDWARE_PN_SIZE + ADAPTER_DESCRIPTION_SIZE)*sizeof(char) + 12*sizeof(BYTE) + sizeof(long))
union FPA_LABEL
{
	BYTE	bytes[ FPA_LABEL_SIZE ];
	struct
	{
		long  SN;
		BYTE  hardware_ID;
		BYTE  hardware_SubID;
		BYTE  full_access;
		BYTE  Interface_Type;
		BYTE  Valid_access_key;
		BYTE  spare3;
		BYTE  spare4;
		BYTE  spare5;
		BYTE  spare6;
		BYTE  spare7;
		BYTE  spare8;
		BYTE  spare9;
		char  adapter_hardware_PN[ ADAPTER_HARDWARE_PN_SIZE ];
		char  adapter_description[ ADAPTER_DESCRIPTION_SIZE ];
	}x;
};

Output

INT_X : serial number, hardware ID, meta-data

Example of printing FPA_LABEL:

Code Block
languagecpp
std::stringstream msg;
msg << "INIT: " << (i) << ": Get_FPA_Label, SN=" << inst.x.SN << "\r\n";
msg << "INIT:   HW ID=" << (int)inst.x.hardware_ID << ", HW sub-ID=" << (int)inst.x.hardware_SubID << "\r\n";
msg << "INIT:   Full Access=" << (int)inst.x.full_access << ", Interface Type=" << (int)inst.x.Interface_Type << "\r\n";
msg << "INIT:   Access Key=" << (int)inst.x.Valid_access_key << "\r\n";
msg << "INIT:   HW PN=" << inst.x.adapter_hardware_PN << "\r\n";
msg << "INIT:   Adapter Desc=" << inst.x.adapter_description;

12. F_

...

Get_FPA_List

General Description

Get internal progress counter value for operations done inside Encapsulated Functions . When used in conjunction with F_GetLastOpCode it allows the user application to keep track of progress in the same way that the FlashPro-ARM/GangPro-ARM GUI does.

Will return value between 0 and 100 for current sub-operation being performed inside encapsulated function. Depending on the complexity of the encapsulated function, the number of sub-operations will vary. Use F GetLastOpCode to get currently running sub-operation opcode. When transitioning from one sub-operation that reached a progress value of 100, to another sub-operation, the progress value will restart at 0. This will repeat until the last sub-operation upon which the progress value will remain at 100. A new invocation of an encapsulated function will restart the progress value at 0.

This function is thread-safe, therefore it can be called while the Multi API-DLL is busy, for example running F_AutoProgram. Intended usage is to call an encapsulated function with one thread, and repeatedly call this function and F_GetLastOpCode with another thread. When simultaneously programming using multiple FPAs (fpa index set to 0 (ALL FPAs), the thread monitoring progress can iterate different input parameters (fpa=1, fpa=2, fpa=3, etc.) to monitor the progress of each FPA individually. This function cannot be called with parameter 0 (ALL FPAs).

Syntax

Code Block
languagecpp
INT_X	MSPPRG_API F_GetProgressBar(  BYTE  fpa  );

Input

BYTE fpa : desired FPA index, 1 to 64.

Output

INT X : progress indicator

  • value between 0 and 100

  • FPA_INVALID_NO (-2 or 0xFFFFFFFE) : FPA not opened with F_OpenInstancesAndFPAs or index out of range

Example

Refer to GetLastOpCode.

13. F_GetLastOpCode

General Description

Read internal opcode value for sub-operations done inside Encapsulated Functions. When used in conjunction with F_GetProgressBar it allows the user application to keep track of progress in the same way that the FlashPro-ARM/GangPro-ARM GUI does.

Will return opcode for current sub-operation being performed inside encapsulated function. Depending on the complexity of the encapsulated function, the number of sub-operations will vary. Use F_GetProgressBar to get progress value between 0 and 100, of currently running sub-operation. When transitioning from one sub-operation that reached a progress value of 100, to another sub-operation, the progress value will restart at 0 and the opcode will be set to the new sub-operation, currently being runThis function will print the metadata about all avaialble FPAs that are connected to the computer, up to a maximum of 64 adapters.

Syntax

Code Block
languagecpp
INT_X  MSPPRG_API	F_Get_FPA_List( ALL_FPA_LIST * FPA_List );

Input

ALL_FPA_LIST *FPA_List: pointer to array of ALL_FPA_LIST structs, i.e.

Code Block
languagecpp
#define MAX_ID_DESC		 15
#define MAX_ACCESS_DESC	 32
typedef struct
{
	UINT32  active;
	UINT32  SN;
	UINT32  CommType;
	UINT32  HW_ID;
	UINT32  HW_rev;
	char  text[MAX_ID_DESC+1];
	char  access_text[MAX_ACCESS_DESC+1];
} ALL_FPA_LIST;

//i.e.: 
ALL_FPA_LIST FPA_List[MAX_USB_DEV_NUMBER];
//F_Get_FPA_List(FPA_List);
INT_X  MSPPRG_API	F_Get_FPA_List( ALL_FPA_LIST * FPA_List );	// FPA_List -> size MAX_USB_DEV_NUMBER

Output

INT_X : number of active adapters

13. F_GetProgressBar

General Description

Get internal progress counter value for operations done inside Encapsulated Functions . When used in conjunction with F_GetLastOpCode it allows the user application to keep track of progress in the same way that the FlashPro-ARM/GangPro-ARM GUI does.

Will return value between 0 and 100 for current sub-operation being performed inside encapsulated function. Depending on the complexity of the encapsulated function, the number of sub-operations will vary. Use F GetLastOpCode to get currently running sub-operation opcode. When transitioning from one sub-operation that reached a progress value of 100, to another sub-operation, the progress value will restart at 0. This will repeat until the last sub-operation upon which the opcode will not changeprogress value will remain at 100. A new invocation of an encapsulated function will reset the opcode to the first sub-operation of the new encapsulated functionrestart the progress value at 0.

This function is thread-safe, therefore it can be called while the Multi API-DLL is busy, for example running F_AutoProgram. Intended usage is to call an encapsulated function with one thread, and repeatedly call this function and F_GetProgressBar GetLastOpCode with another thread. When simultaneously programming using multiple FPAs (fpa index set to 0 (ALL FPAs), the thread monitoring progress can iterate different input parameters (fpa=1, fpa=2, fpa=3, etc.) to monitor the progress of each FPA individually. This function cannot be called with parameter 0 (ALL FPAs).

...

Code Block
languagecpp
INT_X	MSPPRG_API F_GetLastOpCodeGetProgressBar(  BYTE  fpa  );

Input

BYTE fpa : desired FPA index, 1 to 64.

Output

INT_X : opcode of currently running sub-operation

  • PROG_OPCODE_VERIFY_ACCESS (1) : FPA is attempting to perform action described in F_Verify_Access to MCU.

  • PROG_OPCODE_FLASH_ERASE (2) : FPA is attempting to perform action described in F_Memory_Erase.

  • PROG_OPCODE_FLASH_BLANK_CHECK (3) : FPA is attempting to perform action described in F_Memory_Blank_Check.

  • PROG_OPCODE_FLASH_SELECTED_BLANK_CHECK (4) : FPA is attempting to perform action described in F_Memory_Blank_Check when a subset of the memory space is selected in configuration settings.

  • PROG_OPCODE_FLASH_WRITE (5) : FPA is attempting to perform action described in F_Memory_Write.

  • PROG_OPCODE_FLASH_VERIFY (6) : FPA is attempting to perform action described in F_Memory_Verify.

  • PROG_OPCODE_FLASH_READ (7) : FPA is attempting to perform action described in F_Memory_Read.

  • PROG_OPCODE_LOCK_MCU (8) : FPA is attempting to perform action described in F_Lock_MCU.

  • PROG_OPCODE_UNLOCK_MCU (9) : FPA is attempting to perform action described in F_Clear_Locked_Device.

  • PROG_OPCODE_START_APP (10) : FPA is attempting to run application programmed onto target device (if enabled to be ran after F_AutoProgram in configuration settings).

  • FPA INVALID NO (-2 or 0xFFFFFFFE) : FPA not opened with F_OpenInstancesAndFPAs or index out of range

Example

Code Block
languagecpp
void UpdateProgress(BYTE fpa, INT_X &progValue, INT_X &lastOpCode, CString &opCodeUpdate)
{
  if(fpa == 0)
  {
    //invalid index
    return;
  }
  progValue = F_GetProgressBar(fpa);
  lastOpCode = F_GetLastOpCode(fpa);
  opCodeUpdate = "Unknown";
  switch(lastOpCode)
  {
    case PROG_OPCODE_VERIFY_ACCESS:
      opCodeUpdate = "Verify Access To MCU";
      break;
    case PROG_OPCODE_FLASH_ERASE:
      opCodeUpdate = "Flash Erase";
      break;
    case PROG_OPCODE_FLASH_BLANK_CHECK:
      opCodeUpdate = "Flash Blank Check";
      break;
    case PROG_OPCODE_FLASH_SELECTED_BLANK_CHECK:
      opCodeUpdate = "Selected Memory Blank Check";
      break;
    case PROG_OPCODE_FLASH_WRITE:
      opCodeUpdate = "Flash Write";
      break;
    case PROG_OPCODE_FLASH_VERIFY:
      opCodeUpdate = "Flash Verify";
      break;
    case PROG_OPCODE_FLASH_READ:
      opCodeUpdate = "Flash Read";
      break;
    case PROG_OPCODE_LOCK_MCU:
      opCodeUpdate = "Lock MCU";
      break;
    case PROG_OPCODE_UNLOCK_MCU:
      opCodeUpdate = "Unlock MCU";
      break;
    case PROG_OPCODE_START_APP:
      opCodeUpdate = "Start Application";
      break;
  }  
}

...

progress indicator

Example

Refer to https://elprotronic.atlassian.net/wiki/spaces/FPGPARM/pages/57737464/Multi+API-DLL+Functions#F_GetLastOpCode

14. F_GetLastOpCode
Anchor
F_GetLastOpCode
F_GetLastOpCode

General Description

Read internal opcode value for sub-operations done inside Encapsulated Functions. When used in conjunction with F_GetProgressBar it allows the user application to keep track of progress in the same way that the FlashPro-ARM/GangPro-ARM GUI does.

Will return opcode for current sub-operation being performed inside encapsulated function. Depending on the complexity of the encapsulated function, the number of sub-operations will vary. Use F_GetProgressBar to get progress value between 0 and 100, of currently running sub-operation. When transitioning from one sub-operation that reached a progress value of 100, to another sub-operation, the progress value will restart at 0 and the opcode will be set to the new sub-operation, currently being run. This will repeat until the last sub-operation upon which the opcode will not change. A new invocation of an encapsulated function will reset the opcode to the first sub-operation of the new encapsulated function.

This function is thread-safe, therefore it can be called while the Multi API-DLL is busy, for example running F_AutoProgram. Intended usage is to call an encapsulated function with one thread, and repeatedly call this function and F_GetProgressBar with another thread. When simultaneously programming using multiple FPAs (fpa index set to 0 (ALL FPAs), the thread monitoring progress can iterate different input parameters (fpa=1, fpa=2, fpa=3, etc.) to monitor the progress of each FPA individually. This function cannot be called with parameter 0 (ALL FPAs).

Syntax

Code Block
languagecpp
INT_X	MSPPRG_API F_GetLastOpCode( BYTE fpa );

Input

BYTE fpa : desired FPA index, 1 to 64.

Output

INT_X : opcode of currently running sub-operation

  • PROG_OPCODE_VERIFY_ACCESS (1) : FPA is attempting to perform action described in F_Verify_Access to MCU.

  • PROG_OPCODE_FLASH_ERASE (2) : FPA is attempting to perform action described in F_Memory_Erase.

  • PROG_OPCODE_FLASH_BLANK_CHECK (3) : FPA is attempting to perform action described in F_Memory_Blank_Check.

  • PROG_OPCODE_FLASH_SELECTED_BLANK_CHECK (4) : FPA is attempting to perform action described in F_Memory_Blank_Check when a subset of the memory space is selected in configuration settings.

  • PROG_OPCODE_FLASH_WRITE (5) : FPA is attempting to perform action described in F_Memory_Write.

  • PROG_OPCODE_FLASH_VERIFY (6) : FPA is attempting to perform action described in F_Memory_Verify.

  • PROG_OPCODE_FLASH_READ (7) : FPA is attempting to perform action described in F_Memory_Read.

  • PROG_OPCODE_LOCK_MCU (8) : FPA is attempting to perform action described in F_Lock_MCU.

  • PROG_OPCODE_UNLOCK_MCU (9) : FPA is attempting to perform action described in F_Clear_Locked_Device.

  • PROG_OPCODE_START_APP (10) : FPA is attempting to run application programmed onto target device (if enabled to be ran after F_AutoProgram in configuration settings).

  • FPA_INVALID_NO (-2 or 0xFFFFFFFE) : FPA not opened with Multi API-DLL Functions | F_OpenInstancesAndFPAs or index out of range

Example

Insert excerpt
Progress Bar Monitor
Progress Bar Monitor
nameProgress Bar Monitor Code Example 1

15. F_CancelAction

General Description

Function that will attempt to cancel any running Encapsulated Functions , like the GUI Cancel button. This function is thread-safe. One thread can call F_AutoProgram (for example) and another thread can call F_CancelAction to stop the first. A reinitialization is recommended using F_OpenInstancesAndFPAs after calling this function.

Syntax

Code Block
languagecpp
INT_X  MSPPRG_API	F_CancelAction( BYTE fpa );

Input

BYTE fpa : desired FPA index, 1 to 64.

Output

INT_X : success or failed

  • TRUE (1) - success

  • FALSE (0) - failed

16. F_Trace_File

General Description

Set custom FileName for trace (used with Trace_ON). Set append flag true to keep previous contents.

Syntax

Code Block
languagecpp
INT_X	F_Trace_File( char *FileName, bool append = false );

Input

char *FileName : path to new trace file.
bool append : append to file if it already exists.

Output

INT_X : success or failed in opening file

  • TRUE (1) - success

  • FALSE (0) - failed

17. F_Trace_Comment

General Description

Append a custom comment to current trace file.

Syntax

Code Block
languagecpp
void   MSPPRG_API   F_Trace_Comment(char *comment);

Input

char *comment : comment to be added to trace file at current location in the trace.

Output

none.

18. F_Trace_ON

General Description

Activate tracing for subsequent calls to the Multi API-DLL. Log is saved in DLLtrace.txt located in the Multi API-DLL directory, or custom file if F_Trace_File function was called. When activated, records all API-DLL function calls from the application software invoked via the Multi API-DLL. The DLLtrace.txt trace file is overwritten for each new session, unless the F_Trace_File append flag is true.

Syntax

Code Block
languagecpp
void F_Trace_ON( void );

Input

none.

Output

none.

...

19. F_Trace_OFF

General Description

Disable tracing.

Syntax

Code Block
languagecpp
void F_Trace_OFF( void );

Input

none.

Output

none.