Skip to content

Commit

Permalink
code for aprs.fi
Browse files Browse the repository at this point in the history
  • Loading branch information
on4akh committed Aug 2, 2014
1 parent 743af21 commit 20bc13f
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 12 deletions.
2 changes: 1 addition & 1 deletion BPTC1969.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ struct BPTC1969 decodeBPTC1969(bool bits[264]){
if(*(payloadBits + a) == true) blocksToFollow = blocksToFollow + (char)(8 / pow(2,a-12));
}
BPTC1969decode.appendBlocks = blocksToFollow;
syslog(LOG_NOTICE,"Appended blocks : %i\n",blocksToFollow);
//syslog(LOG_NOTICE,"Appended blocks : %i\n",blocksToFollow);

for(a=72;a<80;a++){
if(*(payloadBits + a) == true) bitPadding = bitPadding + (char)(128 / pow(2,a-12));
Expand Down
10 changes: 5 additions & 5 deletions dmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,11 +333,11 @@ void *dmrListener(void *f){
bits = convertToBits(dmrPacket); //convert it to bits

if (slotType == 0x4444){ //Data header
syslog(LOG_NOTICE,"[%i-%s]Data header on slot %i src %i dst %i type %i",baseDmrPort + repPos,repeaterList[repPos].callsign,slot,srcId,dstId,callType);
repeaterList[repPos].sending[slot] = true;
dmrState[slot] = DATA;
dataBlocks[slot] = 0;
BPTC1969decode[slot] = decodeBPTC1969(bits);
syslog(LOG_NOTICE,"[%i-%s]Data header on slot %i src %i dst %i type %i appendBlocks %i",baseDmrPort + repPos,repeaterList[repPos].callsign,slot,srcId,dstId,callType,BPTC1969decode[slot].appendBlocks);
break;
}

Expand All @@ -348,7 +348,7 @@ void *dmrListener(void *f){
dmrState[slot] = IDLE;
dataBlocks[slot] = 0;
repeaterList[repPos].sending[slot] = false;
//syslog(LOG_NOTICE,"All data blocks received");
//syslog(LOG_NOTICE,"[%i-%s]All data blocks received",baseDmrPort + repPos,repeaterList[repPos].callsign);
}
break;
}
Expand All @@ -366,10 +366,10 @@ void *dmrListener(void *f){
printf("\n");
dataBlocks[slot] = 0;
repeaterList[repPos].sending[slot] = false;
syslog(LOG_NOTICE,"All data blocks received");
syslog(LOG_NOTICE,"[%i-%s]All data blocks received",baseDmrPort + repPos,repeaterList[repPos].callsign);
printf("--------------------------------------------------------------\n");
if(memcmp(decodedString[slot] + 4,gpsString,4) == 0) decodeHyteraGps(srcId,decodedString[slot]);
if(memcmp(decodedString[slot] + 4,gpsCompressedString,4) == 0) syslog(LOG_NOTICE,"GPS DATA COMPRESSED (not decoding)");
if(memcmp(decodedString[slot] + 4,gpsString,4) == 0) decodeHyteraGps(srcId,repeaterList[repPos].id,decodedString[slot]);
if(memcmp(decodedString[slot] + 4,gpsCompressedString,4) == 0) decodeHyteraGpsCompressed(srcId,repeaterList[repPos].id,decodedString[slot]);
memset(decodedString[slot],0,300);
}
}
Expand Down
9 changes: 7 additions & 2 deletions hyteraDecode.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

#include "master_server.h"

