remove examples/xxx/README.md. Migrated to Documentation/applications/examples

part of examples/bastest is moved to examples/bastest.testcases.md
This commit is contained in:
raiden00pl 2023-10-24 14:05:33 +02:00 committed by Xiang Xiao
parent 14f19f0e7d
commit 7e918964e4
14 changed files with 0 additions and 2979 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,3 @@
# Examples / `bastest` Bas BASIC Tests
This directory contains a small program that will mount a ROMFS file system
containing the BASIC test files extracted from the BAS `2.4` release.
## Background
Bas is an interpreter for the classic dialect of the programming language BASIC.
It is pretty compatible to typical BASIC interpreters of the 1980s, unlike some
other UNIX BASIC interpreters, that implement a different syntax, breaking
compatibility to existing programs. Bas offers many ANSI BASIC statements for
structured programming, such as procedures, local variables and various loop
types. Further there are matrix operations, automatic LIST indentation and many
statements and functions found in specific classic dialects. Line numbers are
not required.
The interpreter tokenises the source and resolves references to variables and
jump targets before running the program. This compilation pass increases
efficiency and catches syntax errors, type errors and references to variables
that are never initialised. Bas is written in ANSI C for UNIX systems.
## License
BAS `2.4` is released as part of NuttX under the standard 3-clause BSD license
use by all components of NuttX. This is not incompatible with the original BAS
`2.4` licensing
Copyright (c) 1999-2014 Michael Haardt
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Test Overview
## `test01.bas`

View File

@ -1,42 +0,0 @@
# Examples / `camera` Camera Snapshot
This sample is implemented as `camera` command on NuttX Shell. The synopsis of
the command is as below.
```
nsh> camera ([-jpg]) ([capture num])
-jpg : this option is set for storing JPEG file into a strage.
: If this option isn't set capturing raw RGB565 data in a file.
: raw RGB565 is default.
capture num : this option instructs number of taking pictures.
: 10 is default.
```
Storage will be selected automatically based on the available storage option.
Execution example:
```
nsh> camera
nximage_listener: Connected
nximage_initialize: Screen resolution (320,240)
Take 10 pictures as RGB file in /mnt/sd0 after 5 seconds.
After finishing taking pictures, this app will be finished after 10 seconds.
Expier time is pasted.
Start capturing...
FILENAME:/mnt/sd0/VIDEO001.RGB
FILENAME:/mnt/sd0/VIDEO002.RGB
FILENAME:/mnt/sd0/VIDEO003.RGB
FILENAME:/mnt/sd0/VIDEO004.RGB
FILENAME:/mnt/sd0/VIDEO005.RGB
FILENAME:/mnt/sd0/VIDEO006.RGB
FILENAME:/mnt/sd0/VIDEO007.RGB
FILENAME:/mnt/sd0/VIDEO008.RGB
FILENAME:/mnt/sd0/VIDEO009.RGB
FILENAME:/mnt/sd0/VIDEO010.RGB
Finished capturing...
Expier time is pasted.
nximage_listener: Lost server connection: 117
```

View File

@ -1,23 +0,0 @@
# Examples / `flash_test` SMART Flash Device Test
```
Author: Ken Pettit
Date: April 24, 2013
```
This application performs a SMART flash block device test. This test performs a
sector allocate, read, write, free and garbage collection test on a SMART MTD
block device. This test can be built only as an NSH command
**Note**: This test uses internal OS interfaces and so is not available in the
NUTTX kernel build
```
Usage:
flash_test mtdblock_device
Additional options:
--force to replace existing installation
```

View File

@ -1,17 +0,0 @@
# Examples / `flowc`
General Usage Instructions:
1. The receiver side enter, start the receiver program. The receiver is now
waiting to receive data on the configured serial port.
2. On the sender side start the sender program. This will send data to the
receiver which will verify that no data is lost.
On Linux, you can alternatively do:
```bash
$ stty -F /dev/ttyACM0 crtscts
$ cat testdata.dat >/dev/ttyACM0
```
where you need to replace `/dev/ttyACM0` with your selected serial device.

View File

