Дистанционно (част 1)

~ 10 Sep 2014, 01:17

Как изглежда:
Image

А какво се случва, всъщност, отдолу:

Image
Пръст: боц!

Image
Тъчскрийн до драйвера: имаме регистрирано натискане на ред 15, колона 3.
Драйвер: Ще постоя малко да видя какво се случва...

след малко...

Image
Драйвер до ядрото: получихме натискане, интересува ли те?
Ядро: бе тъкмо подготвях да пращам на NSA едни много важни данни...
Драйвер: зарежи ги за малко, човека тука натиска нещо.
Ядро: а как натиска, единично, двойно, има ли движение?
Драйвер: няма движение, единично натискане е, на координати (36, 388)
Ядро: а задържане има ли?
Дравйер: не, вече се махна.
Ядро: ОК

Image
Ядро към UI слой: имате единично натискане на (36, 388)
UI слой: това е в приложната част. Браузър, имаш единично натискане на (36, 356)

Image
Браузър: натиснали са ми една картинка, но на нея има image map с javascript зад него. И има onClick хендлър - javascript, ти си.
Javascript: първо, можеш ли да смениш картинката с "i/on.png"?
Браузър: имам я кеширана, ще ти я сменя.
Javascript: второ, прати тоя GET рекуест към command.py от същата директория. Има параметри - channel=1&state=1.
Браузър: пращам го, ще ти кажа, когато получа отговора.

Image
Браузър към ядро: може ли да ми отвориш една TCP връзка към 192.168.0.40, порт 80?
Ядро: ОК

Image
Ядро към безжична карта: тука едно SYN пакетче, ако може, да пратиш на 192.168.0.40? Теб те интересува MAC адресът де, прати го на, чакай да видя, 00:1C:C0:BF:87:A1.
Безжична карта: дадено.

Image
Невидими, незабележими електровълни, по нищо не различаващи се от околните, се понасят в етера сред останалия естествен и изкуствен шум. Микроскопични, мимолетни напрежения се отблъскват от стените, прелитат въздуха и събуждат интереса на един нищо неподозиращ рутер...
Image

Image
Рутер: я, пакетче? Обаче не е за мен, 00:1C:C0:BF:87:A1 го знам - той е на порт 2, препращам.

Image
Суич/сървърно: приходящ пакет по порт 5... адресиран до 00:1C:C0:BF:87:A1, него го знам - той е на порт 1, препращам.

Image
Мрежова карта към ядро: имате приходящ пакет.
Ядро: това е IP пакет от 192.168.0.101. Като гледам файъруола - трябва да го приемем. Я да видим какво има вътре? Аха, TCP, порт 80.
Ядро до уебсървър: слушаш ли още?
Уебсървър: да!
Ядро: добре. Ще пусна SYN-ACK обратно.
Ядро до мрежова карта: Един пакет, до D4:22:3F:81:03:9E, моля.
Мрежова карта: пращам.

Image
Суич/сървърно: сега пък пакет от порт 1... адресиран до D4:22:3F:81:03:9E, него го знам - на порт 5, препращам.

Image
Рутер: пакет, D4:22:3F:81:03:9E го знам - той е по безжичния интерфейс.

Image
Невидими, незабележими електровълни, по нищо не различаващи се от околните, се понасят в етера сред останалия естествен и изкуствен шум...
Image

Image
Безжична карта до ядро: имаме пакет от рутера.
Ядро към безжична карта: чудесно, отговорили са ни на SYNа. Прати им един ACK.
Браузър: направо и още един пакет им прати (муш един HTTP GET).
Безжична карта: действам.

Image
Невидими, незабележими електровълни ... абе - ясно ви е
Image

Image
Рутер: два пакета за 00:1C:C0:BF:87:A1 - порт 2, препращам.

Image
Суич/сървърно: два пакета за 00:1C:C0:BF:87:A1 от порт 5, препращам на порт 1.

Image
Мрежова карта до ядро: два пакета има за нас.
Ядро до мрежова карта: дай ги!
Мрежова карта: в какъв ред?
Ядро: все едно.
Мрежова карта: ето ти първия.
Ядро: ъ? Някакви данни пристигат. Ама тая връзка още не е отворена! Дай другия пакет ... ааа, ето го и ACK-а, който очаквах. Яснооо.
Ядро до уебсървър: приходяща връзка, искаш ли я?
Уебсървър: дай я насам.
Ядро: ето.
Уебсървър: аха, искат да им предоставя страницата http://192.168.0.40/widlar/command.py, с параметри channel=1&state=1. Като си гледам в конфигурацията, това е CGI скрипт.

