//---------------------------------------------------------------------------
  string TranseMeasure::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( TRANSE_MEASURE, 4 );
    stream << hexToString( item, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();
    // set start and end trailer for command
    command = createTrailer( message );

    return command;
  }
  //---------------------------------------------------------------------------
  string GetProfile::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( GET_PROFILE, 4 );
    stream << hexToString( profile_number_, 4 );
    stream << hexToString( profile_format_, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();
    // set start and end trailer for command
    command = createTrailer( message );

    return command;
  }
  //---------------------------------------------------------------------------
  string DoReset::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( DO_RESET, 4 );
    stream << hexToString( reset_level_, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();
    // set start and end trailer for command
    command = createTrailer( message );

    return command;
  }
  //---------------------------------------------------------------------------
  string GetIndification::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( GET_IDENTIFICATION, 4 );
    stream << hexToString( ident_item_, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();

    command = createTrailer( message );

    return command;
  }
  //---------------------------------------------------------------------------
  string SetTimeRelative::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( SET_TIME_REL, 4 );
    stream << hexToString( time_diff_, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();
    // set start and end trailer for command
    command = createTrailer( message );

    return command;
  }
  //---------------------------------------------------------------------------
  string SetConfig::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( SET_CONFIG, 4 );
    stream << hexToString( config_item_, 4 );
    stream << hexToString( baudrate_, 4 );
    stream << hexToString( parity_, 4 );
    stream << hexToString( stop_bit_, 4 );
    stream << hexToString( character_, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();
    // set start and end trailer for command
    command = createTrailer( message );

    return command;
  }
//отключает выбраную radioButton что б не вызвать себя повторно. Устанавливает новую маску для
//набратого сообщения. Так же меняет текст на другой формат.
void MainWindow::setTextMode()
{
    QString tmp =  (ui->send_text_lineEdit->text()).trimmed();

    ui->send_text_lineEdit->setInputMask("nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
                                         "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn");
    setWindowTitle("Serial Text Console");
    ui->send_text_lineEdit->clear();    
    ui->send_text_lineEdit->setCursorPosition(0);
    //отключает выбраную radioButton что б не вызвать себя повторно.
    ui->text_radioButton->setDisabled(true);
    ui->hex_radioButton->setDisabled(false);

    if (!hexToString(tmp)) return;
    ui->send_text_lineEdit->setText(tmp);
    ui->send_text_lineEdit->setCursorPosition(0);

    QStringList messanges = ui->log_textBrowser->toPlainText().split('\n');
    tmp.clear();
    ui->log_textBrowser->clear();
    //построчно парсим лог. Найденые сообщения меняем на другой формат
    //так как получили чистый тескст добавляем теги цветов
    //и выводим обратно
    for (int i=0;i<messanges.length();i++)
    {
        if (messanges[i].contains("Send: ")) {
            //находим место где начинается наше сообщение
            int index = messanges[i].indexOf(": ")+2;
            //получаем его и переводим в другой формат
            tmp = messanges[i].mid(index);
            //ecли возникла ошибка при преобразовании - выходим
            if (!hexToString(tmp)) return;
            //обрезаем лишнее. Добавляем преобразованое сообщение, а так же теги
            messanges[i].truncate(index);
            messanges[i] = messanges[i].append(tmp).prepend("<font  color=\"blue\">").append("<//font>");
        }
        if (messanges[i].contains("Answer: ")) {
            int index = messanges[i].indexOf(": ")+2;
            tmp = messanges[i].mid(index);
            if (!hexToString(tmp)) return;
            messanges[i].truncate(index);
            messanges[i] = messanges[i].append(tmp).prepend("<font  color=\"orange\">").append("<//font>");
        }
        if (messanges[i].contains(" Error: ")) {
            messanges[i].prepend("<font  color=\"red\">").append("<//font>");
        }
        ui->log_textBrowser->append(messanges[i]);
    };
}
void MainWindow::runScript()
{
    //проверяем есть ли файл настроек
    QFile file(ui->filePath_lineEdit->text());
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        printErrorMessage("Can't open file");
        printErrorMessage("Script aborted");
        return;
    }
    QTextStream script(&file);
    QString tmp;
    //проходим по каждой строчке скрипта
    while (!script.atEnd()) {
        script>>tmp;
        if (tmp.contains("SendSTR")) {
            tmp.clear();
            //считываем все до конца строки
            tmp = script.readLine();
            //обрезаем все до "
            tmp.remove(0,tmp.indexOf('\"',0)+1);
            //обрезаем все после "
            tmp.truncate(tmp.lastIndexOf('\"'));
            printMessageFromScrip(tmp);
            port.sendData(tmp + '\r');
            continue;
        }
        if (tmp.contains("SendHEX")) {
            tmp.clear();
            tmp = script.readLine();
            tmp.remove(0,tmp.indexOf('\"',0)+1);
            tmp.truncate(tmp.lastIndexOf('\"'));
            QString tmp_message_at_hex = tmp;
            if (!hexToString(tmp)) {
                printErrorMessage("Inappropriate script. Error at \""
                                  + tmp_message_at_hex + "\" . Script aborted");
                file.close();
                return;
            }
            printMessageFromScrip(tmp);
            port.sendData(tmp);
            continue;
        }
        if (tmp.contains("DELAY")) {
            bool ok = false;
            tmp.clear();
            tmp = script.readLine().trimmed();
            quint32 ms = tmp.toUInt(&ok,10);
            if (!ok ) {
                printErrorMessage("Inappropriate value for delay. Error at \""
                                  + tmp + "\" . Script aborted");
                return;
            }
            QThread::msleep(ms);
            continue;
        }
        printErrorMessage("Inappropriate script. Error at \"" + tmp + "\" . Script aborted");
        return;
    }
    file.close();
}
  //---------------------------------------------------------------------------
  string SetFunction::execute( string message, uint16 item ) throw( TelegramException )
  {
    message = "";

    string command = "";
    stringstream stream;
    uint16 crc = item;

    // parse command
    stream << header();
    stream << hexToString( message_len_, 4 );
    stream << BaseTelegram::SEND_PACKAGE_ID;
    stream << hexToString( SET_FUNCTION, 4 );
    stream << hexToString( sector_number_, 4 );
    stream << hexToString( sector_function_, 4 );
    stream << hexToString( sector_stop_, 4 );
    stream << hexToString( flashflag_, 4 );

    message = stream.str();
    // calculate crc
    crc = 0;
    crc = createCrc( message );
    stream << hexToString( crc, 4 );

    message = "";
    message = stream.str();
    // set start and end trailer for command
    command = createTrailer( message );

    return command;
  }
