#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <windows.h>
#ifdef __BORLANDC__
#pragma argsused
#endif
void Usage(int argc, char* argv[])
{
printf("\nSWC Test Program\n");
printf("\n");
printf("\nUsage: swc [flags]\n");
printf(" -aX Use channel number X as source\n");
printf(" -bY Use channel number Y as destination\n");
printf(" (note: X must be different from Y. Default X=0, Y=1)\n");
exit(1);
}
int doWakeup;
int first, second;
{
char buf[50];
buf[0] = '\0';
printf("%s: failed, stat=%d (%s)\n", id, (int)stat, buf);
}
}
int InitCtrl(int ctrl, BYTE btr0, BYTE btr1, int mode)
{
int stat;
int hnd;
if (hnd < 0) {
exit(1);
}
if (stat < 0) {
printf("canSetBusParamsC200 failed, stat=%d\n", stat);
}
if (stat < 0) {
printf("canBusOn failed, stat=%d\n", stat);
}
if (stat < 0) {
printf("canSetDriverMode failed, stat=%d\n", stat);
}
return hnd;
}
void PumpMessages(int srcHandle, int dstHandle, int nrMsgs)
{
int i, j, k, m;
long id;
BYTE msg[8];
const long srcID = 300L;
for (i=0; i<nrMsgs; i++) {
Check("canWrite", stat);
}
Check("canWriteSync", stat);
i=j=k=m=0;
while (
canRead(dstHandle, &
id, msg, NULL, NULL, NULL) ==
canOK) {
if (msg[0] != i) j++;
if (msg[0] == i-1) k++;
if (id != srcID) m++;
i++;
}
if ((i != nrMsgs) || j || k || m) {
printf("Read %d messages, expected %d; %d corrupt, %d dropped, %d unexpected id.\n",
i, nrMsgs, j, k, m);
}
}
void FillCircuit(int srcHandle, int nrMsgs, int startId)
{
int i;
long srcID = startId;
for (i=0; i<nrMsgs; i++) {
Check("canWrite", stat);
}
}
void PerformTest(BYTE btr0, BYTE btr1, int mode)
{
int handle1;
int handle2;
handle1 = InitCtrl(first, btr0, btr1, mode);
handle2 = InitCtrl(second, btr0, btr1, mode);
printf("Sending 100 messages from A to B.\n");
PumpMessages(handle1, handle2, 100);
printf("Sending 100 messages in the opposite direction.\n");
PumpMessages(handle2, handle1, 100);
printf("Sending 150 messages from A to B.\n");
PumpMessages(handle1, handle2, 150);
printf("Sending 150 messages in the opposite direction.\n");
PumpMessages(handle2, handle1, 150);
}
void main(int argc, char* argv[])
{
int i;
printf("\nWelcome to the SWC Piggyback Test!\n");
first = 0;
second = 1;
for (i=1; i<argc; i++) {
int tmp, c;
if (sscanf(argv[i], "-a%d%c", &tmp, &c) == 1) {
first = tmp;
} else if (sscanf(argv[i], "-b%d%c", &tmp, &c) == 1) {
second = tmp;
} else {
Usage(argc, argv);
}
}
doWakeup = 0;
printf("15.686 kbps...\n");
printf("20 kbps...\n");
printf("33.333 kbps...\n");
printf("50 kbps...\n");
printf("Going to fast mode. Insert load resistor (180 Ohm CAN_H to GND):");
(void)getchar();
printf("15.686 kbps...\n");
printf("20 kbps...\n");
printf("33.333 kbps...\n");
printf("50 kbps...\n");
printf("80 kbps...\n");
printf("100 kbps...\n");
printf("And now a couple of WAKEUPs:");
(void)getchar();
doWakeup = 1;
printf("15.686 kbps...\n");
printf("20 kbps...\n");
printf("33.333 kbps...\n");
printf("50 kbps...\n");
}