@ -1,82 +0,0 @@
# FOC example
The main purpose of this example is to provide a universal template to
implement the motor controller based on the kernel-side FOC device and
the application-side FOC library.
At the moment, this example implements a simple open-loop velocity controller.
# Hardware setup
This example has not yet implemented any mechanism to protect the
powered device. This means that there is no overtemeprature
protection, no overcurrent protection and no overvoltage protection.
Make sure that you power the device properly and provide current
limits on your own so as not to break your hardware.
# Configuration
The FOC PI current controller parameters can be obtained from the given
equations:
```
Kp = ccb * Ls;
pp = Rs / Ls;
Ki = pp * Kp * T;
```
where:
Kp - PI proportional coefficient
Ki - PI integral coefficient
Rs - average phase serial resistance
Ls - average phase serial inductance
pp - pole plant
ccb - current control bandwidth
T - sampling period
## Sample parameters for some commercially available motors
* Odrive D6374 150KV
p = 7
Rs = 0.0254 Ohm
Ls = 8.73 uH
i\_max = ?
v\_max = ?
Example configuration for f\_PWM = 20kHz, f\_notifier = 10kHz, ccb=1000:
Kp = 0.0087
Ki = 0.0025
* Linix 45ZWN24-40 (PMSM motor dedicated for NXP FRDM-MC-LVMTR kit)
p = 2
Rs = 0.5 Ohm
Ls = 0.400 mH
i\_max = 2.34 A
v\_max = 24 V
Example configuration for f\_PWM = 10kHz, f\_notifier = 5kHz, ccb=1000:
Kp = 0.4
Ki = 0.1
* Bull-Running BR2804-1700 kV (motor provided with the ST P-NUCLEO-IHM07 kit)
p = 7
Rs = 0.11 Ohm
Ls = 0.018 mH
i\_max = 1.2A
v\_max = 12V
Example configuration for f\_PWM = 20kHz, f\_notifier = 10kHz, ccb=200:
Kp = 0.036
Ki = 0.022
* iPower GBM2804H-100T (gimbal motor provided with the ST P-NUCLEO-IHM03 kit)
p = 7
Rs = 5.29 Ohm
Ls = 1.05 mH
i\_max = 0.15A
v\_max = 12V
Example configuration for f\_PWM = 10kHz, f\_notifier = 5kHz, ccb=TODO:
Kp = TODO
Ki = TODO

View File