void MainWindow::sendMessage()
{
    QString message = ui->send_text_lineEdit->displayText();
    printSentMessage(message.trimmed());
    if (ui->hex_radioButton->isChecked())
        if (!hexToString(message)){
             printErrorMessage("Messange can't be send");
             return;
        };
    port.sendData(message.trimmed() + "\r");

}
int record(char ** buffer) {
   pthread_t t;
   ThreadValues threadValues;
   int ret;
   long startTime;

   /* We open the pi serial port */
   threadValues.p = SerialLib_open("/dev/ttyAMA0"); /* The serial port of the raspberry pi */

   if(threadValues.p<0) {  
      return -1; 
   }

   threadValues.frame = newFrame(0x01,0,NULL); 
   threadValues.status=1;

   /* Creation of the thread for the communication */
   ret = pthread_create(&t, NULL,fn_process, &threadValues); 
   startTime = time(NULL);
   if(!ret) {
      while(1) {

         if(0 == threadValues.status) {
            /* We extract the most relevent part of the string */
            int lenght = threadValues.frame->lenght * 8;
            unsigned char * extraction = extract((unsigned char *)threadValues.frame->content, (int * )&lenght);

            if(NULL == extraction || 1 == lenght) {
               freeFrame(threadValues.frame);
               close(threadValues.p);
               return -1;
            }

            *buffer = hexToString(extraction,lenght);
            free(extraction);
            printf("'%s'\n",*buffer);
            fflush(stdout);
            //freeFrame(threadValues.frame);
            close(threadValues.p);
            return 0;
         }
      }
      pthread_cancel(t);
      freeFrame(threadValues.frame);
      close(threadValues.p);
      return -1;
   } 
   freeFrame(threadValues.frame);
   close(threadValues.p);
   return -1;
}
int main(int argc, char ** argv) {
   pthread_t t;
   ThreadValues threadValues;
   int ret;
   char * string;
   long startTime;

   /* We open the pi serial port */
   threadValues.p = SerialLib_open("/dev/ttyAMA0"); /* The serial port of the raspberry pi */

   if(threadValues.p<0) {  
      return -1; 
   }

   threadValues.frame = newFrame(0x01,0,NULL); 
   threadValues.status=1;

   /* Creation of the thread for the communication */
   ret = pthread_create(&t, NULL,fn_process, &threadValues); 
   startTime = time(NULL);
   if(!ret) {
      while((time(NULL) - startTime) < 3) {

         if(0 == threadValues.status) {
            /* We extract the most relevent part of the string */
            int lenght = threadValues.frame->lenght ;
            string = hexToString(threadValues.frame->content,lenght);
            printf("%s",string);
            free(string);
            freeFrame(threadValues.frame);
            close(threadValues.p);
            return 0;
         }
      }
      pthread_cancel(t);
      freeFrame(threadValues.frame);
      close(threadValues.p);
      return -1;
   } 
   freeFrame(threadValues.frame);
   close(threadValues.p);
   return -1;
}
int hello_server (FILE* log_server, char * ciphersuites_to_use, char * random_from_client, char * random_from_server){

	/* for the moment we suppose the client can use all 4 types of protocol */

	unsigned char * hexRandomClient;
	unsigned char * hexRandomServer = calloc(2*RANDOM_DIM_HELLO+1, sizeof(unsigned char));
	FILE* channel = fopen(link_channel,"r");
	char * received_message = calloc(BUF_SIZE+1,sizeof(char));
	// Read data from channel
	read_channel (channel, received_message);
	fclose(channel);
	// Handle errors
	if(!strcmp(received_message,TLS_ERROR_OCCURRED)){
		closeConversation(log_server);
	}
	// Save it in log_server
	send_message (log_server, 2, receiving, received_message);
	fprintf(log_server, "\n\n");
	// Get the random from the client which is in position 4
	hexRandomClient = (unsigned char *) get_nth_block(received_message, 4);
	// Convert from hex	
	hexToString((char *) hexRandomClient, random_from_client);
	// Chose the best ciphersuite avilable
	get_block(received_message, 5, ciphersuites_to_use);
	// Generate Random part
	gen_rdm_bytestream(RANDOM_DIM_HELLO, random_from_server, hexRandomServer);
	// Send Hello Server to the Client
	channel = fopen(link_channel,"w");
	send_message (channel, 5, TLS_VERSION, TLS_HANDSHAKE, TLS_SERVERHELLO, hexRandomServer, ciphersuites_to_use);
	// Save it in log_server
	send_message (log_server, 6, sending, TLS_VERSION, TLS_HANDSHAKE, TLS_SERVERHELLO, hexRandomServer, ciphersuites_to_use);
	fprintf(log_server, "\n\n");
	fclose(channel);
	//free(hexRandomClient);
	free(hexRandomServer);
	free(received_message);
	return 1;
}
Exemple #14
0
extern bool ini_conf_save(p_conf conf)
{
	dictionary *dict;
	FILE *fp;
	char buf[PATH_MAX];
	int i;

	if (conf == NULL) {
		return false;
	}

	conf->confver = XREADER_VERSION_NUM;
	dict = dictionary_new(0);

	if (dict == NULL)
		return false;

	fp = fopen(conf_filename, "w");

	if (fp == NULL) {
		return false;
	}

	if (iniparser_setstring(dict, "Global", NULL) != 0)
		goto error;
	if (iniparser_setstring(dict, "UI", NULL) != 0)
		goto error;
	if (iniparser_setstring(dict, "Text", NULL) != 0)
		goto error;
	if (iniparser_setstring(dict, "Image", NULL) != 0)
		goto error;
	if (iniparser_setstring(dict, "Music", NULL) != 0)
		goto error;

	iniparser_setstring(dict, "Global:path", conf->path);
	iniparser_setstring(dict, "UI:forecolor",
						hexToString(buf, sizeof(buf), conf->forecolor));
	iniparser_setstring(dict, "Image:giftranscolor",
						hexToString(buf, sizeof(buf), conf->giftranscolor));
	iniparser_setstring(dict, "UI:bgcolor",
						hexToString(buf, sizeof(buf), conf->bgcolor));
	iniparser_setstring(dict, "UI:have_bg",
						booleanToString(buf, sizeof(buf), conf->have_bg));
	iniparser_setstring(dict, "UI:titlecolor",
						hexToString(buf, sizeof(buf), conf->titlecolor));
	iniparser_setstring(dict, "UI:menutextcolor",
						hexToString(buf, sizeof(buf), conf->menutextcolor));
	iniparser_setstring(dict, "UI:menubcolor",
						hexToString(buf, sizeof(buf), conf->menubcolor));
	iniparser_setstring(dict, "UI:selicolor",
						hexToString(buf, sizeof(buf), conf->selicolor));
	iniparser_setstring(dict, "UI:selbcolor",
						hexToString(buf, sizeof(buf), conf->selbcolor));
	iniparser_setstring(dict, "UI:msgbcolor",
						hexToString(buf, sizeof(buf), conf->msgbcolor));
	iniparser_setstring(dict, "UI:usedyncolor",
						booleanToString(buf, sizeof(buf), conf->usedyncolor));
	iniparser_setstring(dict, "Text:rowspace",
						dwordToString(buf, sizeof(buf), conf->rowspace));
	iniparser_setstring(dict, "Text:infobar",
						infobarToString(buf, sizeof(buf), conf->infobar));
	iniparser_setstring(dict, "Text:infobar_style",
						intToString(buf, sizeof(buf), conf->infobar_style));
	iniparser_setstring(dict, "Text:rlastrow",
						booleanToString(buf, sizeof(buf), conf->rlastrow));
	iniparser_setstring(dict, "Text:autobm",
						booleanToString(buf, sizeof(buf), conf->autobm));
	iniparser_setstring(dict, "Text:vertread",
						vertreadToString(buf, sizeof(buf), conf->vertread));
	iniparser_setstring(dict, "Text:encode",
						encodeToString(buf, sizeof(buf), conf->encode));
	iniparser_setstring(dict, "Image:fit",
						fitToString(buf, sizeof(buf), conf->fit));
	iniparser_setstring(dict, "Image:imginfobar",
						booleanToString(buf, sizeof(buf), conf->imginfobar));
	iniparser_setstring(dict, "Text:scrollbar",
						booleanToString(buf, sizeof(buf), conf->scrollbar));
	iniparser_setstring(dict, "Image:scale",
						dwordToString(buf, sizeof(buf), conf->scale));
	iniparser_setstring(dict, "Image:rotate",
						rotateToString(buf, sizeof(buf), conf->rotate));

	for (i = 0; i < 20; ++i) {
		char key[20];

		SPRINTF_S(key, "Text:txtkey1_%02d", i);
		iniparser_setstring(dict, key,
							hexToString(buf, sizeof(buf), conf->txtkey[i]));
		SPRINTF_S(key, "Image:imgkey1_%02d", i);
		iniparser_setstring(dict, key,
							hexToString(buf, sizeof(buf), conf->imgkey[i]));
	}
	iniparser_setstring(dict, "Global:shortpath", conf->shortpath);
	iniparser_setstring(dict, "Global:confver",
						hexToString(buf, sizeof(buf), conf->confver));
	iniparser_setstring(dict, "Image:bicubic",
						booleanToString(buf, sizeof(buf), conf->bicubic));
	iniparser_setstring(dict, "Text:wordspace",
						dwordToString(buf, sizeof(buf), conf->wordspace));
	iniparser_setstring(dict, "Text:borderspace",
						dwordToString(buf, sizeof(buf), conf->borderspace));
	iniparser_setstring(dict, "Global:lastfile", conf->lastfile);
	iniparser_setstring(dict, "Music:mp3encode",
						encodeToString(buf, sizeof(buf), conf->mp3encode));
	iniparser_setstring(dict, "Music:lyricencode",
						encodeToString(buf, sizeof(buf), conf->lyricencode));
	iniparser_setstring(dict, "Music:mp3cycle",
						cycleToString(buf, sizeof(buf), conf->mp3cycle));
	iniparser_setstring(dict, "Global:isreading",
						booleanToString(buf, sizeof(buf), conf->isreading));
	iniparser_setstring(dict, "UI:bgarch", conf->bgarch);
	iniparser_setstring(dict, "UI:bgfile", conf->bgfile);
	iniparser_setstring(dict, "UI:bgwhere",
						intToString(buf, sizeof(buf), conf->bgwhere));
	iniparser_setstring(dict, "Image:slideinterval",
						dwordToString(buf, sizeof(buf), conf->slideinterval));
	iniparser_setstring(dict, "Music:hprmctrl",
						booleanToString(buf, sizeof(buf), conf->hprmctrl));
	iniparser_setstring(dict, "UI:grayscale",
						intToString(buf, sizeof(buf), conf->grayscale));
	iniparser_setstring(dict, "Global:showhidden",
						booleanToString(buf, sizeof(buf), conf->showhidden));
	iniparser_setstring(dict, "Global:showunknown",
						booleanToString(buf, sizeof(buf), conf->showunknown));
	iniparser_setstring(dict, "Global:showfinfo",
						booleanToString(buf, sizeof(buf), conf->showfinfo));
	iniparser_setstring(dict, "Global:allowdelete",
						booleanToString(buf, sizeof(buf), conf->allowdelete));
	iniparser_setstring(dict, "Global:arrange",
						arrangeToString(buf, sizeof(buf), conf->arrange));
	iniparser_setstring(dict, "Global:enableusb",
						booleanToString(buf, sizeof(buf), conf->enableusb));
	iniparser_setstring(dict, "Image:viewpos",
						viewposToString(buf, sizeof(buf), conf->viewpos));
	iniparser_setstring(dict, "Image:imgmvspd",
						dwordToString(buf, sizeof(buf), conf->imgmvspd));
	iniparser_setstring(dict, "Image:imgpaging",
						imgpagingToString(buf, sizeof(buf), conf->imgpaging));
	iniparser_setstring(dict, "Image:imgpaging_spd",
						dwordToString(buf, sizeof(buf), conf->imgpaging_spd));
	iniparser_setstring(dict, "Image:imgpaging_interval",
						dwordToString(buf, sizeof(buf),
									  conf->imgpaging_interval));
	iniparser_setstring(dict, "Image:imgpaging_duration",
						dwordToString(buf, sizeof(buf),
									  conf->imgpaging_duration));
	for (i = 0; i < 20; ++i) {
		char key[20];

		SPRINTF_S(key, "Global:flkey1_%02d", i);
		iniparser_setstring(dict, key,
							hexToString(buf, sizeof(buf), conf->flkey[i]));
	}
	iniparser_setstring(dict, "UI:fontsize",
						intToString(buf, sizeof(buf), conf->fontsize));
	iniparser_setstring(dict, "Text:reordertxt",
						booleanToString(buf, sizeof(buf), conf->reordertxt));
	iniparser_setstring(dict, "Text:pagetonext",
						booleanToString(buf, sizeof(buf), conf->pagetonext));
	iniparser_setstring(dict, "Text:autopage",
						intToString(buf, sizeof(buf), conf->autopage));
	iniparser_setstring(dict, "Text:prev_autopage",
						intToString(buf, sizeof(buf), conf->prev_autopage));
	iniparser_setstring(dict, "Text:autopagetype",
						intToString(buf, sizeof(buf), conf->autopagetype));
	iniparser_setstring(dict, "Text:autolinedelay",
						intToString(buf, sizeof(buf), conf->autolinedelay));
	iniparser_setstring(dict, "Image:thumb",
						thumbToString(buf, sizeof(buf), conf->thumb));
	iniparser_setstring(dict, "Text:bookfontsize",
						intToString(buf, sizeof(buf), conf->bookfontsize));
	iniparser_setstring(dict, "Text:enable_analog",
						booleanToString(buf, sizeof(buf), conf->enable_analog));
	iniparser_setstring(dict, "Image:img_enable_analog",
						booleanToString(buf, sizeof(buf),
										conf->img_enable_analog));
	for (i = 0; i < 20; ++i) {
		char key[20];

		SPRINTF_S(key, "Text:txtkey2_%02d", i);
		iniparser_setstring(dict, key,
							hexToString(buf, sizeof(buf), conf->txtkey2[i]));
		SPRINTF_S(key, "Image:imgkey2_%02d", i);
		iniparser_setstring(dict, key,
							hexToString(buf, sizeof(buf), conf->imgkey2[i]));
		SPRINTF_S(key, "Global:flkey2_%02d", i);
		iniparser_setstring(dict, key,
							hexToString(buf, sizeof(buf), conf->flkey2[i]));
	}
	iniparser_setstring(dict, "Image:imgpagereserve",
						dwordToString(buf, sizeof(buf), conf->imgpagereserve));
	iniparser_setstring(dict, "Music:lyricex",
						dwordToString(buf, sizeof(buf), conf->lyricex));
	iniparser_setstring(dict, "Music:autoplay",
						booleanToString(buf, sizeof(buf), conf->autoplay));
	iniparser_setstring(dict, "Text:usettf",
						booleanToString(buf, sizeof(buf), conf->usettf));
	iniparser_setstring(dict, "Text:cttfarch", conf->cttfarch);
	iniparser_setstring(dict, "Text:cttfpath", conf->cttfpath);
	iniparser_setstring(dict, "Text:ettfarch", conf->ettfarch);
	iniparser_setstring(dict, "Text:ettfpath", conf->ettfpath);
	for (i = 0; i < 3; ++i) {
		char key[20];

		SPRINTF_S(key, "Global:freqs_%d", i);
		iniparser_setstring(dict, key,
							intToString(buf, sizeof(buf), conf->freqs[i]));
	}
	iniparser_setstring(dict, "Image:imgbrightness",
						intToString(buf, sizeof(buf), conf->imgbrightness));
	iniparser_setstring(dict, "Global:dis_scrsave",
						booleanToString(buf, sizeof(buf), conf->dis_scrsave));
	iniparser_setstring(dict, "Global:autosleep",
						intToString(buf, sizeof(buf), conf->autosleep));
	iniparser_setstring(dict, "Image:load_exif",
						booleanToString(buf, sizeof(buf), conf->load_exif));
	iniparser_setstring(dict, "Global:launchtype",
						intToString(buf, sizeof(buf), conf->launchtype));
	iniparser_setstring(dict, "Text:infobar_use_ttf_mode",
						booleanToString(buf, sizeof(buf),
										conf->infobar_use_ttf_mode));
	iniparser_setstring(dict, "Text:infobar_fontsize",
						dwordToString(buf, sizeof(buf),
									  conf->infobar_fontsize));
	iniparser_setstring(dict, "Image:no_repeat",
						booleanToString(buf, sizeof(buf), conf->img_no_repeat));

	iniparser_setstring(dict, "Global:hide_flash",
						booleanToString(buf, sizeof(buf), conf->hide_flash));

	iniparser_setstring(dict, "Text:tabstop",
						dwordToString(buf, sizeof(buf), conf->tabstop));

	iniparser_setstring(dict, "Music:apetagorder",
						booleanToString(buf, sizeof(buf), conf->apetagorder));

	iniparser_setstring(dict, "UI:language", conf->language);

	iniparser_setstring(dict, "UI:filelistwidth",
						intToString(buf, sizeof(buf), conf->filelistwidth));

	iniparser_setstring(dict, "Text:ttf_load_to_memory",
						booleanToString(buf, sizeof(buf),
										conf->ttf_load_to_memory));

	iniparser_setstring(dict, "Global:save_password",
						booleanToString(buf, sizeof(buf), conf->save_password));

	iniparser_setstring(dict, "Text:scrollbar_width",
						intToString(buf, sizeof(buf), conf->scrollbar_width));

	iniparser_setstring(dict, "Text:hide_last_row",
						booleanToString(buf, sizeof(buf), conf->hide_last_row));

	iniparser_setstring(dict, "Text:infobar_show_timer",
						booleanToString(buf, sizeof(buf),
										conf->infobar_show_timer));

	iniparser_setstring(dict, "Text:englishtruncate",
						booleanToString(buf, sizeof(buf),
										conf->englishtruncate));

	iniparser_setstring(dict, "Image:image_scroll_chgn_speed",
						booleanToString(buf, sizeof(buf),
										conf->image_scroll_chgn_speed));

	iniparser_setstring(dict, "Text:ttf_haste_up",
						booleanToString(buf, sizeof(buf), conf->ttf_haste_up));

	iniparser_setstring(dict, "Text:linenum_style",
						booleanToString(buf, sizeof(buf), conf->linenum_style));

	iniparser_setstring(dict, "Text:infobar_align",
						alignToString(buf, sizeof(buf), conf->infobar_align));

	iniparser_setstring(dict, "Music:musicdrv_opts", conf->musicdrv_opts);

	iniparser_setstring(dict, "Image:magnetic_scrolling",
						booleanToString(buf, sizeof(buf),
										conf->magnetic_scrolling));

	iniparser_setstring(dict, "Image:use_image_queue",
						booleanToString(buf, sizeof(buf),
										conf->use_image_queue));

	iniparser_setstring(dict, "Image:max_cache_img",
						dwordToString(buf, sizeof(buf), conf->max_cache_img));

	iniparser_setstring(dict, "Music:show_encoder_msg",
						booleanToString(buf, sizeof(buf),
										conf->show_encoder_msg));
	
	iniparser_dump_ini(dict, fp);

	fclose(fp);

	dictionary_del(dict);

	return true;
  error:
	if (fp != NULL)
		fclose(fp);
	return false;
}
int main(int argc, char ** argv) {
   pthread_t t;
   ThreadValues threadValues;
   int ret;
   int try;
   char * string;
   long startTime;

   /* acquiring the semaphore */
   while(!access(SEMAPHORE, F_OK)) {
      usleep(50000);
   }

   FILE *fp = fopen(SEMAPHORE, "ab+");



   /* We open the pi serial port */
   threadValues.p = SerialLib_open("/dev/ttyAMA0"); /* The serial port of the raspberry pi */

   if(threadValues.p<0) {  
      fclose(fp);
      unlink(SEMAPHORE);
      return -1; 
   }

   threadValues.frame = newFrame(0x01,0,NULL); 
   threadValues.status=1;

   /* Creation of the thread for the communication */
   ret = pthread_create(&t, NULL,fn_process, &threadValues); 
   startTime = time(NULL);
   if(!ret) {
      do {
         if(0 == threadValues.status) {
            /* We extract the most relevent part of the string */
            unlink(SEMAPHORE);
            int lenght = threadValues.frame->lenght * 8;
            unsigned char * extraction = extractTrueFrame((unsigned char *)threadValues.frame->content, (int * )&lenght);

            if(NULL == extraction || 1 == lenght) {
               freeFrame(threadValues.frame);
               close(threadValues.p);
               fclose(fp);
               return -1;
            }

            string = hexToString(extraction,lenght);
            free(extraction);
            printf("%s",string);
            free(string);
            freeFrame(threadValues.frame);
            close(threadValues.p);
            fclose(fp);
            return 0;
         }while((time(NULL) - startTime) < 50);
      }
      pthread_cancel(t);
      freeFrame(threadValues.frame);
      close(threadValues.p);
      fclose(fp);
      unlink(SEMAPHORE);
      return -1;
   } 
   freeFrame(threadValues.frame);
   close(threadValues.p);
   fclose(fp);
   unlink(SEMAPHORE);
   return -1;
}
// THE MAIN
char* main(int argc, char *argv[])
// param options:
// decrypt some aes encrypted string:			enc_string key
// set a new flag d with id=a and token='b-.-c':	a 'b-.-c' d
// add a new fzn with value:				fzn value
{
    if (strcmp(argv[1], "-h") == 0) {	// decryption not really needed but management want me to leave it...
        char* encrypted_flag = argv[2];
        char* aeskey = argv[3];

        char tmpstr[8096];
        sprintf(tmpstr, "echo %s | openssl enc -d -aes-256-cbc -a -k %s", encrypted_flag, aeskey);

        FILE *fp;
        int status;
        char path[4096];
        char content[4096];

        fp = popen(tmpstr, "r");

        if (fp == NULL)
            /* Handle error */;

        fgets(path, 4096, fp);
        sprintf(content, "%s", path);
        if (strlen(content) < 5) {
            printf("gcry_cipher_decrypt failed:");
        } else {
            printf("%s\n", content);
        }
        // dec: echo U2FsdGVkX18eaVlEUPTR47GFaEoh3u9DMHgqvtZS1Ko= | openssl enc -d -aes-256-cbc -a -k mykey
    }
    else if (strcmp(argv[1], "-h") == 0) {	// decryption not really needed but management want me to leave it...
        char* encrypted_flag = argv[2];
        char* aes_key = argv[3];
        //printf("encrypted_flag: %s (%i)\n", encrypted_flag, (int)(strlen(encrypted_flag)));
        char* ascii_flag = hexToString(encrypted_flag);
        //printf("ascii_flag: %s (%i)\n", ascii_flag, (int)(strlen(ascii_flag)));
        decryptString2(ascii_flag, aes_key);
        //printf("passing ascii_flag: %s (%i)\n", ascii_flag, (int)(strlen(ascii_flag)));
        remPad(ascii_flag, strlen(ascii_flag));
        //printf("%s\n", ascii_flag);
        //printf("ascii_flag: %s (%i)\n", ascii_flag, (int)(strlen(ascii_flag)));
        printf("%s\n", ascii_flag);
        return ascii_flag;	// is decryped
    } else if (argc == 4)
    {
        char* flag_id = argv[1];        // FahrzeugnummerBeginnWortBeginn
        char* password = argv[2];       // ( komplette Fahrzeugnummer-.-komplettes Wort )
        char* content_arg = argv[3];        // the flag itself
        char content[4096];

        strcpy(content, content_arg);
        char delimiter[] = "-.-";
        char *ptr;
        ptr = strtok(password, delimiter);
        char* fzn = ptr;

        ptr = strtok(NULL, delimiter);
        char* bayWord = ptr;

        char* aeskey = randstring(16);
        printf("%s\n", aeskey);
        char hex_content[4096];

        char tmpstr[8096];
        sprintf(tmpstr, "echo %s | openssl enc -e -aes-256-cbc -a -k %s", argv[3], aeskey);

        FILE *fp;
        int status;
        char path[4096];

        fp = popen(tmpstr, "r");

        if (fp == NULL)
            /* Handle error */;

        fgets(path, 4096, fp);
        sprintf(hex_content, "%s", path);
        // dec: echo U2FsdGVkX18eaVlEUPTR47GFaEoh3u9DMHgqvtZS1Ko= | openssl enc -d -aes-256-cbc -a -k mykey
//		printf("hex: ||%s||", hex_content);
//		printf("aes: ||%s||", aeskey);
//		printf("-----------");

        printf("fzn: %s\n", fzn);
        printf("bayWord: %s\n", bayWord);
        printf("encrypted: %s\n", hex_content);
        printf("aeskey: %s\n", aeskey);

        // ADD TO FILES
        addFznAndEncContentToFznCsv(fzn, hex_content);
//                printf("Alles3: ||%s|| ; ||%s|| ; ||%s|| ; ||%s|| ; ||%s||\n", bayWord, aeskey, fzn, hex_content, aeskey);
        addBayWordAndKeyToBayCsv(bayWord, aeskey);
//                printf("Alles4: ||%s|| ; ||%s|| ; ||%s|| ; ./setflag -h %s %s\n", bayWord, aeskey, fzn, hex_content, aeskey);


    }
    else if (argc == 4) {	// for managers only!!11
        int done = 0;
        int tries = 0;

        char* flag_id = argv[1];        // FahrzeugnummerBeginnWortBeginn
        char* password = argv[2];       // ( komplette Fahrzeugnummer-.-komplettes Wort )
        char* content_arg = argv[3];        // the flag itself
        char content[4096];

        strcpy(content, content_arg);
        printf("content_arg: %s (%i)\n", content_arg, (int)(strlen(content_arg)));
        printf("Alles::content: %s (%i)\n", content, (int)(strlen(content)));
        printf("content1: %s\n", content);
        char delimiter[] = "-.-";
        char *ptr;
        ptr = strtok(password, delimiter);
        char* fzn = ptr;
        printf("fzn: %s\n", fzn);

        ptr = strtok(NULL, delimiter);
        char* bayWord = ptr;
        printf("Alles::bayWord: %s\n", bayWord);

        char aeskey[1024];
        char hex_content[4096];

        while (done == 0) {		// some weird workaround...
            tries++;
            strcpy(content, content_arg);

            printf("Alles0: || %i ||%s (%i)|| ; ||%s(%i)|| ; ||%s(%i)|| ; ||%s(%i)|| ; ||%s(%i)||\n", tries, bayWord, (int)(strlen(bayWord)), aeskey,(int)(strlen(aeskey)), fzn, (int)(strlen(fzn)), hex_content, (int)(strlen(hex_content)), content, (int)(strlen(content)));
//		char* aeskey = randstring(16);
            strcpy(aeskey, randstring(16));
            printf("aeskey: ||%s||\n", aeskey);
            printf("passing content: %s (%i)\n", content, (int)(strlen(content)));
            addPad(content, sizeof(content));
            printf("AllesX: || %i ||%s (%i)|| ; ||%s(%i)|| ; ||%s(%i)|| ; ||%s(%i)||; ||%s(%i)||\n", tries, bayWord, (int)(strlen(bayWord)), aeskey,(int)(strlen(aeskey)), fzn, (int)(strlen(fzn)), hex_content, (int)(strlen(hex_content)), content, (int)(strlen(content)));
            printf("after addpad: %s (%i)\n", content, (int)(strlen(content)));

            int index = 0;
            printf("AllesS: ");
            for (index = 0; index<strlen(content)+1; index++) {
                printf("%02X", (unsigned char)content[index]);
            }
            printf("\n");

            encryptString2(content, aeskey);
            printf("AllesY: || %i ||%s (%i)|| ; ||%s(%i)|| ; ||%s(%i)|| ; ||%s(%i)||; ||%s(%i)||\n", tries, bayWord, (int)(strlen(bayWord)), aeskey,(int)(strlen(aeskey)), fzn, (int)(strlen(fzn)), hex_content, (int)(strlen(hex_content)), content, (int)(strlen(content)));
            printf("after enc: %s (%i)\n", content, (int)(strlen(content)));
            if (strlen(content) < 32) {
                printf("strlen %i\n", (int)(strlen(content)));
                int rofl = 0;
                printf("As s: ||");
                for (rofl = 0; rofl < 32; rofl++)
                {
                    printf("%c", content[rofl]);
                }
                printf("||\nAs x02: ||");
                for (rofl = 0; rofl < 32; rofl = rofl+2) {
                    printf("%02X", content[rofl]);
                }
                printf("||\n");
            }
            printAsHex(content);
//		char* hex_content = stringToHex(content);
            strcpy(hex_content, stringToHex(content));
            printf("after hex: %s (%i)\n", content, (int)(sizeof(content)));
            printf("Alles1: || %i ||%s (%i)|| ; ||%s(%i)|| ; ||%s(%i)|| ; ||%s(%i)||; ||%s(%i)||\n", tries, bayWord, (int)(strlen(bayWord)), aeskey,(int)(strlen(aeskey)), fzn, (int)(strlen(fzn)), hex_content, (int)(strlen(hex_content)), content, (int)(strlen(content)));

            if ((( strlen(hex_content) > 0 && strlen(content) > 0 && (strlen(hex_content) % 16) == 0 && (strlen(content) % 16) == 0) ) || tries > 4 ) {
                done = 1;
                printf("Alles2: || %i ||%s|| ; ||%s|| ; ||%s|| ; ||%s|| ; ||%s||\n", tries, bayWord, aeskey, fzn, hex_content, aeskey);
                addFznAndEncContentToFznCsv(fzn, hex_content);
                printf("Alles3: || %i ||%s|| ; ||%s|| ; ||%s|| ; ||%s|| ; ||%s||\n", tries, bayWord, aeskey, fzn, hex_content, aeskey);
                addBayWordAndKeyToBayCsv(bayWord, aeskey);
                printf("Alles4: || %i ||%s|| ; ||%s|| ; ||%s|| ; ./setflag -h %s %s\n", tries, bayWord, aeskey, fzn, hex_content, aeskey);
            }
//		char tmpstr[8096];
//		sprintf(tmpstr, "echo 'tries: %i || done: %i || strlen content: (%i) || hex_content: %s (%i) || content_arg: %s (%i) || ' >> setflaglog.log", tries, done, (int)(strlen(content)), hex_content, (int)(strlen(hex_content)), content_arg, (int)(strlen(content_arg)));
//		popen(tmpstr, "r");

        }
    } else {	// official functionality
        char* fzn = argv[1];
        char* value = argv[2];
        if (fzn != NULL && value != NULL) {
            addFznAndEncContentToFznCsv(fzn, value);
            printf("FZN ADDED\n");
        } else {
            printf("you have to provide fzn and value\n");
        }
    }
}