Code:
#include <utility.h>
#include "XbeeTerminal.h"
#include <formatio.h>
#include <rs232.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
static int panelHandle;
static int panelHandle2;
static int panelHandle3;
//============================AT style API frames=======================
typedef struct XbeeATcmdObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x08
int frameID;
int cmd;
int param;
char checkSum[1];
}XbeeATcmdObj;
typedef struct XbeeATcmdQparamObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x09
int frameID;
int cmd;
int param;
char checkSum[1];
}XbeeATcmdQparamObj;
typedef struct XbeeRemoteATcmdObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x17
int frameID;
int destAddrHi;
int destAddrLo;
int netAddr;
int options;
int cmd;
int param;
char checkSum[1];
}XbeeRemoteATcmdObj;
typedef struct XbeeATcmdStatusObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x88
int frameID;
int cmd;
int cmdStatus;
char checkSum[1];
}XbeeATcmdStatusObj;
//========================================================================
//=============================API Transmit frames =====================
typedef struct XbeeTxObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x10
int frameID;
int destAddrHi;
int destAddrLo;
int netAddr;
int radius;
int options;
char message[256];
char checkSum[1];
}XbeeTxObj;
typedef struct XbeeTxExpObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x11
int frameID;
int destAddrHi;
int destAddrLo;
int netAddr;
int sourceEndPoint;
int destEndpoint;
int ClusterID;
int ProfileID;
int radius;
int options;
char message[256];
char checkSum[1];
}XbeeTxExpObj;
typedef struct XbeeTxStatusObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x8B
int frameID;
int netAddr;
int retries;
int status;
int discovery;
char checkSum[1];
}XbeeTxStatusObj;
//==============================================================================
//================================API Receive frames============================
typedef struct XbeeRxObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x90
int sourceAddrHi;
int sourceAddrLo;
int sourcenetAddr;
int options;
char message[256];
char checkSum[1];
}XbeeRxObj;
typedef struct XbeeRxIOsampleObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x92
int sourceAddrHi;
int sourceAddrLo;
int sourcenetAddr;
int options;
int numSamples;
int digMask1;
int digMask2;
int analogMask;
int digData;
int analogData;
char checkSum[1];
}XbeeRxIOsampleObj;
//==============================================================================
//=================================General purpose API frames====================
typedef struct XbeeStatusObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x8A
int status;
char checkSum[1];
}XbeeStatusObj;
typedef struct XbeeSourceRouteObj
{
int start;
int lenMSB;
int lenLSB;
int frameType; //0x21
int frameID;
int destAddrHi;
int destAddrLo;
int netAddr;
int options;
int numAddresses;
int addr1; //neighbor closest to dest
int addr2;
int addr3; //neighbor closest to source
int cmdParam;
char checkSum[1];
}XbeeSourceRouteObj;
void CVICALLBACK RxComPort (int portNumber, int eventMask, void *callbackData);
XbeeRemoteATcmdObj *XbeeRemoteATcmdTx;
XbeeATcmdStatusObj *XbeeATcmdTxStatus;
XbeeTxObj *XbeeTx;
XbeeTxStatusObj *XbeeTxStatus;
XbeeRxObj *XbeeRx;
XbeeRxIOsampleObj *XbeeRxIOsample;
int ComMode;
int ComPort;
int changeDetect;
int pullUp;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "XbeeTerminal.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
// GetCtrlVal (PANEL, PANEL_NUMERIC_5, &portA);
ComMode = 0x01;
ComPort = 0x03;
OpenComConfig (ComPort, "", 9600, 0, 8, 1, 512, 512);
InstallComCallback (ComPort, 1, 0, 0, RxComPort, 0);
// Set-up default XbeeTxObj values
XbeeTx = (XbeeTxObj *)malloc(sizeof(XbeeTxObj));
XbeeTx->start = 0x7E;
XbeeTx->frameType = 0x10;
XbeeTx->frameID = 0x01;
XbeeTx->destAddrHi = 0x0013A200; //For all Digi Xbee radios
// XbeeTx->destAddrLo = 0x40683F5D; // my robot Xbee
XbeeTx->destAddrLo = 0x406932B4; // my dev Xbee
XbeeTx->netAddr = 0xFFFE; //Leave at this value when using 8 byte address mode
XbeeTx->radius = 0x00; //Value 0x00 allow max hops
XbeeTx->options = 0x00; //Set to 0x01 to disable ACK
// Set-up default XbeeRxObj values
XbeeRx = (XbeeRxObj *)malloc(sizeof(XbeeRxObj));
// Set-up default XbeeTxStatusObj values
XbeeTxStatus = (XbeeTxStatusObj *)malloc(sizeof(XbeeTxStatusObj));
// Set-up default XbeeRemoteATcmdObj values
XbeeRemoteATcmdTx = (XbeeRemoteATcmdObj *)malloc(sizeof(XbeeRemoteATcmdObj));
XbeeRemoteATcmdTx->start =0x7E;
XbeeRemoteATcmdTx->lenMSB =0x00;
XbeeRemoteATcmdTx->frameType =0x17;
XbeeRemoteATcmdTx->frameID =0x01;
XbeeRemoteATcmdTx->destAddrHi =0x0013A200;
XbeeRemoteATcmdTx->netAddr =0xFFFE;
XbeeRemoteATcmdTx->options =0x02; //0x00 = no ACK, 0x02 = apply changes
// Set-up default XbeeATcmdStatusObj values
XbeeATcmdTxStatus = (XbeeATcmdStatusObj *)malloc(sizeof(XbeeATcmdStatusObj));
// Set-up default XbeeRxIOsampleObj values
XbeeRxIOsample = (XbeeRxIOsampleObj *)malloc(sizeof(XbeeRxIOsampleObj));
changeDetect = 0x00;
pullUp = 0x00;
RunUserInterface ();
free(XbeeTx);
free(XbeeTxStatus);
free(XbeeRx);
free(XbeeRemoteATcmdTx);
free(XbeeATcmdTxStatus);
CloseCom (ComPort);
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK panelCB (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
if (event == EVENT_CLOSE)
QuitUserInterface (0);
return 0;
}
int TxAPI(void)
{
char message[18 + strlen(XbeeTx->message)];
int index;
XbeeTx->lenMSB = (0x0E + strlen(XbeeTx->message))/256; // 0x0E added for frame size
XbeeTx->lenLSB = 0x0E + strlen(XbeeTx->message) - (XbeeTx->lenMSB*256); // masks off lower byte
XbeeTx->checkSum[0] = 0x00;
message[0] = XbeeTx->start;
message[1] = XbeeTx->lenMSB;
message[2] = XbeeTx->lenLSB;
message[3] = XbeeTx->frameType;
message[4] = XbeeTx->frameID;
for (index = 0; index <4; index ++)
{
message[index + 5] = (XbeeTx->destAddrHi >> (3-index)*8) & 0xFF;
message[index + 9] = (XbeeTx->destAddrLo >> (3-index)*8) & 0xFF;
}
message[13] = (XbeeTx->netAddr >> 8) & 0xFF;
message[14] = XbeeTx->netAddr & 0xFF;
message[15] = XbeeTx->radius;
message[16] = XbeeTx->options;
for (index = 0; index < strlen(XbeeTx->message); index ++)
message[index + 17] = XbeeTx->message[index];
for (index = 3; index < (17 + strlen(XbeeTx->message)); index ++)
XbeeTx->checkSum[0] += message[index];
message[17 + strlen(XbeeTx->message)] = 0xFF - XbeeTx->checkSum[0];
ComWrt(ComPort, message, 18 + strlen(XbeeTx->message));
while(GetOutQLen(ComPort)>0);
return 0;
}
int TxRemoteATcmdAPI(void)
{
int index;
char message[4 + XbeeRemoteATcmdTx->lenLSB];
XbeeTx->checkSum[0] = 0x00;
message[0] = XbeeRemoteATcmdTx->start;
message[1] = XbeeRemoteATcmdTx->lenMSB;
message[2] = XbeeRemoteATcmdTx->lenLSB;
message[3] = XbeeRemoteATcmdTx->frameType;
message[4] = XbeeRemoteATcmdTx->frameID;
for (index = 0; index <4; index ++)
{
message[index + 5] = (XbeeRemoteATcmdTx->destAddrHi >> (3-index)*8) & 0xFF;
message[index + 9] = (XbeeRemoteATcmdTx->destAddrLo >> (3-index)*8) & 0xFF;
}
message[13] = (XbeeRemoteATcmdTx->netAddr >> 8) & 0xFF;
message[14] = XbeeRemoteATcmdTx->netAddr & 0xFF;
message[15] = XbeeRemoteATcmdTx->options;
message[16] = (XbeeRemoteATcmdTx->cmd >> 8) & 0xFF;
message[17] = XbeeRemoteATcmdTx->cmd & 0xFF;
if(XbeeRemoteATcmdTx->lenLSB == 0x10)
message[18] = XbeeRemoteATcmdTx->param;
for (index = 3; index < (3 + XbeeRemoteATcmdTx->lenLSB); index ++)
XbeeTx->checkSum[0] += message[index];
message[3 + XbeeRemoteATcmdTx->lenLSB] = 0xFF - XbeeTx->checkSum[0];
ComWrt(ComPort, message, 4 + XbeeRemoteATcmdTx->lenLSB);
while(GetOutQLen(ComPort)>0);
return 0;
}
void CVICALLBACK RxComPort(int portNumber, int eventMask, void *callbackData)
{
char RxMsg[128];
char msgHeader[4];
int msgLen;
int index;
char addrLo[5];
int analogIndex;
int analogValue;
float scaledAnalog;
int switchVal;
InstallComCallback(ComPort, 0x00, 0x00, 0x7E, RxComPort, NULL);
if(!ComMode)
{
SetComTime(ComPort, .25);
ComRd(ComPort, XbeeRx->message, 128);
SetCtrlVal(PANEL, PANEL_STRING_2, XbeeRx->message);
goto done;
}
ComRd(ComPort, msgHeader, 4);
XbeeRx->start = msgHeader[0];
XbeeRx->lenMSB = msgHeader[1];
XbeeRx->lenLSB = msgHeader[2];
XbeeRx->frameType = msgHeader[3]&0xFF;
msgLen = XbeeRx->lenMSB * 256 + XbeeRx->lenLSB;
ComRd(ComPort, RxMsg, msgLen);
switch(XbeeRx->frameType)
{
case 0x90:
CopyString (XbeeRx->message, 0, RxMsg, 11, msgLen-12);
SetCtrlVal(PANEL, PANEL_STRING_2, XbeeRx->message);
XbeeRx->sourceAddrHi = 0;
XbeeRx->sourceAddrLo = 0;
XbeeRx->sourcenetAddr= 0;
for(index = 0; index < 4; index++)
{
XbeeRx->sourceAddrHi = (XbeeRx->sourceAddrHi << 8) + RxMsg[index];
XbeeRx->sourceAddrLo = (XbeeRx->sourceAddrLo << 8) + RxMsg[index + 4];
}
XbeeRx->sourcenetAddr = (XbeeRx->sourcenetAddr + RxMsg[8])<<8 + RxMsg[9];
SetCtrlVal(PANEL, PANEL_NUMERIC, XbeeRx->sourceAddrLo);
// SetActivePanel(panelHandle3);
// GetCtrlVal(panelHandle3, PANEL_4_BINARYSWITCH, &switchVal);
// if (switchVal==1)
// UNVmessage();
break;
case 0x8B:
XbeeTxStatus->status = RxMsg[4];
if(XbeeTxStatus->status != 0x00)
SetCtrlVal(PANEL, PANEL_LED, 1);
// printf("Message Tx OK.");
break;
case 0x92:
// printf("IO sample received.\n");
XbeeRxIOsample->digMask1 = RxMsg[12];
XbeeRxIOsample->digMask2 = RxMsg[13];
XbeeRxIOsample->analogMask = RxMsg[14];
// Set digital input 1
if (XbeeRxIOsample->digMask2 & 0x1)
{
SetCtrlAttribute(panelHandle2,PANEL_2_LED, ATTR_DIMMED, 0);
if (RxMsg[16] & 0x1)
SetCtrlVal(panelHandle2,PANEL_2_LED, 1);
else
SetCtrlVal(panelHandle2,PANEL_2_LED, 0);
}
else
{
SetCtrlVal(panelHandle2,PANEL_2_LED, 0);
SetCtrlAttribute(panelHandle2,PANEL_2_LED, ATTR_DIMMED, 1);
}
// Set digital input 2
if (XbeeRxIOsample->digMask2 & 0x2)
{
SetCtrlAttribute(panelHandle2,PANEL_2_LED_2, ATTR_DIMMED, 0);
if (RxMsg[16] & 0x2)
SetCtrlVal(panelHandle2,PANEL_2_LED_2, 1);
else
SetCtrlVal(panelHandle2,PANEL_2_LED_2, 0);
}
else
{
SetCtrlVal(panelHandle2,PANEL_2_LED_2, 0);
SetCtrlAttribute(panelHandle2,PANEL_2_LED_2, ATTR_DIMMED, 1);
}
// Set digitial input 3
if (XbeeRxIOsample->digMask2 & 0x4)
{
SetCtrlAttribute(panelHandle2,PANEL_2_LED_3, ATTR_DIMMED, 0);
if (RxMsg[16] & 0x4)
SetCtrlVal(panelHandle2,PANEL_2_LED_3, 1);
else
SetCtrlVal(panelHandle2,PANEL_2_LED_3, 0);
}
else
{
SetCtrlVal(panelHandle2,PANEL_2_LED_3, 0);
SetCtrlAttribute(panelHandle2,PANEL_2_LED_3, ATTR_DIMMED, 1);
}
// Set digital input 4
if (XbeeRxIOsample->digMask2 & 0x8)
{
SetCtrlAttribute(panelHandle2,PANEL_2_LED_4, ATTR_DIMMED, 0);
if (RxMsg[16] & 0x8)
SetCtrlVal(panelHandle2,PANEL_2_LED_4, 1);
else
SetCtrlVal(panelHandle2,PANEL_2_LED_4, 0);
}
else
{
SetCtrlVal(panelHandle2,PANEL_2_LED_4, 0);
SetCtrlAttribute(panelHandle2,PANEL_2_LED_4, ATTR_DIMMED, 1);
}
// Check to see if digital IO has been set
if ((XbeeRxIOsample->digMask1 + XbeeRxIOsample->digMask2)!=0)
analogIndex = 17;
else analogIndex = 15;
// Set analog input 1
if (XbeeRxIOsample->analogMask & 0x01)
{
analogValue = RxMsg[analogIndex] * 256 + RxMsg[analogIndex+1];
scaledAnalog = analogValue * 1.2 / 1024;
// printf("Analog value = %x\n", analogValue);
// printf("Scaled value = %f\n", scaledAnalog);
SetCtrlAttribute(panelHandle2,PANEL_2_NUMERIC, ATTR_DIMMED, 0);
SetCtrlVal(panelHandle2,PANEL_2_NUMERIC, scaledAnalog);
}
else
{ scaledAnalog = 0;
SetCtrlVal(panelHandle2,PANEL_2_NUMERIC, scaledAnalog);
SetCtrlAttribute(panelHandle2,PANEL_2_NUMERIC, ATTR_DIMMED, 1);
}
/* // Set analog input 2
if (XbeeRxIOsample->analogMask & 0x02)
{
analogIndex = analogIndex + 1;
analogValue = RxMsg[analogIndex] * 256 + RxMsg[analogIndex+1];
scaledAnalog = analogValue * 1.2 / 1024;
printf("Analog value = %x\n", analogValue);
printf("Scaled value = %f\n", scaledAnalog);
SetCtrlAttribute(panelHandle2,PANEL_2_NUMERIC_2, ATTR_DIMMED, 0);
SetCtrlVal(panelHandle2,PANEL_2_NUMERIC_2, scaledAnalog);
}
else
{ scaledAnalog = 0;
SetCtrlVal(panelHandle2,PANEL_2_NUMERIC_2, scaledAnalog);
SetCtrlAttribute(panelHandle2,PANEL_2_NUMERIC_2, ATTR_DIMMED, 1);
}
*/
XbeeRemoteATcmdTx->cmd = 0x49; // ascii I
XbeeRemoteATcmdTx->cmd = (XbeeRemoteATcmdTx->cmd << 8) + 0x52; //ascii R
XbeeRemoteATcmdTx->param = 0x00;
TxRemoteATcmdAPI();
break;
case 0x97:
XbeeATcmdTxStatus->cmd = RxMsg[11];
XbeeATcmdTxStatus->cmd = (XbeeATcmdTxStatus->cmd)<<8 + RxMsg[12];
XbeeATcmdTxStatus->cmdStatus = RxMsg[13];
// printf("Response for AT cmd = %x%x", RxMsg[11],RxMsg[12]);
// printf("Response for AT cmd = %x", XbeeATcmdTxStatus->cmd);
// printf(" is %x", XbeeATcmdTxStatus->cmdStatus);
// printf("\n");
break;
default:
printf("No handler for message = 0x");
printf("%x", XbeeRx->frameType);
printf("\n");
break;
} // end of switch
done:
InstallComCallback(ComPort, 0x01, 0x00, 0x7E, RxComPort, NULL);
}
int CVICALLBACK TxComPort (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
SetCtrlVal(PANEL, PANEL_LED, 0);
GetCtrlVal(PANEL, PANEL_STRING, XbeeTx->message);
SetCtrlVal(PANEL, PANEL_STRING, "");
if (ComMode)
TxAPI();
else
ComWrt(ComPort, XbeeTx->message, strlen(XbeeTx->message));
break;
}
return 0;
}
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
CloseCom(ComPort);
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK openPort (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (PANEL, PANEL_NUMERIC_5, &ComPort);
OpenComConfig (ComPort, "", 9600, 0, 8, 1, 512, 512);
InstallComCallback (ComPort, 1, 0, 0, RxComPort, 0);
break;
}
return 0;
}
int CVICALLBACK destSet (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int radioID;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL, PANEL_RING, &radioID);
switch (radioID)
{
case 0:
XbeeTx->destAddrLo = 0x4066C4F9;
break;
case 1:
XbeeTx->destAddrLo = 0x40683F5D;
break;
case 2:
XbeeTx->destAddrLo = 0x40686462;
break;
case 3:
XbeeTx->destAddrLo = 0x40683F59;
break;
case 4:
XbeeTx->destAddrLo = 0x406932B4;
break;
}
SetCtrlVal(PANEL, PANEL_NUMERIC_2, XbeeTx->destAddrLo);
break;
}
return 0;
}
int CVICALLBACK displayIO (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if ((panelHandle2 = LoadPanel (0, "XbeeTerminal.uir", PANEL_2)) < 0)
return -1;
DisplayPanel(panelHandle2);
break;
}
return 0;
}
int CVICALLBACK getIOsample (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
XbeeRemoteATcmdTx->lenLSB = 0x10;
XbeeRemoteATcmdTx->destAddrLo = XbeeTx->destAddrLo;
XbeeRemoteATcmdTx->cmd = 0x49; // ascii I
XbeeRemoteATcmdTx->cmd = (XbeeRemoteATcmdTx->cmd << 8) + 0x52; //ascii R
XbeeRemoteATcmdTx->param = 0xFE;
TxRemoteATcmdAPI();
break;
}
return 0;
}
int CVICALLBACK closeIOpanel (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DiscardPanel(panelHandle2);
break;
}
return 0;
}
int CVICALLBACK configIO (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if ((panelHandle3 = LoadPanel (0, "XbeeTerminal.uir", PANEL_3)) < 0)
return -1;
DisplayPanel(panelHandle3);
break;
}
return 0;
}
int CVICALLBACK closeConfigPanel (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DiscardPanel(panelHandle3);
break;
}
return 0;
}
int CVICALLBACK configChannel (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int chan;
int mode;
switch (event)
{
case EVENT_COMMIT:
XbeeRemoteATcmdTx->lenLSB = 0x10;
XbeeRemoteATcmdTx->destAddrLo = XbeeTx->destAddrLo;
GetCtrlVal(panelHandle3, PANEL_3_RING_2, &chan);
switch (chan)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
XbeeRemoteATcmdTx->cmd = 0x44; // ascii D
XbeeRemoteATcmdTx->cmd = (XbeeRemoteATcmdTx->cmd << 8) + (chan + 48); // ascii 0-7
break;
case 10: case 11: case 12:
XbeeRemoteATcmdTx->cmd = 0x50; // ascii P
XbeeRemoteATcmdTx->cmd = (XbeeRemoteATcmdTx->cmd << 8) + (chan + 38); // ascii 0-2
break;
}
GetCtrlVal(panelHandle3, PANEL_3_RING, &mode);
XbeeRemoteATcmdTx->param = mode; // ascii 0-5
TxRemoteATcmdAPI();
break;
}
return 0;
}
int CVICALLBACK setPullUp (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
XbeeRemoteATcmdTx->lenLSB = 0x10;
XbeeRemoteATcmdTx->destAddrLo = XbeeTx->destAddrLo;
XbeeRemoteATcmdTx->cmd = 0x50; // ascii P
XbeeRemoteATcmdTx->cmd = (XbeeRemoteATcmdTx->cmd << 8) + 0x52; // R
if (pullUp == 0x00)
pullUp = 0x1F;
else
pullUp = 0x00;
XbeeRemoteATcmdTx->param = pullUp;
TxRemoteATcmdAPI();
break;
}
return 0;
}
int CVICALLBACK setChangeDetect (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
XbeeRemoteATcmdTx->lenLSB = 0x10;
XbeeRemoteATcmdTx->destAddrLo = XbeeTx->destAddrLo;
XbeeRemoteATcmdTx->cmd = 0x49; // ascii I
XbeeRemoteATcmdTx->cmd = (XbeeRemoteATcmdTx->cmd << 8) + 0x43; // C
if (changeDetect == 0x00)
changeDetect = 0x1F;
else changeDetect = 0x00;
XbeeRemoteATcmdTx->param = changeDetect;
TxRemoteATcmdAPI();
break;
}
return 0;
}
int CVICALLBACK setComMode (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL, PANEL_BINARYSWITCH, &ComMode);
SetCtrlAttribute(PANEL, PANEL_COMMANDBUTTON_2, ATTR_VISIBLE, ComMode);
SetCtrlAttribute(PANEL, PANEL_COMMANDBUTTON_3, ATTR_VISIBLE, ComMode);
break;
}
return 0;
}
Bookmarks