http://podolskie.org/Nikolay.shtmlПодольские
В октябре месяце мы с отцом поехали в Лукоянов, для сдачи мною экзамена на звание учителя начального... >>>
ОКСАНА (Статьи)
23 февраля 2023 — 15:57
напишите мне kids-52@yandex.ru
Мои бабушки и дедушки родом из д.Николаевка >>>
Дмитрий Пронькин (Статьи)
27 ноября 2022 — 17:39
Здравствуйте, я тоже из Гаврилово и фамилия пронькин, там сейчас ещё давольно таки много пронькиных >>>
Олег (Статьи)
26 сентября 2022 — 20:45
Здравствуйте,Наталья,понятно,Боженькин Иван Васильевич в Малой Аре был мужем сестры моего деда Новикова Павла Еремеевича.А это вы ведете ветку ваших... >>>
Важдаев Олег (Статьи)
22 сентября 2022 — 17:18
Спасибо за статью о любимом селе моего детства! >>>
Овен (21.03–20.04) 28.05.2023
Сегодняшний день будет полон неожиданностей, как приятных, так и не слишком. В любом случае, дела, запланированные заранее, лучше отложить, ибо переделать их не удастся.
//Copyright Shukstrov Sergey (shus, shyuser)
/* 2018-03-22
* ADSL tester v1.0
* для модема Dlink DSL-2500U hw_D4 fw_1.0.50
* для Arduino ProMini
*
* без I2C
* без шифрования mac адреса
* с шифрованием копирайта по Base64
*
* доработать!!!!!!!!!!!!!!!!!!!
* - не выключается подстветка это было только с I2C, но можно реализовать добавлением транзистора и его выключением через деактивацию пина или тупо так оставить
* + доработать _Tab1ToSlash - выводит только одно значение и без /
* + в итоге сделать для Arduino Pro Mini
* -как проблема пока не решенная иногда не полность выводится текущая скорость на 1602
*/
int pause = 4000; //время задержки показаний параметров на экране
boolean logining = false; //флаг, что мы авторизованы в модеме
int numlogining = 0; //повторная попытка залогиниться для точек
int link = 0; //статус линка
String points = ""; //result - результат запроса
String result = ""; //points - текущее кол-во точек для бегущих точек
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//проходим SafeMode модема - тупо ждём пока с порта модема идёт загрузка более чем 5 секунд
void _SkipSafeMode() {
int n = 0;
while (n < 7) {
while (Serial.available()>0){
//Serial.write(Serial.read());
char inchar = (char)Serial.read();
n=0;
};
delay(1000);
n = n+1;
_Points(7);//бегающие точки
};
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//ищем в тексте text фрагмент tget и возвращаем текст из text от конца tget до первого пробела, но не менее 2 символов
String _Parsing(String &text,String tget) {//text - полный текст, tget - искомый фрагмент текста запроса
String res,str;//результат
int ltext = text.length();//длина исходного текста
int ltget = tget.length();//длина текста запроса
int bres = 0;
int n = 0;//просто счетчик
boolean ftget = false;//флаг, что нашли искомый фрагмент
while (n<(ltext-ltget+1) && !ftget) {//ищем запрос в тексте
str = text.substring(n, n+ltget);
if (str == tget) {//если нашли искомый фрагмент
ftget = true;
bres = n+ltget+1; //запоминаем откуда начинать брать ответ на запрос
}
n=n+1;
}
boolean fres = false;
n=0;
while (ftget && !fres && n
char inchar = text[bres+n];
if (inchar != ' ' && inchar != '0xA' && inchar != '\r' && inchar != '\n') {//берем текст до бробела не менее 2 символов чтобы, вдруг сразу после tget идут пробелы
res += inchar;
} else {
if (res.length() > 1) {//если вначале пробелы
fres = true;
};
};
n = n+1;
};
res.trim();
return res;
};
//ищем в тексте text фрагмент tget и возвращаем текст из text от tget до конца строки
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
String _ParsingString(String &text,String tget) {//text - полный текст, tget - искомый фрагмент текста запроса
String res,str;//результат
int ltext = text.length();//длина исходного текста
int ltget = tget.length();//длина текста запроса
int bres = 0;
int n = 0;//просто счетчик
boolean ftget = false;//флаг, что нашли искомый фрагмент
while (n
str = text.substring(n, n+ltget);
if (str == tget) {//если нашли искомый фрагмент
ftget = true;
bres = n+ltget+1; //запоминаем откуда начинать брать ответ на запрос
}
n=n+1;
}
boolean fres = false;
n=0;
while (ftget && !fres && n
char inchar = text[bres+n];
if (inchar != '\r') {//берем текст до бробела не менее 2 символов чтобы, вдруг сразу после tget идут пробелы
res += inchar;
} else {
if (res.length() > 1) {//если вначале пробелы
fres = true;
};
};
n = n+1;
};
//res = text.substring(bres);
res.trim();
return res;
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//ставим между значениями слэш "/"
String _Tab1ToSlash(String text) {
int i=0;
boolean fone = false; //флаг, что нашли первый символ пробела или табуляции
String result="";
while (i < text.length()) {
if (text[i] == '\t' || text[i] == ' '){
if (!fone) {
fone = true;
result +='/';
};
} else {
result +=text[i];
}
i = i+1;
};
return result;
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//проверка что мы уже авторизованы в модеме
void _TestLogin() {
Serial.write(0x0A); // переход на новую строку
String txt = Serial.readString();
int i = 0;//счетчик символов
boolean flog = false;//флаг, что символ приглашения ">" нашелся
while (i < txt.length() || !flog) {//тупо ищем в тексте символ >
if (txt[i] == '#'){
flog = true;
};
i=i+1;
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//авторизация в модеме под учеткой
void _Logining() {
if (numlogining == 0) {//первая авторизация
lcd.setCursor(0,1);
lcd.print("Logining ");
numlogining = 1;
}
_Points(8);//бегающие точки
Serial.write(0x0A); // переход на новую строку
String txt = Serial.readString();
if (txt.substring(txt.length()-7,txt.length()-1) == "Login:") {
if (numlogining == 1) {//попытка авторизации под первой учеткой
Serial.write(login);
Serial.write(0x0A); // переход на новую строку
delay(200);
Serial.write(password1);
Serial.write(0x0A); // переход на новую строку
delay(200);
numlogining = numlogining + 1;
};
if (numlogining == 2) {//попытка авторизации под второй учеткой
Serial.write(login);
Serial.write(0x0A); // переход на новую строку
delay(200);
Serial.write(password2);
Serial.write(0x0A); // переход на новую строку
delay(200);
numlogining = numlogining + 1;
};
if (numlogining == 3) {//попытка авторизации под третьей учеткой
Serial.write(login);
Serial.write(0x0A); // переход на новую строку
delay(200);
Serial.write(password3);
Serial.write(0x0A); // переход на новую строку
delay(200);
numlogining = numlogining + 1;
};
if (numlogining == 4) {//попытка авторизации под четвертой учеткой
Serial.write(login);
Serial.write(0x0A); // переход на новую строку
delay(200);
Serial.write(password4);
Serial.write(0x0A); // переход на новую строку
numlogining = 1;
};
} else {
if (txt.substring(11) == "# "){//авторизовались
logining = true;
lcd.setCursor(14,1);
lcd.print("OK");
numlogining = 0;
points = "";
Serial.write("sh"); //заходим в BusyBox
Serial.write(0x0A); // переход на новую строку
delay(200);
}
};
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//проверяем статус линк
void _GetLinkStatus() {
String text1;
Serial.write("adsl info --show");
Serial.write(0x0A); // переход на новую строку
text1 = Serial.readString();
result = _Parsing(text1,"Status:");
if (result != "Showtime") {//линка нет
if (link > 1) {//был линк
link = 0;
} else {//линк уже был
link = link-1;
if (link < -15) {// нет линка долго защита
link = -16;
};
}
} else {
if (link < 1) {//небыло линка
link = 1;
} else {//линк уже был
link = link +1;
if (link > 15) {//линка долго есть защита
link = 15;
};
}
};
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//выводим состояние линка
void _ViewLinkStatus() {
int xr;
if (link > 0) {//линк есть
xr = 14;
result = "UP";
//lcd.backlight();
} else {
xr = 12;
result = "DOWN";
};
if (link > -2 && link < 2) {//если линк есть или нет первый раз
lcd.clear();
lcd.setCursor(0,0);
lcd.print(caption+revision);
lcd.setCursor(0,1);
lcd.print("Link adsl...");
lcd.setCursor(xr,1);
lcd.print(result);
delay(1000);
} else {//если линк есть или нет не первый раз
_Points(9);//бегающие точки
};
if (link < (-15)) {//отключаем подсветку экрана если нет линка долго
//lcd.noBacklight();
};
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
//по порядку выводим параметры линии
void _ViewAdslParametrs() {
String text1;
Serial.write("adsl info --show");
Serial.write(0x0A); // переход на новую строку
text1 = Serial.readString();
delay(200);
//стандарт ADSL
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Mode:");
lcd.setCursor(6,0);
result = _Parsing(text1,"Mode:");
lcd.print(result);
//мощность сигнала
lcd.setCursor(0,1);
lcd.print("Powr:");
lcd.setCursor(6,1);
result = _ParsingString(text1, "Pwr(dBm):");
result = _Tab1ToSlash(result);
lcd.print(result);
//01 - заставку вешаем пока прогрузится режим SafeMode модема
lcd.setCursor(0,0);
lcd.print(caption+" for");
lcd.setCursor(0,1);
lcd.print(modem);
delay(3000); // ждем 4 сек.
lcd.setCursor(0,0);
lcd.print(caption+revision);
lcd.setCursor(0,1);
lcd.print(cprt);
delay(4000); // ждем 4 сек.
lcd.setCursor(0,1);
lcd.print(cprt1);
delay(4000); // ждем 4 сек.
//02 - заставку вешаем пока прогрузится режим SafeMode модема
lcd.setCursor(0,1);
lcd.print("Loading ");
points = " ";
_SkipSafeMode();
//тупо выводим ОК и ждем
lcd.setCursor(14,1);
lcd.print("OK");
delay(2000); // ждем 2 сек.
points = " ";
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
void loop (){
if (!logining) {//если не приглашение к вводу команд - авторизация не прошла
_Logining();//авторизация в модеме
} else {
_TestLogin();//проверка что авторизованы - на случай если модем сам закрыл сессию
};
if (logining) {
_GetLinkStatus();//проверка состояния линка
if (link < 2){//линка нет или поднялся первый раз
_ViewLinkStatus();//вывод статуса линка
};
if (link > 0){//линк есть
_ViewAdslParametrs();//линк есть, выводим параметры линии
};
};
};