@ -1,298 +0,0 @@
# Examples / `json` cJSON JSON Parser
This directory contains logic taken from the cJSON project:
http://sourceforge.net/projects/cjson/
This corresponds to SVN revision `r42` (with lots of changes for NuttX coding
standards). As of `r42`, the SVN repository was last updated on `2011-10-10` so
I presume that the code is stable and there is no risk of maintaining duplicate
logic in the NuttX repository.
# Contents
- License
- Welcome to cJSON
# License
Copyright (c) 2009 Dave Gamble
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Welcome to cJSON
cJSON aims to be the dumbest possible parser that you can get your job done
with. It's a single file of C, and a single header file.
JSON is described best here: http://www.json.org/ It's like XML, but fat-free.
You use it to move data around, store things, or just generally represent your
program's state.
First up, how do I build? Add `cJSON.c` to your project, and put `cJSON.h`
somewhere in the header search path. For example, to build the test app:
```bash
gcc cJSON.c test.c -o test -lm
./test
```
As a library, cJSON exists to take away as much legwork as it can, but not get
in your way. As a point of pragmatism (i.e. ignoring the truth), I'm going to
say that you can use it in one of two modes: Auto and Manual. Let's have a quick
run-through.
I lifted some JSON from this page: http://www.json.org/fatfree.html That page
inspired me to write cJSON, which is a parser that tries to share the same
philosophy as JSON itself. Simple, dumb, out of the way.
Some JSON:
```json
{
"name": "Jack (\"Bee\") Nimble",
"format": {
"type": "rect",
"width": 1920,
"height": 1080,
"interlace": false,
"frame rate": 24
}
}
```
Assume that you got this from a file, a webserver, or magic JSON elves,
whatever, you have a `char *` to it. Everything is a cJSON struct.
Get it parsed:
```c
cJSON *root = cJSON_Parse(my_json_string);
```
This is an object. We're in C. We don't have objects. But we do have structs.
What's the framerate?
```c
cJSON *format = cJSON_GetObjectItem(root,"format");
int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;
```
Want to change the framerate?
```c
cJSON_GetObjectItem(format,"frame rate")->valueint = 25;
```
Back to disk?
```c
char *rendered = cJSON_Print(root);
```
Finished? Delete the root (this takes care of everything else).
```c
cJSON_Delete(root);
```
That's AUTO mode. If you're going to use Auto mode, you really ought to check
pointers before you dereference them. If you want to see how you'd build this
struct in code?
```c
cJSON *root,*fmt;
root = cJSON_CreateObject();
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));
cJSON_AddItemToObject(root, "format", fmt = cJSON_CreateObject());
cJSON_AddStringToObject(fmt,"type", "rect");
cJSON_AddNumberToObject(fmt,"width", 1920);
cJSON_AddNumberToObject(fmt,"height", 1080);
cJSON_AddFalseToObject (fmt,"interlace");
cJSON_AddNumberToObject(fmt,"frame rate", 24);
```
Hopefully we can agree that's not a lot of code? There's no overhead, no
unnecessary setup. Look at test.c for a bunch of nice examples, mostly all
ripped off the json.org site, and a few from elsewhere.
What about manual mode? First up you need some detail.
Let's cover how the cJSON objects represent the JSON data.
cJSON doesn't distinguish arrays from objects in handling; just type.
Each cJSON has, potentially, a child, siblings, value, a name.
The root object has: Object Type and a Child
The Child has name "name", with value "Jack ("Bee") Nimble", and a sibling:
Sibling has type Object, name "format", and a child.
That child has type String, name "type", value "rect", and a sibling:
Sibling has type Number, name "width", value 1920, and a sibling:
Sibling has type Number, name "height", value 1080, and a sibling:
Sibling hs type False, name "interlace", and a sibling:
Sibling has type Number, name "frame rate", value 24
Here's the structure:
```c
typedef struct cJSON {
struct cJSON *next,*prev;
struct cJSON *child;
int type;
char *valuestring;
int valueint;
double valuedouble;
char *string;
} cJSON;
```
By default all values are 0 unless set by virtue of being meaningful.
next/prev is a doubly linked list of siblings. next takes you to your sibling,
prev takes you back from your sibling to you. Only objects and arrays have a
"child", and it's the head of the doubly linked list. A "child" entry will have
`prev==0`, but next potentially points on. The last sibling has `next=0`. The
type expresses Null/True/False/Number/String/Array/Object, all of which are
`#define`d in `cJSON.h`.
A Number has `valueint` and `valuedouble`. If you're expecting an `int`, read
`valueint`, if not read `valuedouble`.
Any entry which is in the linked list which is the child of an object will have
a "string" which is the "name" of the entry. When I said "name" in the above
example, that's "string". "string" is the JSON name for the 'variable name' if
you will.
Now you can trivially walk the lists, recursively, and parse as you please. You
can invoke `cJSON_Parse` to get cJSON to parse for you, and then you can take
the root object, and traverse the structure (which is, formally, an N-tree), and
tokenise as you please. If you wanted to build a callback style parser, this is
how you'd do it (just an example, since these things are very specific):
```c
void parse_and_callback(cJSON *item, const char *prefix)
{
while (item)
{
size_t len = strlen(prefix) + strlen(item->name) + 2;
char *newprefix = malloc(len);
snprintf(newprefix, len, "%s/%s", prefix, item->name);
int dorecurse = callback(newprefix, item->type, item);
if (item->child && dorecurse) parse_and_callback(item->child, newprefix);
item = item->next;
free(newprefix);
}
}
```
The prefix process will build you a separated list, to simplify your callback
handling. The `dorecurse` flag would let the callback decide to handle
sub-arrays on it's own, or let you invoke it per-item. For the item above, your
callback might look like this:
```c
int callback(const char *name,int type, cJSON *item)
{
if (!strcmp(name,"name")) { /* populate name */ }
else if (!strcmp(name,"format/type") { /* handle "rect" */ }
else if (!strcmp(name,"format/width") { /* 800 */ }
else if (!strcmp(name,"format/height") { /* 600 */ }
else if (!strcmp(name,"format/interlace") { /* false */ }
else if (!strcmp(name,"format/frame rate") { /* 24 */ }
return 1;
}
```
Alternatively, you might like to parse iteratively.
You'd use:
```c
void parse_object(cJSON *item)
{
int i; for (i=0; i < cJSON_GetArraySize(item); i++)
{
cJSON *subitem = cJSON_GetArrayItem(item, i);
// handle subitem.
}
}
```
Or, for PROPER manual mode:
```c
void parse_object(cJSON *item)
{
cJSON *subitem = item->child;
while (subitem)
{
// handle subitem
if (subitem->child) parse_object(subitem->child);
subitem = subitem->next;
}
}
```
Of course, this should look familiar, since this is just a stripped-down version
of the callback-parser.
This should cover most uses you'll find for parsing. The rest should be possible
to infer.. and if in doubt, read the source! There's not a lot of it! ;)
In terms of constructing JSON data, the example code above is the right way to
do it. You can, of course, hand your sub-objects to other functions to populate.
Also, if you find a use for it, you can manually build the objects. For
instance, suppose you wanted to build an array of objects?
```c
cJSON *objects[24];
cJSON *Create_array_of_anything(cJSON **items,int num)
{
int i;cJSON *prev, *root=cJSON_CreateArray();
for (i=0;i<24;i++)
{
if (!i) root->child=objects[i];
else prev->next=objects[i], objects[i]->prev=prev;
prev=objects[i];
}
return root;
}
```
and simply: `Create_array_of_anything(objects,24)`;
cJSON doesn't make any assumptions about what order you create things in. You
can attach the objects, as above, and later add children to each of those
objects.
As soon as you call `cJSON_Print`, it renders the structure to text.
The test.c code shows how to handle a bunch of typical cases. If you uncomment
the code, it'll load, parse and print a bunch of test files, also from json.org,
which are more complex than I'd care to try and stash into a `const char
array[]`.
Enjoy cJSON!
_Dave Gamble, Aug 2009_

View File

@ -1,138 +0,0 @@
# Examples / MCUboot / `swap_test`
## Description
MCUboot Swap Image is an application to demostrate firmware upgrade using
internal flash memory. It simulate MCUboot API steps to switch between two
valid images.
This application add 3 Builtin Apps to NuttX NSH: version, set_img and confirm.
After application is build and `nuttx.bin` be generated, the binary must be
signed. Consult your board README file to get instructions how to do it.
## How to build and flash
First step is build your board configuraton using `mcuboot-loader` as target.
That create the bootloader itself. The `nuttx.bin` must be flash as usual.
After that, clean up environment and set `mcuboot-swap-test` as target. The
build output will generate the `nuttx.bin` file. You should execute the MCUboot
script called `imgtool.py` and sign the binary file two times.
The first time you will use `--version 1.0.0` and `signedv1.bin` as output file.
Then, the second sign you need change to `--version 2.0.0` and `signedv2.bin`
as output file.
The `signedv1.bin` file must be at MCUboot Slot-0 partition and `signedv2.bin`
at Slot-1.
More instructions about how to sign and flash can be found at board README file.
## Running swap image test
Open you terminal and reboot your board. You can see a similar output as below.
You can check builtin apps using command `?`.
```bash
*** Booting MCUboot build 7c890f4b075aed73e4c825ccf875b2fb9ebf2ded ***
NuttShell (NSH) NuttX-10.2.0
nsh> ?
help usage: help [-v] [<cmd>]
. cd echo hexdump mv rmdir true xd
[ cp exec kill printf set truncate
? cmp exit ls ps sleep uname
basename dirname false mkdir pwd source umount
break dd free mkrd reboot test unset
cat df help mount rm time usleep
Builtin Apps:
mcuboot_set_img mcuboot_confirm sh
mcuboot_version ramtest nsh
nsh>
```
First step (check version):
```bash
nsh> mcuboot_version
Image version 1.0.0.0
nsh>
```
Second step (mark image as good because it is running). This is an optional
step that must be executed if you ran `imgtool.py` without optional parameter
`--confirm`.
```bash
nsh> mcuboot_confirm
Application Image successfully confirmed!
nsh>
```
Third step (let's reboot and see whats happen):
```bash
nsh> reboot
*** Booting MCUboot build 7c890f4b075aed73e4c825ccf875b2fb9ebf2ded ***
NuttShell (NSH) NuttX-10.2.0
nsh> mcuboot_version
Image version 1.0.0.0
nsh>
```
Fourth step (let's switch image):
```bash
nsh> mcuboot_set_img
Requested update for next boot. Restarting...
*** Booting MCUboot build 7c890f4b075aed73e4c825ccf875b2fb9ebf2ded ***
NuttShell (NSH) NuttX-10.2.0
nsh> mcuboot_version
Image version 2.0.0.0
nsh>
```
Now, we switched from image version 1.0.0 to image 2.0.0. However, we intentionaly
will not run `mcuboot_confirm` app.
```bash
nsh> reboot
*** Booting MCUboot build 7c890f4b075aed73e4c825ccf875b2fb9ebf2ded ***
NuttShell (NSH) NuttX-10.2.0
nsh> mcuboot_version
Image version 1.0.0.0
nsh>
```
This means that if for any reason App reboot, have a malfunctioning or not boot,
MCUboot will switch back to old `good` image! Remember that we executed
`mcuboot_confirm` at step two.
Fifth step (switch to image version 2 and mark as permanent):
```bash
nsh> mcuboot_set_img
Requested update for next boot. Restarting...
*** Booting MCUboot build 7c890f4b075aed73e4c825ccf875b2fb9ebf2ded ***
NuttShell (NSH) NuttX-10.2.0
nsh> mcuboot_confirm
Application Image successfully confirmed!
nsh> mcuboot_version
Image version 2.0.0.0
nsh>
```
Sixth step (Reboot and confirm V2 image):
```bash
nsh> reboot
*** Booting MCUboot build 7c890f4b075aed73e4c825ccf875b2fb9ebf2ded ***
NuttShell (NSH) NuttX-10.2.0
nsh> mcuboot_version
Image version 2.0.0.0
nsh>
```
Conclusion, once we boot a newer image and confirm it MCUboot always run that
image, unless you instruct it to swap again!

View File

@ -1,25 +0,0 @@
This is a simple MQTT publisher example using MQTT-C
By default it publishes to the "test" topic and exits. Default behaviour
including, host, port, topic, message and loop count can be changed through
different arguments.
To test:
From the host start an MQTT broker and subscribe to the "test" topic. Here
mosquitto is used:
```
mosquitto&
mosquitto_sub -t test
```
Make sure that mosquitto is not configured in local mode only.
From the nsh:
Launch the built-in app `mqttc_pub` specifying the host:
```
mqttc_pub -h HOST
```
The target will publish the message "test".

View File

@ -1,17 +0,0 @@
# Examples / `pdcurses` PDCurses Demos
This directory contains demonstration programs to show and test the capabilities
of `pdcurses` libraries. Some of them predate PDCurses, PCcurses or even
`pcurses`/`ncurses`. Although some PDCurses-specific code has been added, all
programs remain portable to other implementations (at a minimum, to `ncurses`).
## Building
The demos are built by the platform-specific makefiles, in the platform
directories. There are no dependencies besides curses and the standard C
library, and no configuration is needed.
## Distribution Status
Public Domain, except for `rain_main.c` and `worm_main.c`, which are under the
ncurses license (MIT-like).

View File

@ -1,26 +0,0 @@
# Client TCP
## What's this?
This program consists of a client socket & custom messages that send data (hex-string formatted data) to a server (tcp_ipc_server).
Then, tcp_ipc_server send this data over LoraWAN (using Radioenge LoRaWAN module). It means using TCP/IP sockets as IPC channel to ensure controlled access to LoRaWAN connectivity.
The goals of using this approach to send LoRaWAN data are:
* Having a solid and reliable infrastructure to ensure IPC works fine for multiple applications simultaneously
* Having the possibility to host different IoT projects and solutions that use LPWAN in a single ESP32
* Having the possibility to validate, test and debug multiple IoT projects and solutions at the same time, under the same connectivity conditions (same signal strength, same antenna, same modem/transceiver, etc.)
Both client and server work on local network scope.
## How do I use this?
In order to test tcp_ipc_client & tcp_ipc_server together, there are two ways to proceed:
1) Init server manually (command: SERVER &), and after successfull server init, also init client manually (CLIENT 127.0.0.1)
2) init server automatically after boot using NuttShell start up scripts (check: https://nuttx.apache.org/docs/latest/applications/nsh/installation.html#nuttshell-start-up-scripts )
## Additional info
Both tcp_ipc_client and tcp_ipc_server examples have been full covered in NuttX International Workshop 2022. You can watch the full presentation here: https://www.youtube.com/watch?v=hr0OfTt1KeY
The tcp_ipc_server and tcp_ipc_client examples have been developed by Flavio Ipirranga and Pedro Bertoleti from Instituto de Pesquisas Eldorado (IPE) in Brazil.

View File

@ -1,28 +0,0 @@
# Server TCP
## What's this?
This program consists of a server socket & custom messages to establish IPC for multiple applications (client_tcp) and one process that controls LoRaWAN connectivity (server_tcp).
For more details about client side, please see client_tcp example.
This approach using TCP/IP sockets as IPC channel ensures controlled access to LoRaWAN connectivity.
The goals of using this approach are:
* Having a solid and reliable infrastructure to ensure IPC works fine for multiple applications simultaneously
* Having the possibility to host different IoT projects and solutions that use LPWAN in a single ESP32
* Having the possibility to validate, test and debug multiple IoT projects and solutions at the same time, under the same connectivity conditions (same signal strength, same antenna, same modem/transceiver, etc.)
Both client and server work on local network scope.
## How do I use this?
In order to test client_tcp & server_tcp together, there are two ways to proceed:
1) Init server manually (command: SERVER &), and after successfull server init, also init client manually (CLIENT 127.0.0.1)
2) init server automatically after boot using NuttShell start up scripts (check: https://nuttx.apache.org/docs/latest/applications/nsh/installation.html#nuttshell-start-up-scripts )
## Additional info
Both client_tcp and server_tcp examples have been full covered in NuttX International Workshop 2022. You can watch the full presentation here: https://www.youtube.com/watch?v=hr0OfTt1KeY
The server_tcp and client_tcp examples have been developed by Flavio Ipirranga and Pedro Bertoleti from Instituto de Pesquisas Eldorado (IPE) in Brazil.

View File

@ -1,43 +0,0 @@
# Examples / `tcpblaster` TCP Performance Test
To set up, do `make menuconfig` and select the _Apps__Examples_
_tcpblaster_. By default, nuttx will the be the client which sends data; and the
host computer (Linux, macOS, or Windows) will be the server.
Set up networking so the nuttx computer can ping the host, and the host can ping
nuttx. Now you are ready to run the test.
On host:
```
$ ./tcpserver
Binding to IPv4 Address: 00000000
server: Accepting connections on port 5471
```
On nuttx:
```
nsh> tcpclient
Connecting to IPv4 Address: 0100000a
client: Connected
[2014-07-31 00:16:15.000] 0: Sent 200 4096-byte buffers: 800.0 KB (avg 4.0 KB) in 0.18 seconds (4444.4 KB/second)
```
Now on the host you should see something like:
```
$ ./tcpserver
Binding to IPv4 Address: 00000000
server: Accepting connections on port 5471
server: Connection accepted -- receiving
[2020-02-22 16:17:07.000] 0: Received 200 buffers: 502.9 KB (buffer average size: 2.5 KB) in 0.12 seconds (4194.8 KB/second)
[2020-02-22 16:17:07.000] 1: Received 200 buffers: 393.1 KB (buffer average size: 2.0 KB) in 0.09 seconds (4299.4 KB/second)
```
This will tell you the link speed in KB/sec kilobytes per second. If you want
kilobits, multiply by `8`.
You can use the `make menuconfig` to reverse the setup, and have nuttx be the
server, and the host be the client. If you do that, start the server first
(nuttx), then start the client (host).

View File

@ -1,7 +0,0 @@
# Examples / `telnetd` Telnet Daemon
This directory contains a functional port of the tiny uIP shell. In the NuttX
environment, the NuttShell (at `apps/nshlib`) supersedes this tiny shell and
also supports telnetd.
This example is retained here for reference purposes only.