Image
Уебсървър до Питон: имаш връзка, кажи какво да върна на хората?
Питон: от къде е тая връзка?
Уебсървър: 192.168.0.101
Питон: добре, щом са от вътрешната мрежа. Параметри има ли?
Уебсървър: да, channel=1, state=1.
Питон: каналът е зададен. В [0..3] ли е? Да. State? Има. [0..1]? Да. Окей, време да викнем една малка C програмка.

Image
Малка C програмка: я, някой ни изпълни. Имаме параметри, чудесно. Първият? '1', влиза в [0..3]. Вторият? '1', влиза в [0..1]. Чудесно.
Малка C програмка до ядро: може ли достъп до паралелния порт?
Ядро: имаш ли права?
Малка C програмка: имам, от групата на апачите съм.
Ядро: Окей, ето ти дескриптор за порта.
Малка C програмка: искам ексклузивен достъп, и да пратя стойност 0x5f на него.
Ядро: дадено

Image
Микроконтролер/сървърно: прозяв? Някой ни е включил, сигурно ще искат нещо от нас. Захранващите пинове са 3 ..., не - четири. Това вече е сериозно, ще запаля трансмитера.
Малка C програмка: готов ли си?
Микроконтролер/сървърно: мхм.
Малка C програмка до ядро: прати стойност 0xdf на паралелния порт.
Ядро: дадено
Микроконтролер/сървърно: я, смениха ни старшия бит, значи командата е истинска. Трябва да сложим канал 1 на състояние 1...
Микроконтролер към трансмитер: можеш ли да изпратиш тази серия от битове по безжичната връзка?
Трансмитер: действам

Image
Невидими, незабележими електровълни, по нищо не различаващи се от околните, се понасят в етера сред останалия естествен и изкуствен шум...
Image

Image
Стоманобетонна стена: YOU SHALL NOT PASS!

Image
Микроконтролер към трансмитер: прати ги пак, че не се знае стигнали ли са...
Трансмитер: щом трябва...
Стоманобетонна стена: YOU SHALL NOT PASS!

Image
Микроконтролер към трансмитер: още веднъж...
Трансмитер: ОК

Image
Микроконтролер/кухня: абе напоследък някой май се опитва да говори с нас, обаче част от битовете са изкривени. Ето, вече трети път пращат очаквания хедър... обаче този път е ОК! Я да видим каква ще е командата? Канал 1 = on. Значи палим канал 1, а той в момента не е запален.
Микроконтролер/кухня към Q2: транзисторче, как я караш?
Транзистор Q2: удържам засега електроните.
Микроконтролер/кухня: пусни ги да минат.

Image
Транзистор към реле: към теб идва една орда електрони - да знаеш.
Реле: Цък

Image
Електричество: я, нов път се разкри. Какво ли има там? Я да проверя... Гадоост, импулсно захранване. Мразя импулсни захранвания!
Импулсно захранване към лампи: Светнете, чада мои!

Та така де. Занимавам се с разучаване на RF и си пиша тестови програмки за някакви smart house подобрения. Вижте и втора част, където съм описал (със снимки) отделните компоненти на системата.


Благодарности на Мишо Станчев за JS частта.
Този пост се стреми да е както забавен, така и акуратен в техническо отношение. Ако видите грешки - пишете в коментарите.



Коментари:

#1 от Иван, изпратено на 26 Sep 2014, 13:05


Хаха, това беше поезия в действие :)


#2 от Grisha, изпратено на 26 Sep 2014, 21:01


Хахахах браво!Много ми хареса!AAAA+++++++


#3 от Нончо, изпратено на 1 Oct 2014, 11:57


Много ме забавлява този "разговор" :)




Име:
За връзка: (Линк към вашия блог/сайт/e-mail; незадължително)
Вашият коментар:

Сметнете израза: ocемдеceт и дeвет минус осемдесeт и сeдем = (въведи с цифри)


<<

Valid XHTML 1.0 Strict