Skip to content

Commit

Permalink
Added language parameter to repeaters and playing reference file in e…
Browse files Browse the repository at this point in the history
…cho test if present
  • Loading branch information
on4akh committed Mar 13, 2014
1 parent 49238f6 commit e78aa22
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 18 deletions.
32 changes: 18 additions & 14 deletions dmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ struct allow checkTalkGroup(int dstId, int slot, int callType){
return toSend;
}

void echoTest(unsigned char buffer[VFRAMESIZE],int sockfd, struct sockaddr_in address, int srcId){
void echoTest(unsigned char buffer[VFRAMESIZE],int sockfd, struct sockaddr_in address, int srcId, int repPos){
struct frame{
unsigned char buf[VFRAMESIZE];
};
Expand All @@ -123,15 +123,17 @@ void echoTest(unsigned char buffer[VFRAMESIZE],int sockfd, struct sockaddr_in ad
socklen_t len;
bool timedOut = false;
FILE *referenceFile;
char fileName[30];
//sprintf(fileName,"%i.record",srcId);
FILE *recordFile;
char fileName[100];

sprintf(fileName,"%i.record",srcId);

//recordFile = fopen(fileName,"wb");
recordFile = fopen(fileName,"wb");

FD_ZERO(&fdMaster);

memcpy(record[frames].buf,buffer,VFRAMESIZE);
//fwrite(buffer,VFRAMESIZE,1,recordFile);
fwrite(buffer,VFRAMESIZE,1,recordFile);
len = sizeof(cliaddr);
do{
FD_SET(sockfd, &fdMaster);
Expand All @@ -149,35 +151,37 @@ void echoTest(unsigned char buffer[VFRAMESIZE],int sockfd, struct sockaddr_in ad
if (frames < 2000){
frames++;
memcpy(record[frames].buf,buffer,VFRAMESIZE);
//fwrite(buffer,VFRAMESIZE,1,recordFile);
fwrite(buffer,VFRAMESIZE,1,recordFile);
}
}
}
else{
timedOut = true;
}
}while (sync != VCALLEND || timedOut == false);
//fclose(recordFile);
fclose(recordFile);
sleep(1);
syslog(LOG_NOTICE,"Playing echo back");
syslog(LOG_NOTICE,"Playing echo back for radio %i",srcId);

for (i=0;i<=frames;i++){
sendto(sockfd,record[i].buf,VFRAMESIZE,0,(struct sockaddr *)&address,sizeof(address));
sync = record[i].buf[SYNC_OFFSET1] << 8 | record[i].buf[SYNC_OFFSET2];
if (sync != ISSYNC) usleep(60000);
}
sprintf(fileName,"reference.voice",srcId);
sprintf(fileName,"reference_%s.voice",repeaterList[repPos].language);
if (referenceFile = fopen(fileName,"rb")){
syslog(LOG_NOTICE,"Playing reference file");
sleep(1);
syslog(LOG_NOTICE,"Playing reference file %s",fileName);
while (fread(buffer,VFRAMESIZE,1,referenceFile)){
buffer[SRC_OFFSET1] = srcId;
buffer[SRC_OFFSET2] = srcId >> 8;
buffer[SRC_OFFSET3] = srcId >> 16;
sendto(sockfd,buffer,VFRAMESIZE,0,(struct sockaddr *)&address,sizeof(address));
sync = buffer[SYNC_OFFSET1] << 8 | buffer[SYNC_OFFSET2];
if (sync != ISSYNC) usleep(60000);
}
fclose(referenceFile);
}
else{
syslog(LOG_NOTICE,"reference file %s not found",fileName);
}
}

void *dmrListener(void *f){
Expand Down Expand Up @@ -260,7 +264,7 @@ void *dmrListener(void *f){
}
if (dstId == echoId){
syslog(LOG_NOTICE,"[%i-%s]Echo test started on slot %i src %i",baseDmrPort + repPos,repeaterList[repPos].callsign,slot,srcId);
echoTest(buffer,sockfd,repeaterList[repPos].address,srcId);
echoTest(buffer,sockfd,repeaterList[repPos].address,srcId,repPos);
repeaterList[repPos].sending[slot] = false;
break;
}
Expand Down
1 change: 1 addition & 0 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ int initRepeater(struct repeater repeaterInfo){
sprintf(repeaterList[i].hardware,"%s",repeaterInfo.hardware);
sprintf(repeaterList[i].firmware,"%s",repeaterInfo.firmware);
sprintf(repeaterList[i].mode,"%s",repeaterInfo.mode);
sprintf(repeaterList[i].language,"%s",repeaterInfo.language);
syslog(LOG_NOTICE,"Repeater added to list position %i",i);
//Highest filled position in the list
if (i +1 > highestRepeater) highestRepeater = i + 1;
Expand Down
1 change: 1 addition & 0 deletions master_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ struct repeater{
unsigned char hardware[11];
unsigned char firmware[14];
unsigned char mode[4];
char language[50];
};

struct masterData{
Expand Down
15 changes: 11 additions & 4 deletions rdac.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ int setRdacRepeater(struct sockaddr_in address){
rdacList[i].address = address;
inet_ntop(AF_INET, &(address.sin_addr), str, INET_ADDRSTRLEN);
//See if there is already info in the database based on IP address
sprintf(SQLQUERY,"SELECT repeaterId,callsign,txFreq,shift,hardware,firmware,mode FROM repeaters WHERE currentAddress = %lu",(long)address.sin_addr.s_addr);
sprintf(SQLQUERY,"SELECT repeaterId,callsign,txFreq,shift,hardware,firmware,mode,language FROM repeaters WHERE currentAddress = %lu",(long)address.sin_addr.s_addr);
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
rdacList [i].id = sqlite3_column_int(stmt,0);
Expand All @@ -103,8 +103,9 @@ int setRdacRepeater(struct sockaddr_in address){
sprintf(rdacList[i].hardware,"%s",sqlite3_column_text(stmt,4));
sprintf(rdacList[i].firmware,"%s",sqlite3_column_text(stmt,5));
sprintf(rdacList[i].mode,"%s",sqlite3_column_text(stmt,6));
syslog(LOG_NOTICE,"Assigning %s %s %s %s %s %s to repeater on pos %i from database [%s]",rdacList[i].callsign,rdacList[i].hardware
,rdacList[i].firmware,rdacList[i].mode,rdacList[i].txFreq,rdacList[i].shift,i,str);
sprintf(rdacList[i].language,"%s",sqlite3_column_text(stmt,7));
syslog(LOG_NOTICE,"Assigning %s %s %s %s %s %s %s to repeater on pos %i from database [%s]",rdacList[i].callsign,rdacList[i].hardware
,rdacList[i].firmware,rdacList[i].mode,rdacList[i].txFreq,rdacList[i].shift,rdacList[i].language,i,str);
}
}
sqlite3_finalize(stmt);
Expand Down Expand Up @@ -294,7 +295,13 @@ bool getRepeaterInfo(int sockfd,int repPos,struct sockaddr_in cliaddrOrg){
rdacList[repPos].callsign,rdacList[repPos].txFreq,rdacList[repPos].shift,rdacList[repPos].hardware,rdacList[repPos].
firmware,rdacList[repPos].mode,(long)cliaddrOrg.sin_addr.s_addr,timeStamp,str,rdacList[repPos].id);
sqlite3_exec(db,SQLQUERY,0,0,0);

sprintf(SQLQUERY,"SELECT language FROM repeaters WHERE repeaterId = %i",rdacList[repPos].id);
if (sqlite3_prepare_v2(db,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
sprintf(rdacList[repPos].language,"%s",sqlite3_column_text(stmt,0));
syslog(LOG_NOTICE,"Setting repeater language to %s [%s]",rdacList[repPos].language,str);
}
}
}
else{
syslog(LOG_NOTICE,"RDAC, no row, removing repeater from list [%s]",str);
Expand Down

0 comments on commit e78aa22

Please sign in to comment.