You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.3 KiB
C++

// Cassette.h: interface for the CCassette class.
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include <array>
#include <vector>
#include "DllDefines.h"
constexpr auto MAX_SLOT_PER_CASSETTE = 25;
enum class eSLOT_STATE
{
INVALID = -1,
NO_WAFER,
PRESENT,
CROSS_SLOT,
DOUBLE_WAFER,
WAFER_PROCESSED,
WAFER_PROCESSING,
WAFER_REJECTED,
MAX_SLOT_STATE,
ALL_SLOTS_OK = NO_WAFER,
};
enum class eDIRECTION
{
BOTTOM_UP,
TOP_DOWN,
};
enum class ePROCESS_STATUS
{
INVALID = -1,
NO_WAFER_PRESENT,
WAFER_PRESENT,
WAFER_REJECT, // due to cannot pick wafer ???
};
enum class eCASSETTE
{
CURRENT_CASSETTE = 0,
NEW_CASSETTE = 1,
};
using stCassette = struct _stCassette
{
eCASSETTE cassState{ 0 };
std::array<eSLOT_STATE, MAX_SLOT_PER_CASSETTE> arrSlotInfo;
};
class MCCTRDLLCLASS CCassette
{
public:
CCassette();
virtual ~CCassette();
// methods
bool IsAllSlotsFilled();
int GetNextEmptyWaferSlot(eDIRECTION bDir = eDIRECTION::BOTTOM_UP);
static eSLOT_STATE IsAnyCrossSlotorDoubleWafer(stCassette stCass, int nSlots);
eSLOT_STATE IsAnyCrossSlotOrDoubleWafer();
bool IsCassNeedProcessing();
int GetNextWaferSlot();
bool IsAllSlotsProcessed();
stCassette GetCassetteInfo() const;
eSLOT_STATE GetSlotStatus(int nSlotNo);
bool Init(const stCassette& stCass, int nNoOfSlot = MAX_SLOT_PER_CASSETTE);
bool Init(int iNumOfSlot);
bool SetNumOfSlot(int iNumOfSlot);
bool SetSlotPitch(double dSlotPitch);
bool SetSlotStatus(int iSlotNum, eSLOT_STATE iSlotStatus);
bool SetCurSlotNum(int iSlotNum);
bool SetCurSlotStatus(ePROCESS_STATUS iSlotStatus);
int GetNumOfSlot() const;
double GetSlotPitch() const;
int GetCurrentSlot() const;
int GetNextSlotNum() const;
int GetNextSlot();
bool IndexToNextSlot();
void ResetSlotNum();
private:
// methods
bool CheckValidStatus(eSLOT_STATE nStatus) const;
bool CheckSlotNoValid(int nSlotNo) const;
// attribute
stCassette m_stCassette;
// attributes
std::vector<ePROCESS_STATUS> m_vecSlot;
int m_iCurSlot{ 0 };
double m_dSlotPitch{ 0.0 };
};