void decodeHyteraGps(int radioId, unsigned char data[300]){
void decodeHyteraGps(int radioId,int repeaterId, unsigned char data[300]){

struct gpsCoordinates gpsData = {0};

Expand All @@ -30,5 +30,10 @@ void decodeHyteraGps(int radioId, unsigned char data[300]){
memcpy(gpsData.speed,data+57,3);
memcpy(gpsData.heading,data+60,3);

syslog(LOG_NOTICE,"Decoded GPS data: LAT(%s) LONG(%s) SPEED(%s) HEADING(%s)",gpsData.latitude,gpsData.longitude,gpsData.speed,gpsData.heading);
syslog(LOG_NOTICE,"Decoded GPS data(Hytera): LAT(%s) LONG(%s) SPEED(%s) HEADING(%s)",gpsData.latitude,gpsData.longitude,gpsData.speed,gpsData.heading);
}

void decodeHyteraGpsCompressed(int radioId,int repeaterId, unsigned char data[300]){

syslog(LOG_NOTICE,"Compressed GPS data(Hytera) not decoding");
}
6 changes: 5 additions & 1 deletion master_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,11 @@ struct repeater{
unsigned char hardware[11];
unsigned char firmware[14];
unsigned char mode[4];
char language[50];
unsigned char language[50];
unsigned char geoLocation[20];
unsigned char aprsPass[5];
unsigned char aprsBeacon[100];
unsigned char aprsPHG[7];
};

struct masterData{
Expand Down
12 changes: 10 additions & 2 deletions rdac.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ int setRdacRepeater(struct sockaddr_in address){
inet_ntop(AF_INET, &(address.sin_addr), str, INET_ADDRSTRLEN);
//See if there is already info in the database based on IP address
db = openDatabase();
sprintf(SQLQUERY,"SELECT repeaterId,callsign,txFreq,shift,hardware,firmware,mode,language FROM repeaters WHERE currentAddress = %lu",(long)address.sin_addr.s_addr);
sprintf(SQLQUERY,"SELECT repeaterId,callsign,txFreq,shift,hardware,firmware,mode,language,geoLocation,aprsPass,aprsBeacon,aprsPHG 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 @@ -108,6 +108,10 @@ int setRdacRepeater(struct sockaddr_in address){
sprintf(rdacList[i].firmware,"%s",sqlite3_column_text(stmt,5));
sprintf(rdacList[i].mode,"%s",sqlite3_column_text(stmt,6));
sprintf(rdacList[i].language,"%s",sqlite3_column_text(stmt,7));
sprintf(rdacList[i].geoLocation,"%s",sqlite3_column_text(stmt,8));
sprintf(rdacList[i].aprsPass,"%s",sqlite3_column_text(stmt,9));
sprintf(rdacList[i].aprsBeacon,"%s",sqlite3_column_text(stmt,10));
sprintf(rdacList[i].aprsPHG,"%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 @@ -307,10 +311,14 @@ bool getRepeaterInfo(int sockfd,int repPos,struct sockaddr_in cliaddrOrg,sqlite3
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(dbase,SQLQUERY,0,0,0);
sprintf(SQLQUERY,"SELECT language FROM repeaters WHERE repeaterId = %i",rdacList[repPos].id);
sprintf(SQLQUERY,"SELECT language,geoLocation,aprsPass,aprsBeacon,aprsPHG FROM repeaters WHERE repeaterId = %i",rdacList[repPos].id);
if (sqlite3_prepare_v2(dbase,SQLQUERY,-1,&stmt,0) == 0){
if (sqlite3_step(stmt) == SQLITE_ROW){
sprintf(rdacList[repPos].language,"%s",sqlite3_column_text(stmt,0));
sprintf(rdacList[repPos].geoLocation,"%s",sqlite3_column_text(stmt,1));
sprintf(rdacList[repPos].aprsPass,"%s",sqlite3_column_text(stmt,2));
sprintf(rdacList[repPos].aprsBeacon,"%s",sqlite3_column_text(stmt,3));
sprintf(rdacList[repPos].aprsPHG,"%s",sqlite3_column_text(stmt,4));
sqlite3_finalize(stmt);
syslog(LOG_NOTICE,"Setting repeater language to %s [%s]",rdacList[repPos].language,str);
}
Expand Down
47 changes: 46 additions & 1 deletion sqlite.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ int initDatabase(sqlite3 *db){
}

if (!isTableExisting(db,"repeaters")){
sprintf(SQLQUERY,"CREATE TABLE repeaters (repeaterId INTEGER default 0 ,callsign VARCHAR(10) default '',txFreq VARCHAR(10) default '',shift VARCHAR(7) default '', hardware VARCHAR(11) default '', firmware VARCHAR(12) default '', mode VARCHAR(4) default '', currentAddress INTEGER default 0, timeStamp varchar(20) default '1970-1-1 00:00:00', ipAddress VARCHAR(50) default '',language VARCHAR(50) default 'english')");
sprintf(SQLQUERY,"CREATE TABLE repeaters (repeaterId INTEGER default 0 ,callsign VARCHAR(10) default '',txFreq VARCHAR(10) default '',shift VARCHAR(7) default '', hardware VARCHAR(11) default '', firmware VARCHAR(12) default '', mode VARCHAR(4) default '', currentAddress INTEGER default 0, timeStamp varchar(20) default '1970-1-1 00:00:00', ipAddress VARCHAR(50) default '',language VARCHAR(50) default 'english', geoLocation VARCHAR(20) default '', aprsPass VARCHAR(5) default '0000', aprsBeacon VARCHAR(100) default 'DMR repeater', aprsPHG VARCHHAR(7) default '')");
if (sqlite3_exec(db,SQLQUERY,0,0,0) == 0){
neededToCreate = true;
syslog(LOG_NOTICE,"Table repeater created");
Expand Down Expand Up @@ -161,6 +161,51 @@ int initDatabase(sqlite3 *db){
return 0;
}
}

if (!isFieldExisting(db,"repeaters","geoLocation")){
sprintf(SQLQUERY,"ALTER TABLE repeaters ADD COLUMN geoLocation varchar(20) default ''");
if (sqlite3_exec(db,SQLQUERY,0,0,0) == 0){
syslog(LOG_NOTICE,"field geoLocation in repeater created");
}
else{
syslog(LOG_NOTICE,"Database error: %s",sqlite3_errmsg(db));
return 0;
}
}

if (!isFieldExisting(db,"repeaters","aprsPass")){
sprintf(SQLQUERY,"ALTER TABLE repeaters ADD COLUMN aprsPass varchar(5) default '0000'");
if (sqlite3_exec(db,SQLQUERY,0,0,0) == 0){
syslog(LOG_NOTICE,"field aprsPass in repeater created");
}
else{
syslog(LOG_NOTICE,"Database error: %s",sqlite3_errmsg(db));
return 0;
}
}

if (!isFieldExisting(db,"repeaters","aprsBeacon")){
sprintf(SQLQUERY,"ALTER TABLE repeaters ADD COLUMN aprsBeacon varchar(100) default 'DMR repeater'");
if (sqlite3_exec(db,SQLQUERY,0,0,0) == 0){
syslog(LOG_NOTICE,"field aprsBeacon in repeater created");
}
else{
syslog(LOG_NOTICE,"Database error: %s",sqlite3_errmsg(db));
return 0;
}
}

if (!isFieldExisting(db,"repeaters","aprsPHG")){
sprintf(SQLQUERY,"ALTER TABLE repeaters ADD COLUMN aprsPHG varchar(7) default ''");
if (sqlite3_exec(db,SQLQUERY,0,0,0) == 0){
syslog(LOG_NOTICE,"field aprsPHG in repeater created");
}
else{
syslog(LOG_NOTICE,"Database error: %s",sqlite3_errmsg(db));
return 0;
}
}


if (neededToCreate) return 2; else return 1;
}

0 comments on commit 20bc13f

Please sign in to comment.