Skip to main content

Microsoft Visual C++ LIN Master Simulation Program

Screen Layout

C++ LIN Master Simulation Program
ItemDescription
Start buttonStarts monitoring and frame transmission based on transmission schedule.
Send Sleep buttonSends a sleep command.
Send Interrupt buttonSends interrupt transmission frame.
For details, see Interrupt Transmission Frame.
Stop buttonStops monitoring and frame transmission based on transmission schedule.
Log display area
(area ①)
Displays transmitted/received logs.
Up to 100 logs are retained. If exceeded, old logs are cleared first.
If monitoring is restarted after stop, all previous logs are cleared.
For displayed fields, see Log Display Details.
StatusSwitches LIN status by radio button.
Wakeup: Run (Awake) state / Sleep: Sleep state
ScheduleSwitches schedule by radio button.
For schedule details, see Transmission Schedule.
DataSwitches Tx frame data in each schedule by radio button.
For frame details, see Transmission Schedule.

Log Display Details

ItemDescription
msecTimestamp (milliseconds).
usecTimestamp (microseconds).
DirLog direction.
Rx: receive log / Tx: transmit log
TypeLog type or error content.
FormatDisplays the following by log type.
Header: SyncBreak width / Wakeup: wakeup pulse width
IDLIN ID in hexadecimal.
DLData length (1 to 8).
DataData (D1 to D8) in hexadecimal, separated by commas.
ChecksumChecksum in hexadecimal.

Transmission Schedule

Details of each transmission schedule are as follows.

No.DirIDDelayDLData (Hex)
D1D2D3D4D5D6D7D8
0
(*1)
Tx
(*2)
10H500ms240HC8H
15H200ms215H9DH
Rx11H500ms-
1
(*1)
Tx
(*2)
20H500ms420H64HA8HECH
25H400ms413H57H9BHDFH
Rx21H500ms-

*1: If #0 is selected in Schedule, No.0 schedule is used. If #1 is selected, No.1 schedule is used.
*2: If Type A is selected in Data, the upper row is used. If Type B is selected, the lower row is used.

Interrupt Transmission Frame

The interrupt transmission frame is as follows.

DirIDDLData (Hex)
D1D2D3D4D5D6D7D8
Tx30H801H23H45H67H89HABHCDHEFH

Error Handling

The following cases are treated as errors. An error dialog is shown and the program exits.

  • MicroPeckerX is not detected when the program starts.
  • API call fails at monitoring start/stop or during monitoring.

Implementation Example (Source Code with Comments)

Source: MPXCtrl_LIN_CPP_MstSample/MPXCtrl_LIN_CPP_MstSample/Form1.h

// 1) Open
StMPXDeviceInfo devices[1] = {};
unsigned char count = 0;
ER ret = MPXOpen(devices, 1, &count);
if (ret != E_OK || count == 0) return;
unsigned long serial = devices[0].Serial;

// 2) Set parameters for LIN Master
StMPXLINParam lin = {};
lin.Mode = MPX_LIN_MODE_MASTER;
lin.Revision = MPX_LIN_REV_21;
lin.Baudrate = 19200;
ret = MPXLINSetParam(serial, &lin);
if (ret != E_OK) return;

// 3) Enable schedules
MPXLINSetMasterSchedule(serial, 0, MPX_LIN_SIM_ENA, MPX_LIN_SIM_DIS);
MPXLINSetMasterSchedule(serial, 1, MPX_LIN_SIM_ENA, MPX_LIN_SIM_DIS);

// 4) Set schedule contents
StMPXLINMasterSim sch = {};
// Set Tx/Rx frames in sch.Item[] and register
ret = MPXLINSetMasterSim(serial, 0, &sch, 2);
if (ret != E_OK) return;
ret = MPXLINSetMasterSim(serial, 1, &sch, 2);
if (ret != E_OK) return;

// 5) Set initial state and start
MPXLINChangeMasterSchedule(serial, 0);
MPXLINSetStatus(serial, MPX_LIN_STS_RUN);
MPXSetGetLogMode(serial, MPX_INNERCH_LIN, MPX_GETLOGMODE_GETLOGAPI);
ret = MPXMonitorStart(serial, MPX_SYNC_MASTER);
if (ret != E_OK) return;

// 6) Optional event
// Interrupt transmission
StMPXLINMasterSimItem interruptItem = {};
interruptItem.FrameType = MPX_LIN_FRAME_TYPE_TX;
ret = MPXLINMasterInterrupt(serial, &interruptItem);

// 7) Stop
unsigned long mSec = 0;
unsigned short uSec = 0;
MPXMonitorStop(serial, &mSec, &uSec);
MPXClose();