Prvni ulozeni z chegewara githubu
This commit is contained in:
31
libraries/NetBIOS/examples/ESP_NBNST/ESP_NBNST.ino
Executable file
31
libraries/NetBIOS/examples/ESP_NBNST/ESP_NBNST.ino
Executable file
@ -0,0 +1,31 @@
|
||||
#include <WiFi.h>
|
||||
#include <NetBIOS.h>
|
||||
|
||||
const char* ssid = "............";
|
||||
const char* password = "..............";
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
// Connect to WiFi network
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(ssid, password);
|
||||
Serial.println("");
|
||||
|
||||
// Wait for connection
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
Serial.println("");
|
||||
Serial.print("Connected to ");
|
||||
Serial.println(ssid);
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
NBNS.begin("ESP");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
}
|
25
libraries/NetBIOS/keywords.txt
Executable file
25
libraries/NetBIOS/keywords.txt
Executable file
@ -0,0 +1,25 @@
|
||||
#######################################
|
||||
# Syntax Coloring Map For ESPNBNS
|
||||
#######################################
|
||||
|
||||
#######################################
|
||||
# Datatypes (KEYWORD1)
|
||||
#######################################
|
||||
|
||||
NetBIOS KEYWORD1
|
||||
|
||||
#######################################
|
||||
# Methods and Functions (KEYWORD2)
|
||||
#######################################
|
||||
|
||||
begin KEYWORD2
|
||||
|
||||
#######################################
|
||||
# Instances (KEYWORD2)
|
||||
#######################################
|
||||
|
||||
NBNS KEYWORD2
|
||||
|
||||
#######################################
|
||||
# Constants (LITERAL1)
|
||||
#######################################
|
9
libraries/NetBIOS/library.properties
Normal file
9
libraries/NetBIOS/library.properties
Normal file
@ -0,0 +1,9 @@
|
||||
name=NetBIOS
|
||||
version=2.0.0
|
||||
author=Pablo@xpablo.cz
|
||||
maintainer=Hristo Gochkov<hristo@espressif.com>
|
||||
sentence=Enables NBNS (NetBIOS) name resolution.
|
||||
paragraph=With this library you can connect to your ESP from Windows using a short name
|
||||
category=Communication
|
||||
url=http://www.xpablo.cz/?p=751#more-751
|
||||
architectures=esp32
|
131
libraries/NetBIOS/src/NetBIOS.cpp
Executable file
131
libraries/NetBIOS/src/NetBIOS.cpp
Executable file
@ -0,0 +1,131 @@
|
||||
#include "NetBIOS.h"
|
||||
|
||||
#include <functional>
|
||||
|
||||
#define NBNS_PORT 137
|
||||
#define NBNS_MAX_HOSTNAME_LEN 32
|
||||
|
||||
typedef struct {
|
||||
uint16_t id;
|
||||
uint8_t flags1;
|
||||
uint8_t flags2;
|
||||
uint16_t qcount;
|
||||
uint16_t acount;
|
||||
uint16_t nscount;
|
||||
uint16_t adcount;
|
||||
uint8_t name_len;
|
||||
char name[NBNS_MAX_HOSTNAME_LEN + 1];
|
||||
uint16_t type;
|
||||
uint16_t clas;
|
||||
} __attribute__((packed)) nbns_question_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t id;
|
||||
uint8_t flags1;
|
||||
uint8_t flags2;
|
||||
uint16_t qcount;
|
||||
uint16_t acount;
|
||||
uint16_t nscount;
|
||||
uint16_t adcount;
|
||||
uint8_t name_len;
|
||||
char name[NBNS_MAX_HOSTNAME_LEN + 1];
|
||||
uint16_t type;
|
||||
uint16_t clas;
|
||||
uint32_t ttl;
|
||||
uint16_t data_len;
|
||||
uint16_t flags;
|
||||
uint32_t addr;
|
||||
} __attribute__((packed)) nbns_answer_t;
|
||||
|
||||
static void _getnbname(const char *nbname, char *name, uint8_t maxlen){
|
||||
uint8_t b;
|
||||
uint8_t c = 0;
|
||||
|
||||
while ((*nbname) && (c < maxlen)) {
|
||||
b = (*nbname++ - 'A') << 4;
|
||||
c++;
|
||||
if (*nbname) {
|
||||
b |= *nbname++ - 'A';
|
||||
c++;
|
||||
}
|
||||
if(!b || b == ' '){
|
||||
break;
|
||||
}
|
||||
*name++ = b;
|
||||
}
|
||||
*name = 0;
|
||||
}
|
||||
|
||||
static void append_16(void * dst, uint16_t value){
|
||||
uint8_t * d = (uint8_t *)dst;
|
||||
*d++ = (value >> 8) & 0xFF;
|
||||
*d++ = value & 0xFF;
|
||||
}
|
||||
|
||||
static void append_32(void * dst, uint32_t value){
|
||||
uint8_t * d = (uint8_t *)dst;
|
||||
*d++ = (value >> 24) & 0xFF;
|
||||
*d++ = (value >> 16) & 0xFF;
|
||||
*d++ = (value >> 8) & 0xFF;
|
||||
*d++ = value & 0xFF;
|
||||
}
|
||||
|
||||
void NetBIOS::_onPacket(AsyncUDPPacket& packet){
|
||||
if (packet.length() >= sizeof(nbns_question_t)) {
|
||||
nbns_question_t * question = (nbns_question_t *)packet.data();
|
||||
if (0 == (question->flags1 & 0x80)) {
|
||||
char name[ NBNS_MAX_HOSTNAME_LEN + 1 ];
|
||||
_getnbname(&question->name[0], (char *)&name, question->name_len);
|
||||
if (_name.equals(name)) {
|
||||
nbns_answer_t nbnsa;
|
||||
nbnsa.id = question->id;
|
||||
nbnsa.flags1 = 0x85;
|
||||
nbnsa.flags2 = 0;
|
||||
append_16((void *)&nbnsa.qcount, 0);
|
||||
append_16((void *)&nbnsa.acount, 1);
|
||||
append_16((void *)&nbnsa.nscount, 0);
|
||||
append_16((void *)&nbnsa.adcount, 0);
|
||||
nbnsa.name_len = question->name_len;
|
||||
memcpy(&nbnsa.name[0], &question->name[0], question->name_len + 1);
|
||||
append_16((void *)&nbnsa.type, 0x20);
|
||||
append_16((void *)&nbnsa.clas, 1);
|
||||
append_32((void *)&nbnsa.ttl, 300000);
|
||||
append_16((void *)&nbnsa.data_len, 6);
|
||||
append_16((void *)&nbnsa.flags, 0);
|
||||
nbnsa.addr = WiFi.localIP();
|
||||
_udp.writeTo((uint8_t *)&nbnsa, sizeof(nbnsa), packet.remoteIP(), NBNS_PORT);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NetBIOS::NetBIOS(){
|
||||
|
||||
}
|
||||
NetBIOS::~NetBIOS(){
|
||||
end();
|
||||
}
|
||||
|
||||
bool NetBIOS::begin(const char *name){
|
||||
_name = name;
|
||||
_name.toUpperCase();
|
||||
|
||||
if(_udp.connected()){
|
||||
return true;
|
||||
}
|
||||
|
||||
_udp.onPacket([](void * arg, AsyncUDPPacket& packet){ ((NetBIOS*)(arg))->_onPacket(packet); }, this);
|
||||
return _udp.listen(NBNS_PORT);
|
||||
}
|
||||
|
||||
void NetBIOS::end(){
|
||||
if(_udp.connected()){
|
||||
_udp.close();
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_NETBIOS)
|
||||
NetBIOS NBNS;
|
||||
#endif
|
||||
|
||||
// EOF
|
26
libraries/NetBIOS/src/NetBIOS.h
Executable file
26
libraries/NetBIOS/src/NetBIOS.h
Executable file
@ -0,0 +1,26 @@
|
||||
//
|
||||
#ifndef __ESPNBNS_h__
|
||||
#define __ESPNBNS_h__
|
||||
|
||||
#include <WiFi.h>
|
||||
#include "AsyncUDP.h"
|
||||
|
||||
class NetBIOS
|
||||
{
|
||||
protected:
|
||||
AsyncUDP _udp;
|
||||
String _name;
|
||||
void _onPacket(AsyncUDPPacket& packet);
|
||||
|
||||
public:
|
||||
NetBIOS();
|
||||
~NetBIOS();
|
||||
bool begin(const char *name);
|
||||
void end();
|
||||
};
|
||||
|
||||
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_NETBIOS)
|
||||
extern NetBIOS NBNS;
|
||||
#endif
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user