#include #include #include #include "node.h" #include "dstar.h" #define FALSE 0 #define TRUE 1 int CallSignPlay(usb_dev_handle *udev, unsigned char CallSign[], int resync); int ReplyMsgPlay(usb_dev_handle *udev, int resync); int NullVoicePlay(usb_dev_handle *udev, int resync); void main(void) { struct usb_bus *bus; struct usb_device *dev; usb_dev_handle *udev; struct dv_header *dv; int dev_found, ret; char buffer[8]; char radio_header[41]; char flags[3]; FILE *voice; int resync; int i,k; int HeaderLength; usb_init(); usb_find_busses(); usb_find_devices(); resync = 0; udev = NULL; dev_found = FALSE; for (bus = usb_get_busses(); bus && !dev_found; bus = bus->next) { for (dev = bus->devices; dev && !dev_found; dev = dev->next) { if ((dev->descriptor.idVendor == 0x04D8) && (dev->descriptor.idProduct == 0x0004)) { dev_found = TRUE; udev = usb_open(dev); } } } if (!dev_found) { printf("No matching device found...\n"); } usb_set_configuration (udev, 1); /* PIC VERSION READ */ ret = 8; while (ret == 8) { ret = usb_control_msg(udev, 0xC0, GET_VERSION, 0, 0, buffer, 8, 100); for (i = 0 ; i < ret ; i++) { printf ("%c",buffer[i]); } } printf ("\n"); while (1) { k = 0; HeaderLength = 0; while (HeaderLength < 41) { ret = usb_control_msg(udev, 0xC0, GET_HEADER, 0, 0, buffer, 8, 100); if (ret > 0) { HeaderLength += ret; for (i = 0 ; i < ret; i++) { radio_header[k] = buffer[i]; k++; } } } dv = (struct dv_header *) radio_header; printf ("\n"); printf ("Flags : %2.2x %2.2x %2.2x\n",dv->flags[0],dv->flags[1],dv->flags[2]); printf ("RPT2 : %.8s\n",dv->RPT2Call); printf ("RPT1 : %.8s\n",dv->RPT1Call); printf ("YuCall : %.8s\n",dv->YourCall); printf ("MyCall : %.8s\n",dv->MyCall); printf ("MyCall2: %.4s\n",dv->MyCall2); printf ("CRC : %2.2x %2.2x\n",dv->CRC[0],dv->CRC[1]); voice = fopen ("D-STAR.voice","wb"); while (ret <= 8) { ret = usb_control_msg(udev, 0xC0, GET_DATA, 0, 0, buffer, 8, 100); if (ret != 0) { for (i = 0 ; i < ret; i++) { fputc (buffer[i], voice); } } if (ret == 0) { ret = usb_control_msg(udev, 0xC0, GET_AD_STATUS, 0, 0, buffer, 1, 100); if (!(buffer[0] & COS_OnOff)) break; } } fclose (voice); voice = fopen ("D-STAR.voice","rb"); /* Call Sign set */ usb_control_msg(udev, 0x40, SET_MyCALL, 0, 0, "7M3TJZ E", 8, 100); /* change your callsign */ usb_control_msg(udev, 0x40, SET_MyCALL2, 0, 0, "NODE", 4, 100); usb_control_msg(udev, 0x40, SET_YourCALL, 0, 0, dv->MyCall, 8, 100); usb_control_msg(udev, 0x40, SET_RPT2CALL, 0, 0, dv->RPT1Call, 8, 100); usb_control_msg(udev, 0x40, SET_RPT1CALL, 0, 0, dv->RPT2Call, 8, 100); flags[0] = 0x40; /* set for repeater */ flags[1] = 0x00; flags[2] = 0x00; usb_control_msg(udev, 0x40, SET_FLAGS, 0, 0, flags, 3, 100); /* delay time TxDelay nn x 10mSec. */ // usb_control_msg(udev, 0x40, SET_DelayTime, 30, 0,buffer, 0, 100); /* Check COS */ usb_control_msg(udev, 0xC0, GET_AD_STATUS, 0, 0, buffer, 1, 100); while (buffer[0] & COS_OnOff) /* until COS OFF */ { usb_control_msg(udev, 0xC0, GET_AD_STATUS, 0, 0, buffer, 1, 100); } /* PTT ON */ usb_control_msg(udev, 0x40, SET_PTT, ON, 0, buffer, 0, 100); /* Message send your call */ resync = CallSignPlay (udev, dv->MyCall, resync); /* Reply Message send */ resync = ReplyMsgPlay (udev, resync); /* Reply Message send */ /* padding for Null Voice data */ resync = NullVoicePlay (udev, resync); /* Send Voice & Data STREAM */ k = 0; while ((i = fgetc (voice)) != EOF) { buffer[k] = i; k++; if (k == 8) { k = 0; ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buffer, 8, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buffer, 8, 100); } } } if (k > 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buffer, k, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buffer, k, 100); } } /* PTT OFF */ ret = usb_control_msg(udev, 0x40, SET_PTT, OFF, 0, buffer, 0, 100); fclose (voice); } /* end while (1) */ /* usb_close(udev); */ } int CallSignPlay (usb_dev_handle *udev, unsigned char CallSign[], int resync) { FILE *wave; char file_name[] = {"audio\\ .bin"}; char buff[12]; int i,k,l,ret; for (i = 0 ; i < 6 ; i++) { if (CallSign[i] != 0x20) { file_name[6] = CallSign[i]; wave = fopen (file_name,"rb"); l = 0; while ((k = fgetc (wave)) != EOF) { buff[l] = k; l++; if (l == 12) { l = 0; if (resync == 0) { buff[ 9] = 0xaa; buff[10] = 0xb4; buff[11] = 0x68; } else { buff[ 9] = 0x0e; buff[10] = 0xf2; buff[11] = 0xc9; } resync++; if (resync == 21) resync = 0; ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buff, 8, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buff, 8, 100); } ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, &buff[8], 4, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, &buff[8], 4, 100); } } } fclose (wave); } } return resync; } int ReplyMsgPlay (usb_dev_handle *udev, int resync) { FILE *reply; char file_name[] = {"audio\\replymsg.bin"}; char buff[12]; int k,l,ret; reply = fopen (file_name,"rb"); l = 0; while ((k = fgetc (reply)) != EOF) { buff[l] = k; l++; if (l == 12) { l = 0; if (resync == 0) { buff[ 9] = 0xaa; buff[10] = 0xb4; buff[11] = 0x68; } else { buff[ 9] = 0x0e; buff[10] = 0xf2; buff[11] = 0xc9; } resync++; if (resync == 21) resync = 0; ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buff, 8, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, buff, 8, 100); } ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, &buff[8], 4, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, &buff[8], 4, 100); } } } fclose (reply); return resync; } int NullVoicePlay (usb_dev_handle *udev, int resync) { int ret; char NullVoice[12] = {0x79,0xb1,0x4c,0x11,0x64,0x58,0xfc,0x88,0x17,0x0e,0xf2,0xc9}; while (resync != 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, NullVoice, 8, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, NullVoice, 8, 100); } ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, &NullVoice[8], 4, 100); while (ret < 0) { ret = usb_control_msg(udev, 0x40, PUT_DATA, 0, 0, &NullVoice[8], 4, 100); } resync++; if (resync == 21) resync = 0; } return resync; }