├── .gitignore
├── LICENSE.txt
├── README.md
├── RetroWiFiModem
├── RetroWiFiModem.h
├── RetroWiFiModem.ino
├── at_basic.h
├── at_extended.h
├── at_proprietary.h
├── globals.h
├── player.h
└── support.h
├── bin
└── RetroWiFiModem.d1r2_or_d1mini.bin
├── case
├── back_panel.scad
├── back_panel.stl
├── front_panel.pdf
├── front_panel.scad
└── front_panel.stl
├── images
├── Back panel.jpg
├── Front Panel.jpg
├── Interior.jpg
├── Plugged in.jpg
├── Prototype.jpg
└── RetroWiFiModem.sch.png
├── kicad
├── .gitignore
├── RetroWiFiModem-bom.csv
├── RetroWiFiModem.kicad_pcb
├── RetroWiFiModem.kicad_prl
├── RetroWiFiModem.kicad_pro
├── RetroWiFiModem.kicad_sch
├── fp-lib-table
├── gerbers
│ ├── RetroWiFiModem-B_Cu.gbl
│ ├── RetroWiFiModem-B_Mask.gbs
│ ├── RetroWiFiModem-B_Paste.gbp
│ ├── RetroWiFiModem-B_Silkscreen.gbo
│ ├── RetroWiFiModem-Edge_Cuts.gm1
│ ├── RetroWiFiModem-F_Cu.gtl
│ ├── RetroWiFiModem-F_Mask.gts
│ ├── RetroWiFiModem-F_Paste.gtp
│ ├── RetroWiFiModem-F_Silkscreen.gto
│ ├── RetroWiFiModem-NPTH-drl_map.gbr
│ ├── RetroWiFiModem-NPTH.drl
│ ├── RetroWiFiModem-PTH-drl_map.gbr
│ └── RetroWiFiModem-PTH.drl
├── library
│ ├── RetroWiFiModem.dcm
│ └── RetroWiFiModem.lib
├── modules.pretty
│ ├── BARREL_JACK.kicad_mod
│ ├── C3.kicad_mod
│ ├── C_Disc_D3_P2.5.kicad_mod
│ ├── C_Disc_D3_P5.kicad_mod
│ ├── DFPlayerMini.kicad_mod
│ ├── DIP-16_W7.62mm_LongPads.kicad_mod
│ ├── D_DO-35_SOD27_P7.62mm_Horizontal.kicad_mod
│ ├── IDC_Header_Straight_10pins.kicad_mod
│ ├── LED-3MM.kicad_mod
│ ├── MountingHole_3.2mm_Hammond_1593.kicad_mod
│ ├── PinHeader_1x02_P2.54mm_Vertical.kicad_mod
│ ├── R3.kicad_mod
│ ├── SOIC-14_3.9x8.7mm_P1.27mm.kicad_mod
│ ├── SOIC-20W_7.5x12.8mm_P1.27mm.kicad_mod
│ ├── SOIC-28W_7.5x17.9mm_Pitch1.27mm.kicad_mod
│ ├── TO-92_Inline_Wide.kicad_mod
│ └── wemos-d1-mini-with-pin-header-and-connector.kicad_mod
└── sym-lib-table
└── sounds
├── 0001.WAV
├── 0002.WAV
├── 0003.WAV
├── 0004.WAV
├── 0005.WAV
├── 0006.WAV
├── 0007.WAV
├── 0008.WAV
├── 0009.WAV
├── 0010.WAV
├── 0011.WAV
├── 0012.WAV
├── 0013.WAV
├── 0014.WAV
└── 0015.WAV
/.gitignore:
--------------------------------------------------------------------------------
1 | case/*.gcode
2 | case/dimention_test.scad
3 | case/pcb_test.*
4 | case/dimension_test.scad
5 | kicad/*bak
6 | kicad/*.svg
7 | kicad/RetroWiFiModem_rotated.kicad_pcb
8 | kicad/library/*.bck
9 | telnet.txt
10 | RetroWiFiModem/*.gch
11 | D1 mini pinouts.txt
12 | sounds/*.wav
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Retro WiFi modem
2 |
3 | ## An ESP8266 based RS232 \<-\> WiFi modem with Hayes AT style commands and LED indicators
4 |
5 | ### (And yes, this version makes the noises)
6 |
7 | 
8 |
9 | This project grew out of a desire to get an old Ampro LB+/Z80 hooked up
10 | to the Internet.
11 |
12 | Right from the start, I knew I wanted a row of LED indicators at the
13 | front of the modem so that it would be reminiscent of an old Hayes
14 | Smartmodem. (I briefly considered finding an old Smartmodem on eBay, but
15 | soon remembered that the case had in fact been made of metal; they don't
16 | build 'em like that anymore.)
17 |
18 | Since the modem was going to be hooked up to the Little Board's
19 | serial port, I needed an actual RS-232 level serial port, with either a
20 | DB-25 or DE-9 connector.
21 |
22 | And finally, since I wanted the Hayes style LEDs, I thought it would be
23 | handy to have the Hayes AT commands too, at least as close as I could
24 | manage.
25 |
26 | That was all I started with. I couldn't tell you how I stumbled across
27 | the whole WiFi modem thing; I can't even remember what terms I searched
28 | with but very quickly I came across the message thread at [WiFi232's
29 | Evil
30 | Clone](http://www.vcfed.org/forum/entry.php?740-WiFi232-s-Evil-Clone&bt=1056).
31 | Inspired by that, and [Paul Rickards'
32 | WiFi232](http://biosrhythm.com/?page_id=1453), and [Daniel Jameson's
33 | ESP8266 based virtual modem](https://github.com/stardot/esp8266_modem) I
34 | got started.
35 |
36 | I had a preliminary version put together and working by the first
37 | evening. Then the wholesale changes to the software began. And for the
38 | longest time, it looked like they'd never end. Eventually though, they
39 | calmed down and "wholesale changes" downshifted to "another tweak I'd
40 | like to make."
41 |
42 | The hardware didn't change nearly as much from beginning to end. I did
43 | the development on a Wemos D1 R1 and a little half length solderless
44 | breadboard mounted together. The plan for the final hardware was always
45 | to use a [Wemos D1 mini](https://docs.wemos.cc/en/latest/d1/d1_mini.html).
46 | A MAX3237 took care of the 3.3V <-> RS-232 level shifting, and a
47 | 74HCT245 was used to drive the indicator LEDs.
48 |
49 | 
50 |
51 | The only major additions to the hardware during development was an OR
52 | gate on the serial output from the ESP8266 and the addition of a
53 | DFPlayer Mini for the dialing and connection sounds.
54 |
55 | On startup, the ESP8266 sends out some debug information
56 | (at an oddball baud rate) through the serial port. It shows up as
57 | garbage characters to whatever's hooked up to the serial port. It
58 | annoyed me enough that I fed the Tx signal through the OR gate, with the
59 | other input hooked up to an output pin that I could count on remaining
60 | high (thereby masking off the Tx signal) until after the sketch had
61 | started and set it low.
62 |
63 | And while it didn't make the cut the first time around, there's a
64 | DFPlayer Mini in this version for faux dialing and connection sounds.
65 | They really do complete the whole retro feel (but they can be turned off
66 | too).
67 |
68 | ## The Hardware
69 |
70 | 
71 |
72 | The second time around, I decided that I was going to bite the bullet
73 | and go with some surface mount stuff, starting with the MAX3237. Having
74 | a full suite of RS-232 control signals seemed worth it. I stuck with
75 | through hole components where I could (I already had most of them in my
76 | parts box) but adding the DFPlayer Mini meant that the 74HC32 and
77 | 74HCT245 had to be surface mount just to make them fit.
78 |
79 | In keeping with the retro theme, the modem uses classic Hayes style
80 | blinking LEDs and a DE-9F for the RS-232 connector. Everything is
81 | displayed and brought out to the DE-9F connector: RTS, CTS, DSR, DTR,
82 | DCD, RI, TxD and RxD.
83 |
84 | The PCB is laid out for a
85 | [Wemos D1 mini](https://docs.wemos.cc/en/latest/d1/d1_mini.html) and the
86 | software expects to see just that. If you're just using the software and
87 | not the PCB, there's no reason you couldn't use another kind of ESP8266
88 | board; I used a D1 R1 myself when I was developing the modem. You'd just
89 | need to add pin definitions for your board in RetroWiFiModem.h.
90 |
91 | A separate 3.3V regulator is used to power the MAX3232 IC and 74HC32
92 | quad OR gate. Some (most?) D1 mini clones have the smallest 3.3V
93 | regulator on board that they can get away with to power the board, and
94 | they don't have a lot of mA's left over to power anything else. Better
95 | safe than sorry.
96 |
97 | 
98 |
99 | The power connector expects a 2.1mm I.D. x 5.5mm O.D. barrel plug,
100 | delivering 5 volts, centre positive. I used a Tri-Mag L6R06H-050 (5V,
101 | 1.2A), [DigiKey part#
102 | 364-1251-ND](https://www.digikey.com/product-detail/en/tri-mag-llc/L6R06H-050/364-1251-ND/7682614).
103 | If you plug in a 9V adapter like you'd use for an Arduino, you *will*
104 | let the magic smoke out and have an ex-modem on your hands.
105 |
106 | 
107 |
108 | On the off chance that there's someone else out there with a well
109 | stocked parts box and a burning desire to put together their own WiFi
110 | modem, there's a [BOM](kicad/RetroWiFiModem-bom.csv) in the kicad
111 | sub directory. If you actually had to go out and buy all the parts, it
112 | really wouldn't be cost effective.
113 |
114 | Then again, how practical is getting an Ampro Little Board on the
115 | Internet? Practicality isn't always everything. Sometimes nostalgia is
116 | worth the effort.
117 |
118 | ## The case
119 |
120 | Like I said at the start, I would have loved to have used an old Hayes
121 | Smartmodem case, but they were metal and wouldn't have allowed the WiFi
122 | to work particularly well.
123 |
124 | In the end I went with a Hammond 1593N case (DigiKey part #
125 | [HM963-ND](https://www.digikey.com/en/products/detail/hammond-manufacturing/1593NBK/1090774)
126 | or [HM964-ND](https://www.digikey.com/en/products/detail/hammond-manufacturing/1593NGY/1090775)
127 | depending on whether you like black or grey). STL and OpenSCAD
128 | files are included for the front and back panels. You could use the
129 | proper Hammond red panel for the front (DigiKey part #
130 | [HM965-ND](https://www.digikey.com/en/products/detail/hammond-manufacturing/1593NIR10/1090776)),
131 | *but* they're only available in 10 packs and their price is highway robbery.
132 | I ended up using a slightly smaller red panel (DigiKey part #
133 | [HM889-ND](https://www.digikey.com/en/products/detail/hammond-manufacturing/1593SIR10/409899))
134 | that was ~much~ cheaper (it has recently increased in price by 500%)
135 | and available in single units.
136 |
137 | The labels are unbelievably low tech. I print them on a piece of inkjet
138 | transparency film. I then cut that down to size so that it will fit
139 | under the LED opening. Then I attach the trimmed down transparency piece
140 | to a length of matte finish, invisible tape and carefully position it in
141 | place. A bit of careful work with an x-acto knife and you've got
142 | yourself a label that looks like it's part of the panel. If you look
143 | closely at the front panel image you can see the edges of the
144 | transparency film and the tape, but in practice they both essentially
145 | disappear.
146 |
147 | ## The PCB
148 |
149 | The PCB includes cutouts for the two columns that join the case
150 | together, and mounting holes for the 6 standoffs. Also, there's an oddly
151 | shaped cutout in back end to allow a particular IDC DE-9F I had on hand.
152 | It's available from DigiKey (or a very close clone is) but it's fairly
153 | pricey. But there's plenty of room for an ordinary solder cup DE-9F.
154 | You'd most likely want to omit the 10 pin header and just wire the DE-9F
155 | right to the board.
156 |
157 | ## The Software
158 |
159 | In a nod to its popularity, the command set I used largely follows that
160 | used in [Paul Rickards' WiFi232](http://biosrhythm.com/?page_id=1453)
161 | modem. Even if the innards are completely different, it made sense to
162 | make it *work* like what people were already used to. There's a reason
163 | everyone's been copying the Hayes command set for almost 40 years!
164 |
165 | ### First time setup
166 |
167 | The default serial configuration is 9600bps, 8 data bits, no parity, 1
168 | stop bit.
169 |
170 | Here's the commands you need to set up the modem to automatically
171 | connect to your WiFi network:
172 |
173 | 1. `AT$SSID=your WiFi network name` to set the WiFi network that the
174 | modem will connect to when it powers up.
175 | 2. `AT$PASS=your WiFi network password` to set the password for the
176 | network.
177 | 3. `ATC1` to connect to the network.
178 | 4. Optional stuff:
179 | * `AT$SB=speed` to set the default serial speed.
180 | * `AT$SU=dps` to set the data bits, parity and stop bits.
181 | * `ATNETn` to select whether or not to use Telnet protocol.
182 | * `AT&Kn` to use RTS/CTS flow control or not.
183 | * `AT&Dn` to set up DTR handling.
184 | 5. `AT&W` to save the settings.
185 |
186 | Once you've done that, the modem will automatically connect to your WiFi
187 | network on power up and will be ready to "dial up" a connection with
188 | ATDT.
189 |
190 | ### Command Reference
191 |
192 | Multiple AT commands can be typed in on a single line. Spaces between
193 | commands are allowed, but not within commands (i.e. AT S0=1 X1 Q0 is
194 | fine; ATS 0= 1 is not). Commands that take a string as an argument
195 | (e.g. AT$SSID=, AT$TTY=) assume that *everything* that follows is a part
196 | of the string, so no commands are allowed after them.
197 |
198 | Command | Details
199 | ------- | -------
200 | +++ | Online escape code. Once your modem is connected to another device, the only command it recognises is an escape code of a one second pause followed by three typed plus signs and another one second pause, which puts the modem back into local command mode. The character used can be set with `ATS2=n`.
201 | A/ | Repeats the last command entered. Do not type AT or press Enter.
202 | AT | The attention prefix that precedes all command except A/ and +++.
203 | AT? | Displays a help cheatsheet.
204 | ATA | Force the modem to answer an incoming connection when the conditions for auto answer have not been satisfied.
205 | ATC?
ATC*n* | Query or change the current WiFi connection status. A result of 0 means that the modem is not connected to WiFi, 1 means the modem is connected. The command ATC0 disconnects the modem from a WiFi connection. ATC1 connects the modem to the WiFi.
206 | ATDS*n* | Calls the host specified in speed dial slot *n* (0-9).
207 | ATDT[+=-]host[:port] | Tries to establish a WiFi TCP connection to the specified host name or IP address. If no port number is given, 23 (Telnet) is assumed. You can also use ATDT to dial one of the speed dial slots in one of two ways:
- The alias in each speed dial slot is checked to see if it matches the specified hostname.
- A host specified as 7 identical digits dials the slot indicated by the digit. (i.e. 2222222 would speed dial the host in slot 2).
Preceding the host name or IP address with a +, = or - character overrides the ATNET setting for the period of the connection.
- **+** forces NET2 (fake Telnet)
- **=** forces NET1 (real Telnet)
- **-** forces NET0 (no Telnet)
Once the dial attempt has begun, pressing any key before the connection is established will abort the attempt.
208 | ATE?
ATE*n* | Command mode echo. Enables or disables the display of your typed commands.
- E0 Command mode echo OFF. Your typing will not appear on the screen.
- E1 Command mode echo ON. Your typing will appear on the screen.
209 | ATGET*http://host[/page]* | Displays the contents of a website page. **https** connections are not supported. Once the contents have been displayed, the connection will automatically terminate.
210 | ATH | Hangs up (ends) the current connection.
211 | ATI | Displays the current network status, including sketch build date, WiFi and call connection state, SSID name, IP address, and bytes transferred.
212 | ATL?
ATL*n* | Query or set the volume of the speaker (0-3).
213 | ATM?
ATM*n* | Query or set whether the speaker is enabled or disabled. ATM0 disables the speaker. ATM1 enables it.
214 | ATNET?
ATNET*n* | Query or change whether telnet protocol is enabled. A result of 0 means that telnet protocol is disabled; 1 is *Real* telnet protocol and 2 is *Fake* telnet protocol. If you are connecting to a telnet server, it may expect the modem to respond to various telnet commands, such as terminal name (set with `AT$TTY`), terminal window size (set with `AT$TTS`) or terminal speed. Telnet protocol should be enabled for these sites, or you will at best see occasional garbage characters on your screen, or at worst the connection may fail.
The difference between *real* and *fake* telnet protocol is this: with *real* telnet protocol, a carriage return (CR) character being sent from the modem to the telnet server always has a NUL character added after it. The implementation of the telnet protocol used by some BBSes doesn't properly strip out the NUL character. When connecting to such BBSes (Particles! is one), use *fake* telnet.
When using *real* telnet protocol, when the telnet server sends a CR character followed by a NUL character, only the CR character will be sent to the serial port; the NUL character will be silently stripped out. With *fake* telnet protocol, the NUL will be passed through.
215 | ATO | Return online. Use with the escape code (+++) to toggle between command and online modes.
216 | ATQ?
ATQ*n* | Enable or disable the display of result codes. The default is Q0.
- Q0 Display result codes.
- Q1 Suppress result codes (quiet).
217 | ATRD
ATRT | Displays the current UTC date and time from NIST in the format *YY-MM-DD HH:MM:SS*. A WiFi connection is required and you cannot be connected to another site.
218 | ATS0?
ATS0=*n* | Display or set the number of "rings" before answering an incoming connection. Setting `S0=0` means "don't answer".
219 | ATS2?
ATS2=*n* | Display or set the ASCII code used in the online escape sequence. The default value is 43 (the + plus character). Setting it to any value between 128 and 255 will disable the online escape function.
220 | ATV?
ATV*n* | Display result codes in words or numbers. The default is V1.
- V0 Display result codes in numeric form.
- V1 Display result codes in text form.
221 | ATX?
ATX*n* | Control the amount of information displayed in the result codes. The default is X1 (extended codes).
- X0 Display basic codes (CONNECT, NO CARRIER)
- X1 Display extended codes (CONNECT speed, NO CARRIER (connect time))
222 | ATZ | Resets the modem.
223 | AT&F | Reset the NVRAM contents and current settings to the sketch defaults. All settings, including SSID name, password and speed dial slots are affected.
224 | AT&D?
AT&D*n* | Display or set the handling of DTR going inactive. The default is &D0 (ignored).
- &D0 Ignore
- &D1 Go to command mode
- &D2 End call
- &D3 Reset modem
225 | AT&K?
AT&K*n* | Data flow control. Prevents the modem's buffers for received and transmitted from overflowing.
- &K0 Disable data flow control.
- &K1 Use hardware flow control. Requires that your computer and software support Clear to Send (CTS) and Request to Send (RTS) at the RS-232 interface.
226 | AT&R?
AT&R=*server pwd* | Query or change the password for incoming connections. If set, the user has 3 chances in 60 seconds to enter the correct password or the modem will end the connection.
227 | AT&V*n* | Display current or stored settings.
- &V0 Display current settings.
- &V1 Display stored settings.
228 | AT&W | Save current settings to NVRAM.
229 | AT&Zn?
AT&Z*n*=*host[:port],alias* | Store up to 10 numbers in NVRAM, where *n* is the position 0-9 in NVRAM, and *host[:port]* is the host string, and *alias* is the speed dial alias name. The host string may be up to 50 characters long, and the alias string may be up to 16 characters long.
Example: `AT&Z2=particlesbbs.dyndns.org:6400,particles`
This number can then be dialed in any of the following ways:
- `ATDS2`
- `ATDTparticles`
- `ATDT2222222`
230 | AT$AE?
AT$AE=*startup AT cmd* | Query or change the command line to be executed when the modem starts up.
231 | AT$AYT | Sends a Telnet "Are You There?" command if connected to a Telnet remote.
232 | AT$BM?
AT$BM=*server busy msg* | Query or change a message to be returned to an incoming connection if the modem is busy (i.e. already has a connection established).
233 | AT$MDNS
AT$MDNS=*mDNS name* | Query or change the mDNS network name (defaults to "espmodem"). When a non zero TCP port is defined, you can telnet to that port with **telnet mdnsname.local port**.
234 | AT$PASS?
AT$PASS=*WiFi pwd* | Query or change the current WiFi password. The password is case sensitive. Clear the password by issuing the set command with no password. The maximum length of the password is 64 characters.
235 | AT$SB?
AT$SB=*n* | Query or change the current baud rate. Valid values for "n" are 110, 300, 450, 600, 710, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 76800 and 115200. Any other value will return an ERROR message. The default baud rate is 1200. The Retro WiFi modem does not automatically detect baud rate like a dial-up modem. The baud rate setting must match that of your terminal to operate properly. It will display garbage in your terminal otherwise.
236 | AT$SP?
AT$SP=*n* | TCP server port to listen on. A value of 0 means that the TCP server is disabled, and no incoming connections are allowed.
237 | AT$SSID?
AT$SSID=*ssid name* | Query or change the current SSID to the specified name. The given SSID name is case sensitive. Clear the SSID by issuing the set command with no SSID. The maximum length of the SSID name is 32 characters.
238 | AT$SU?
AT$SU=*dps* | Query or change the current number of data bits ('d'), parity ('p') and stop bits ('s") of the serial UART. Valid values for 'd' are 5, 6, 7 or 8 bits. Valid values for 'p' are (N)one, (O)dd or (E)ven parity. Valid values for 's' are 1 or 2 bits. The default settings are 8N1. The UART setting must match your terminal to work properly.
239 | AT$TTL?
AT$TTL=*telnet location* | Query or change the Telnet location value to be returned when the Telnet server issues a SEND-LOCATION request. The default value is "Computer Room".
240 | AT$TTS?
AT$TTS=*WxH* | Query or change the window size (columns x rows) to be returned when the Telnet server issues a NAWS (Negotiate About Window Size) request. The default value is 80x24. For terminals that are smaller than 80x24, setting these values appropriately will enable paging on the help (AT?) and network status (ATI) commands.
241 | AT$TTY?
AT$TTY=*terminal type* | Query or change the terminal type to be returned when the Telnet server issues a TERMINAL-TYPE request. The default value is "ansi".
242 | AT$W?
AT$W=*n* | Startup wait.
- $W=0 Startup with no wait.
- $W=1 Wait for the return key to be pressed at startup.
243 |
244 | ### Updating the Software
245 |
246 | While I liked the idea of being able to update the software OTA, it
247 | seemed to make more sense in my situation to be able to *push* a new
248 | version as I built it rather than have the modem *pull* it. So that's
249 | what I did. It uses the default OTA upload capability built into the
250 | Arduino IDE.
251 |
252 | **Jan 24/22:** It's been reported that the ESP8266 core is slightly
253 | snafu'd at the moment, and that it's breaking things in the modem
254 | software. As a workaround, I've added the bin file that gets uploaded
255 | to the modem in the repository. I haven't updated my ESP8266 core in
256 | ages; "if it isn't broken, don't break it", and everything still works
257 | for me. The bin file can be uploaded with the *espota.py* tool in the
258 | ESP8266 tool directory tree.
259 |
260 | (If TPTB have deleted/renamed/moved that tool in the current core,
261 | you'll have to figure out how to do a manual OTA update.)
262 |
263 | ### RTS/CTS handshaking and a dead spin loop issue
264 |
265 | Something I noticed with ESP8266 software that puzzled me was the
266 | number of places I saw a series of Serial print statements being broken
267 | up with calls to yield(), like so:
268 |
269 | ```
270 | Serial.print("Hello world!\n");
271 | yield();
272 | Serial.print("How are you today?\n");
273 | yield();
274 | ```
275 | It didn't take long to figure out what was going on; The print() call
276 | was blocking, and at lower baud rates, even printing a few relatively
277 | short strings was enough to cause the watchdog to bark and cause a
278 | reset. So the repetitive yield() calls were an attempt to feed the
279 | watchdog often enough to keep it from barking.
280 |
281 | What does this have to do with RTS/CTS handshaking? Simply put,
282 | lowering RTS for more than a few seconds was causing the watchdog to
283 | bark as well. So I started digging.
284 |
285 | In cores/esp8266/uart.cpp I found the following function:
286 |
287 | ```
288 | static void
289 | uart_do_write_char(const int uart_nr, char c)
290 | {
291 | while(uart_tx_fifo_full(uart_nr));
292 |
293 | USF(uart_nr) = c;
294 | }
295 | ```
296 |
297 | This is the low level function that everything calls to send a character
298 | out the serial port. The cause of the watchdog barking is in the dead
299 | spin while loop. It waits until there's room in the transmit FIFO to add
300 | another character. So if RTS/CTS handshaking is enabled, and RTS is low
301 | for longer than the watchdog likes: woof.
302 |
303 | What I did to quiet the watchdog down both when sending long strings at
304 | low baud rates and during long waits for RTS to come active again was to
305 | add a yield() call to the dead spin while loop, like so:
306 |
307 | ```
308 | static void
309 | uart_do_write_char(const int uart_nr, char c)
310 | {
311 | while(uart_tx_fifo_full(uart_nr))
312 | yield();
313 |
314 | USF(uart_nr) = c;
315 | }
316 | ```
317 |
318 | This way, no matter how long the code has to wait for space in the
319 | transmit FIFO, the watchdog is kept well fed and quiet.
320 |
321 | ## Status
322 |
323 | As I said way back in 2020, is a personal project like this ever
324 | *really* finished? I've had two units assembled and in use since the
325 | spring of 2020, and a third since 2022, and while there's
326 | been some software changes since then, and a second rev of the hardware
327 | to bring out all the RS-232 control signals and add in the faux dialing
328 | and connections sounds, I really don't expect any more changes. But I've
329 | said that before! There are no outstanding bugs that I'm aware of, and
330 | no new features on my wish list. For the time being at least, I think
331 | it's complete.
332 |
333 | ### Linux, Telnet, Zmodem and downloading binary files
334 |
335 | Have you used the modem to 'dial' into a Linux box? And have you done a
336 | `sz binary_file` on the Linux box? And at a completely reproducible
337 | point in the file, has the connection dropped? But other binary files
338 | work just fine? Then read on.
339 |
340 | This drove me slightly batty for months. I finally narrowed it down to
341 | trying to send blocks of binary data with a large number of FF bytes. I
342 | eventually created a test file consisting of 2K of FF and used that to
343 | test with. I could download it through the modem with Xmodem just fine.
344 | Ymodem also worked if I kept the block size down to 128 bytes - but the
345 | connection would drop instantly if I tried sending 1K blocks. Same thing
346 | with Zmodem.
347 |
348 | In fact, if I just tried `cat binary_file`, the connection would
349 | drop. Which eventually got me thinking. Sitting at the console on my
350 | main Linux box, I telnet'd to the same box and logged in. No WiFi modem
351 | involved anywhere, just a telnet session on the console to the same box.
352 | I then did a `cat binary_file`. The telnet connection dropped, and I
353 | was back in my original session.
354 |
355 | It's the Linux telnet daemon. Not the modem at all.
356 |
357 | To prove it to myself, I hooked up WiFi modems to two systems on their
358 | serial ports and had one dial into the other. I could send the all FF
359 | binary file back and forth with Zmodem and Ymodem, no trouble at all.
360 |
361 | But you really, really need to download that binary file through the
362 | modem from a telnet connection to a Linux box? You're not going to be
363 | able to use Zmodem. Ymodem will work (the sy command defaults to 128
364 | byte blocks), as will Xmodem. But not Zmodem.
365 |
366 | Oddly enough, the telnet daemon has no trouble *receiving* the all FF
367 | binary file. Only sending it. Your guess as to why is probably better
368 | than mine.
369 |
370 | ## References
371 |
372 | * [WiFi232 - An Internet Hayes Modem for your Retro Computer](http://biosrhythm.com/?page_id=1453)
373 | * [WiFi232's Evil Clone](https://forum.vcfed.org/index.php?threads/wifi232s-evil-clone.1070412/)
374 | * [Jussi Salin's Virtual modem for ESP8266](https://github.com/jsalin/esp8266_modem)
375 | * [Stardot's ESP8266 based virtual modem](https://github.com/stardot/esp8266_modem)
376 | * [Roland Juno's ESP8266 based virtual modem](https://github.com/RolandJuno/esp8266_modem)
377 |
378 | ## Acknowledgements
379 |
380 | * A whole lot of people owe a big vote of thanks to Jussi Salin for
381 | releasing their virtual modem code for the ESP8266 and starting the
382 | ball rolling.
383 | * Paul Rickards for an amazing bit of hardware to draw inspiration from.
384 | * All the Stardot contributors for their work.
385 | * And, of course, Dennis C. Hayes for creating something so simple and
386 | elegant that has stood the test of time.
387 |
--------------------------------------------------------------------------------
/RetroWiFiModem/RetroWiFiModem.h:
--------------------------------------------------------------------------------
1 | #ifndef _MODEM_H
2 | #define _MODEM_H
3 |
4 | #define DEBUG 0
5 | #define DEFAULT_SPEED 1200
6 |
7 | #define RING_INTERVAL 1500
8 | #define MAX_CMD_LEN 256
9 | #define TX_BUF_SIZE 256
10 | #define ESC_CHAR '+'
11 | #define ESC_COUNT 3
12 | #define GUARD_TIME 1000
13 | #define MAGIC_NUMBER 0x0002
14 | #define MAX_SSID_LEN 32
15 | #define MAX_WIFI_PWD_LEN 64
16 | #define DEFAULT_LISTEN_PORT 6400
17 | #define TELNET_PORT 23
18 | #define HTTP_PORT 80
19 | #define SPEED_DIAL_SLOTS 10
20 | #define MAGIC_ANSWER_RINGS 3
21 | #define MAX_ALIAS_LEN 16
22 | #define MAX_SPEED_DIAL_LEN 50
23 | #define MAGIC_SPEED_LEN 7
24 | #define MAX_MDNSNAME_LEN 80
25 | #define MAX_BUSYMSG_LEN 80
26 | #define MAX_PWD_LEN 80
27 | #define PASSWORD_TIME 60000
28 | #define PASSWORD_TRIES 3
29 | #define MAX_AUTOEXEC_LEN 80
30 | #define MAX_TERMINAL_LEN 80
31 | #define MAX_LOCATION_LEN 80
32 |
33 | #define NUL '\x00'
34 | #define CTLC '\x03'
35 | #define BS '\x08'
36 | #define LF '\x0A'
37 | #define CR '\x0D'
38 | #define DEL '\x7F'
39 |
40 | #define NO_TELNET ((uint8_t)0)
41 | #define REAL_TELNET ((uint8_t)1)
42 | #define FAKE_TELNET ((uint8_t)2)
43 |
44 | // Telnet codes
45 | #define VLSUP ((uint8_t)0)
46 | #define VLREQ ((uint8_t)1)
47 | #define LOC ((uint8_t)23)
48 | #define TTYPE ((uint8_t)24)
49 | #define NAWS ((uint8_t)31)
50 | #define TSPEED ((uint8_t)32)
51 | #define LFLOW ((uint8_t)33)
52 | #define LINEMODE ((uint8_t)34)
53 | #define XDISPLOC ((uint8_t)35)
54 | #define NEW_ENVIRON ((uint8_t)39)
55 | #define MSDP ((uint8_t)69) //
56 | #define MSSP ((uint8_t)70) //
57 | #define MCCP ((uint8_t)85) //
58 | #define MCCP2 ((uint8_t)86) //
59 | #define MCCP3 ((uint8_t)87) // MUD Telnet extensions
60 | #define MSP ((uint8_t)91) //
61 | #define MXP ((uint8_t)93) //
62 | #define GMCP ((uint8_t)201) //
63 | #define BINARY ((uint8_t)0)
64 | #define ECHO ((uint8_t)1)
65 | #define SUP_GA ((uint8_t)3)
66 | #define SE ((uint8_t)240)
67 | #define DM ((uint8_t)242)
68 | #define AYT ((uint8_t)246)
69 | #define SB ((uint8_t)250)
70 | #define WILL ((uint8_t)251)
71 | #define WONT ((uint8_t)252)
72 | #define DO ((uint8_t)253)
73 | #define DONT ((uint8_t)254)
74 | #define IAC ((uint8_t)255)
75 |
76 | #define NIST_HOST "time.nist.gov"
77 | #define NIST_PORT 13
78 |
79 | #define ACTIVE LOW // RS232 control signals are active low
80 |
81 | // As the ESP8266 is being used as a modem (DCE) in this application,
82 | // I've reversed the naming of RTS/CTS to match what they'd be on
83 | // a modem. The usual naming is correct if the ESP8266 is wired up as
84 | // a DTE, but kept confusing me here as it's wired up as a DCE.
85 | #ifdef ARDUINO_ESP8266_WEMOS_D1R1
86 | // D1 R1 pins
87 | #define CTS D10 // (GPIO15) output
88 | #define RTS D11 // (GPIO13) input
89 | #define RI D12 // (GPIO12) output
90 | #define DSR D4 // (GPIO04) output
91 | #define DCD D3 // (GPIO05) output
92 | #define DTR D8 // (GPIO00) input
93 | #define TXEN D5 // (GPIO14) output
94 | #define BUSY D2 // (GPIO16) input
95 | #endif
96 |
97 | #ifdef ARDUINO_ESP8266_WEMOS_D1MINI
98 | // D1 mini pins
99 | #define CTS D8 // (GPIO15) output
100 | #define RTS D7 // (GPIO13) input
101 | #define RI D6 // (GPIO12) output
102 | #define DSR D2 // (GPIO04) output
103 | #define DCD D1 // (GPIO05) output
104 | #define DTR D3 // (GPIO00) input
105 | #define TXEN D5 // (GPIO14) output
106 | #define BUSY D0 // (GPIO16) input
107 | #endif
108 |
109 | // Sound player definitions
110 | #define SOUND_DIAL_TONE 1
111 | #define SOUND_DIALLING (SOUND_DIAL_TONE+1)
112 | #define NUM_DIAL_SOUNDS 10
113 | #define SOUND_RING (SOUND_DIALLING+NUM_DIAL_SOUNDS)
114 | #define SOUND_CONNECT_300 (SOUND_RING+1)
115 | #define SOUND_CONNECT_1200 (SOUND_CONNECT_300+1)
116 | #define SOUND_CONNECT_9600 (SOUND_CONNECT_1200+1)
117 |
118 | #endif
119 |
--------------------------------------------------------------------------------
/RetroWiFiModem/RetroWiFiModem.ino:
--------------------------------------------------------------------------------
1 | //
2 | // Retro WiFi modem: an ESP8266 based RS232<->WiFi modem
3 | // with Hayes style AT commands and blinking LEDs.
4 | //
5 | // Originally based on
6 | // Original Source Copyright (C) 2016 Jussi Salin
7 | // Additions (C) 2018 Daniel Jameson, Stardot Contributors
8 | // Additions (C) 2018 Paul Rickards
9 | //
10 | // This program is free software: you can redistribute it and/or modify
11 | // it under the tertms of the GNU General Public License as published by
12 | // the Free Software Foundation, either version 3 of the License, or
13 | // (at your option) any later version.
14 | //
15 | // This program is distributed in the hope that it will be useful,
16 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 | // GNU General Public License for more details.
19 | //
20 | // You should have received a copy of the GNU General Public License
21 | // along with this program. If not, see .
22 | //
23 |
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include "RetroWiFiModem.h"
31 | #include "globals.h"
32 | #include "support.h"
33 | #include "player.h"
34 | #include "at_basic.h"
35 | #include "at_extended.h"
36 | #include "at_proprietary.h"
37 |
38 | // =============================================================
39 | void setup(void) {
40 | pinMode(RI, OUTPUT);
41 | pinMode(DCD, OUTPUT);
42 | pinMode(DSR, OUTPUT);
43 | digitalWrite(TXEN, HIGH); // continue disabling TX until
44 | pinMode(TXEN, OUTPUT); // we have set up the Serial port
45 | pinMode(DTR, INPUT);
46 |
47 | digitalWrite(RI, !ACTIVE); // not ringing
48 | digitalWrite(DCD, !ACTIVE); // not connected
49 | digitalWrite(DSR, !ACTIVE); // modem is not ready
50 |
51 | EEPROM.begin(sizeof(struct Settings));
52 | EEPROM.get(0, settings);
53 | if( settings.magicNumber != MAGIC_NUMBER ) {
54 | // no valid data in EEPROM/NVRAM, populate with defaults
55 | factoryDefaults(NULL);
56 | }
57 | sessionTelnetType = settings.telnet;
58 |
59 | playerInit();
60 | playerSetVolume(settings.volume);
61 | if( !settings.speaker ) {
62 | playerMute();
63 | }
64 |
65 | Serial.begin(settings.serialSpeed, getSerialConfig());
66 | digitalWrite(TXEN, LOW); // enable the TX output
67 | if( settings.rtsCts ) {
68 | setHardwareFlow();
69 | }
70 | // enable interrupt when DTR goes inactive if we're not ignoring it
71 | if( settings.dtrHandling != DTR_IGNORE ) {
72 | attachInterrupt(digitalPinToInterrupt(DTR), dtrIrq, RISING);
73 | }
74 |
75 | if( settings.startupWait ) {
76 | while( true ) { // wait for a CR
77 | yield();
78 | if( Serial.available() ) {
79 | if( Serial.read() == CR ) {
80 | break;
81 | }
82 | }
83 | }
84 | }
85 |
86 | WiFi.begin();
87 | if( settings.ssid[0] ) {
88 | WiFi.waitForConnectResult();
89 | WiFi.mode(WIFI_STA);
90 | }
91 | WiFiClient::setDefaultNoDelay(true); // disable Nalge algorithm by default
92 |
93 | if( settings.listenPort ) {
94 | tcpServer.begin(settings.listenPort);
95 | }
96 |
97 | if( settings.ssid[0] && WiFi.status() == WL_CONNECTED ) {
98 | setupOTAupdates();
99 | }
100 |
101 | if( WiFi.status() == WL_CONNECTED || !settings.ssid[0] ) {
102 | if( WiFi.status() == WL_CONNECTED ) {
103 | digitalWrite(DSR, ACTIVE); // modem is finally ready or SSID not configured
104 | }
105 | if( settings.autoExecute[0] ) {
106 | strncpy(atCmd, settings.autoExecute, MAX_CMD_LEN);
107 | atCmd[MAX_CMD_LEN] = NUL;
108 | if( settings.echo ) {
109 | Serial.println(atCmd);
110 | }
111 | doAtCmds(atCmd); // auto execute command
112 | } else {
113 | sendResult(R_OK);
114 | }
115 | } else {
116 | sendResult(R_ERROR); // SSID configured, but not connected
117 | }
118 |
119 | playerSetVolume(settings.volume);
120 | if( !settings.speaker ) {
121 | playerMute();
122 | }
123 | }
124 |
125 | // =============================================================
126 | void loop(void) {
127 |
128 | checkForIncomingCall();
129 |
130 | if( settings.dtrHandling == DTR_RESET && checkDtrIrq() ) {
131 | resetToNvram(NULL);
132 | }
133 |
134 | switch( state ) {
135 |
136 | case CMD_NOT_IN_CALL:
137 | if( WiFi.status() == WL_CONNECTED ) {
138 | ArduinoOTA.handle();
139 | }
140 | inAtCommandMode();
141 | break;
142 |
143 | case CMD_IN_CALL:
144 | inAtCommandMode();
145 | if( state == CMD_IN_CALL && !tcpClient.connected() ) {
146 | endCall(); // hang up if not in a call
147 | }
148 | break;
149 |
150 | case PASSWORD:
151 | inPasswordMode();
152 | break;
153 |
154 | case ONLINE:
155 | if( Serial.available() ) { // data from RS-232 to Wifi
156 | sendSerialData();
157 | }
158 |
159 | while( tcpClient.available() && !Serial.available() ) { // data from WiFi to RS-232
160 | int c = receiveTcpData();
161 | if( c != -1 ) {
162 | Serial.write((char)c);
163 | }
164 | }
165 |
166 | if( escCount == ESC_COUNT && startGuardTime && millis() - startGuardTime > GUARD_TIME ) {
167 | state = CMD_IN_CALL; // +++ detected, back to command mode
168 | sendResult(R_OK);
169 | escCount = 0;
170 | }
171 |
172 | if( settings.dtrHandling != DTR_IGNORE && checkDtrIrq() ) {
173 | switch( settings.dtrHandling ) {
174 |
175 | case DTR_GOTO_COMMAND:
176 | state = CMD_IN_CALL;
177 | sendResult(R_OK);
178 | escCount = 0;
179 | break;
180 |
181 | case DTR_END_CALL:
182 | endCall();
183 | break;
184 |
185 | case DTR_RESET:
186 | resetToNvram(NULL);
187 | break;
188 |
189 | default:
190 | break;
191 | }
192 | }
193 |
194 | if( !tcpClient.connected() ) { // no client?
195 | endCall(); // then hang up
196 | }
197 | break;
198 | }
199 | }
200 |
201 | // =============================================================
202 | void doAtCmds(char *atCmd) {
203 | size_t len;
204 |
205 | trim(atCmd); // get rid of leading and trailing spaces
206 | if( atCmd[0] ) {
207 | // is it an AT command?
208 | if( strncasecmp(atCmd, "AT", 2) ) {
209 | sendResult(R_ERROR); // nope, time to die
210 | } else {
211 | // save command for possible future A/
212 | strncpy(lastCmd, atCmd, MAX_CMD_LEN);
213 | lastCmd[MAX_CMD_LEN] = NUL;
214 | atCmd += 2; // skip over AT prefix
215 | len = strlen(atCmd);
216 |
217 | if( !atCmd[0] ) {
218 | // plain old AT
219 | sendResult(R_OK);
220 | } else {
221 | trim(atCmd);
222 | while( atCmd[0] ) {
223 | if( !strncasecmp(atCmd, "?", 1) ) { // help message
224 | // help
225 | atCmd = showHelp(atCmd + 1);
226 | } else if( !strncasecmp(atCmd, "$AYT", 4) ) {
227 | atCmd = doAreYouThere(atCmd + 4);
228 | } else if( !strncasecmp(atCmd, "$SB", 3) ) {
229 | // query/set serial speed
230 | atCmd = doSpeedChange(atCmd + 3);
231 | } else if( !strncasecmp(atCmd, "$SU", 3) ) {
232 | // query/set serial data configuration
233 | atCmd = doDataConfig(atCmd + 3);
234 | } else if( !strncasecmp(atCmd, "$SSID", 5) ) {
235 | // query/set WiFi SSID
236 | atCmd = doSSID(atCmd + 5);
237 | } else if( !strncasecmp(atCmd, "$PASS", 5) ) {
238 | // query/set WiFi password
239 | atCmd = doWiFiPassword(atCmd + 5);
240 | } else if( !strncasecmp(atCmd, "C", 1) ) {
241 | // connect/disconnect to WiFi
242 | atCmd = wifiConnection(atCmd + 1);
243 | } else if( !strncasecmp(atCmd, "D", 1) && len > 2 && strchr("TPI", toupper(atCmd[1])) ) {
244 | // dial a number
245 | atCmd = dialNumber(atCmd + 2);
246 | } else if( !strncasecmp(atCmd, "DS", 2) && len == 3 ) {
247 | // speed dial a number
248 | atCmd = speedDialNumber(atCmd + 2);
249 | } else if( !strncasecmp(atCmd, "H0", 2) ) {
250 | // hang up call
251 | atCmd = hangup(atCmd + 2);
252 | } else if( !strncasecmp(atCmd, "H", 1) && !isDigit(atCmd[1]) ) {
253 | // hang up call
254 | atCmd = hangup(atCmd + 1);
255 | } else if( !strncasecmp(atCmd, "&Z", 2) && isDigit(atCmd[2]) ) {
256 | // speed dial query or set
257 | atCmd = doSpeedDialSlot(atCmd + 2);
258 | } else if( !strncasecmp(atCmd, "L", 1) ) {
259 | // query/set speaker volume
260 | atCmd = doSpeakerVolume(atCmd + 1);
261 | } else if( !strncasecmp(atCmd, "M", 1) ) {
262 | // turn speaker on/off
263 | atCmd = doSpeaker(atCmd + 1);
264 | } else if( !strncasecmp(atCmd, "O", 1) ) {
265 | // go online
266 | atCmd = goOnline(atCmd + 1);
267 | } else if( !strncasecmp(atCmd, "GET", 3) ) {
268 | // get a web page (http only, no https)
269 | atCmd = httpGet(atCmd + 3);
270 | } else if( settings.listenPort && !strncasecmp(atCmd, "A", 1) && tcpServer.hasClient() ) {
271 | // manually answer incoming connection
272 | atCmd = answerCall(atCmd + 1);
273 | } else if( !strncasecmp(atCmd, "S0", 2) ) {
274 | // query/set auto answer
275 | atCmd = doAutoAnswerConfig(atCmd + 2);
276 | } else if( !strncasecmp(atCmd, "S2", 2) ) {
277 | // query/set escape character
278 | atCmd = doEscapeCharConfig(atCmd + 2);
279 | } else if( !strncasecmp(atCmd, "$SP", 3) ) {
280 | // query set inbound TCP port
281 | atCmd = doServerPort(atCmd + 3);
282 | } else if( !strncasecmp(atCmd, "$BM", 3) ) {
283 | // query/set busy message
284 | atCmd = doBusyMessage(atCmd + 3);
285 | } else if( !strncasecmp(atCmd, "&R", 2) ) {
286 | // query/set require password
287 | atCmd = doServerPassword(atCmd + 2);
288 | } else if( !strncasecmp(atCmd, "I", 1) ) {
289 | // show network information
290 | atCmd = showNetworkInfo(atCmd + 1);
291 | } else if( !strncasecmp(atCmd, "Z", 1) ) {
292 | // reset to NVRAM
293 | atCmd = resetToNvram(atCmd + 1);
294 | } else if( !strncasecmp(atCmd, "&D", 2) ) {
295 | //query/set DTR handling
296 | atCmd = doDtrHandling(atCmd + 2);
297 | } else if( !strncasecmp(atCmd, "&V", 2) ) {
298 | // display current and stored settings
299 | atCmd = displayAllSettings(atCmd + 2);
300 | } else if( !strncasecmp(atCmd, "&W", 2) ) {
301 | // write settings to EEPROM
302 | atCmd = updateNvram(atCmd + 2);
303 | } else if( !strncasecmp(atCmd, "&F", 2) ) {
304 | // factory defaults
305 | atCmd = factoryDefaults(atCmd);
306 | } else if( !strncasecmp(atCmd, "E", 1) ) {
307 | // query/set command mode echo
308 | atCmd = doEcho(atCmd + 1);
309 | } else if( !strncasecmp(atCmd, "Q", 1) ) {
310 | // query/set quiet mode
311 | atCmd = doQuiet(atCmd + 1);
312 | } else if( !strncasecmp(atCmd, "RD", 2)
313 | || !strncasecmp(atCmd, "RT", 2) ) {
314 | // read time and date
315 | atCmd = doDateTime(atCmd + 2);
316 | } else if( !strncasecmp(atCmd, "V", 1) ) {
317 | // query/set verbose mode
318 | atCmd = doVerbose(atCmd + 1);
319 | } else if( !strncasecmp(atCmd, "X", 1) ) {
320 | // query/set extended result codes
321 | atCmd = doExtended(atCmd + 1);
322 | } else if( !strncasecmp(atCmd, "$W", 2) ) {
323 | // query/set startup wait
324 | atCmd = doStartupWait(atCmd + 2);
325 | } else if( !strncasecmp(atCmd, "NET", 3) ) {
326 | // query/set telnet mode
327 | atCmd = doTelnetMode(atCmd + 3);
328 | } else if( !strncasecmp(atCmd, "$AE", 3) ) {
329 | // do auto execute commands
330 | atCmd = doAutoExecute(atCmd + 3);
331 | } else if( !strncasecmp(atCmd, "$TTY", 4) ) {
332 | // do telnet terminal type
333 | atCmd = doTerminalType(atCmd + 4);
334 | } else if( !strncasecmp(atCmd, "$TTL", 4) ) {
335 | // do telnet location
336 | atCmd = doLocation(atCmd + 4);
337 | } else if( !strncasecmp(atCmd, "$TTS", 4) ) {
338 | // do telnet location
339 | atCmd = doWindowSize(atCmd + 4);
340 | } else if( !strncasecmp(atCmd, "&K", 2) ) {
341 | // do RTS/CTS flow control
342 | atCmd = doFlowControl(atCmd + 2);
343 | } else if( !strncasecmp(atCmd, "$MDNS", 5) ) {
344 | // handle mDNS name
345 | atCmd = doMdnsName(atCmd + 5);
346 | } else {
347 | // unrecognized command
348 | sendResult(R_ERROR);
349 | }
350 | trim(atCmd);
351 | }
352 | }
353 | }
354 | }
355 | }
356 |
--------------------------------------------------------------------------------
/RetroWiFiModem/at_extended.h:
--------------------------------------------------------------------------------
1 | //
2 | // AT&F reset NVRAM to defaults and load them into current settings
3 | //
4 | char *factoryDefaults(char *atCmd) {
5 | settings.magicNumber = MAGIC_NUMBER;
6 | settings.ssid[0] = NUL;
7 | settings.wifiPassword[0] = NUL;
8 | settings.serialSpeed = DEFAULT_SPEED;
9 | settings.dataBits = 8;
10 | settings.parity = 'N';
11 | settings.stopBits = 1;
12 | settings.rtsCts = false;
13 | settings.width = 80;
14 | settings.height = 24;
15 | settings.escChar = ESC_CHAR;
16 | for( int i=0; i < SPEED_DIAL_SLOTS; ++i ) {
17 | settings.alias[i][0] = NUL;
18 | settings.speedDial[i][0] = NUL;
19 | }
20 | strcpy(settings.mdnsName, "espmodem");
21 | settings.autoAnswer = 0;
22 | settings.listenPort = 0;
23 | strcpy(settings.busyMsg, "Sorry, the system is currently busy. Please try again later.");
24 | settings.serverPassword[0] = NUL;
25 | settings.echo = true;
26 | settings.telnet = REAL_TELNET;
27 | settings.autoExecute[0] = NUL;
28 | strcpy(settings.terminal, "ansi");
29 | strcpy(settings.location, "Computer Room");
30 | settings.startupWait = false;
31 | settings.extendedCodes = true;
32 | settings.verbose = true;
33 | settings.quiet = false;
34 |
35 | strcpy(settings.alias[0], "particles");
36 | strcpy(settings.speedDial[0], "+particlesbbs.dyndns.org:6400");
37 | strcpy(settings.alias[1], "altair");
38 | strcpy(settings.speedDial[1], "altair.virtualaltair.com:4667");
39 | strcpy(settings.alias[2], "heatwave");
40 | strcpy(settings.speedDial[2], "heatwave.ddns.net:9640");
41 |
42 | EEPROM.put(0, settings);
43 | EEPROM.commit();
44 | if( WiFi.status() == WL_CONNECTED ) {
45 | WiFi.disconnect();
46 | }
47 |
48 | if( atCmd ) {
49 | atCmd += 2;
50 | if( !atCmd[0] ) {
51 | sendResult(R_OK);
52 | }
53 | }
54 | return atCmd;
55 | }
56 |
57 | //
58 | // AT&D? DTR handling setting
59 | // AT&D0 ignore DTR
60 | // AT&D1 go offline when DTR transitions to off
61 | // AT&D2 hang up when DTR transitions to off
62 | // AT&D3 reset when DTR transitions to off
63 | //
64 | char *doDtrHandling(char *atCmd) {
65 | if( settings.dtrHandling != DTR_IGNORE ) {
66 | detachInterrupt( digitalPinToInterrupt(DTR) );
67 | }
68 | switch( atCmd[0] ) {
69 | case '?':
70 | ++atCmd;
71 | printf("%u\r\n", (uint8_t)settings.dtrHandling);
72 | if( !atCmd[0] ) {
73 | sendResult(R_OK);
74 | }
75 | break;
76 | case NUL:
77 | case '0':
78 | case '1':
79 | case '2':
80 | case '3':
81 | switch( atCmd[0] ) {
82 | case NUL:
83 | case '0':
84 | settings.dtrHandling = DTR_IGNORE;
85 | break;
86 | case '1':
87 | settings.dtrHandling = DTR_GOTO_COMMAND;
88 | break;
89 | case '2':
90 | settings.dtrHandling = DTR_END_CALL;
91 | break;
92 | case '3':
93 | settings.dtrHandling = DTR_RESET;
94 | break;
95 | }
96 | if( settings.dtrHandling != DTR_IGNORE ) {
97 | attachInterrupt( digitalPinToInterrupt(DTR), dtrIrq, RISING );
98 | }
99 | if( atCmd[0] ) {
100 | ++atCmd;
101 | }
102 | if( !atCmd[0] ) {
103 | sendResult(R_OK);
104 | }
105 | break;
106 | default:
107 | sendResult(R_ERROR);
108 | break;
109 | }
110 | return atCmd;
111 | }
112 |
113 | //
114 | // AT&K? query flow control setting
115 | // AT&K0 disable RTS/CTS flow control
116 | // AT&K1 enable RTS/CTS flow control
117 | //
118 | char *doFlowControl(char *atCmd) {
119 | switch( atCmd[0] ) {
120 | case '?':
121 | ++atCmd;
122 | Serial.println(settings.rtsCts);
123 | if( !atCmd[0] ) {
124 | sendResult(R_OK);
125 | }
126 | break;
127 | case '0':
128 | case '1':
129 | case NUL:
130 | settings.rtsCts = atCmd[0] == '1';
131 | if( atCmd[0] ) {
132 | ++atCmd;
133 | }
134 | if( !atCmd[0] ) {
135 | sendResult(R_OK);
136 | }
137 | break;
138 | default:
139 | sendResult(R_ERROR);
140 | break;
141 | }
142 | return atCmd;
143 | }
144 |
145 | //
146 | // AT&R? query incoming password
147 | // AT&R=set incoming password
148 | //
149 | char *doServerPassword(char *atCmd) {
150 | switch( atCmd[0] ) {
151 | case '?':
152 | ++atCmd;
153 | Serial.println(settings.serverPassword);
154 | if( !atCmd[0] ) {
155 | sendResult(R_OK);
156 | }
157 | break;
158 | case '=':
159 | ++atCmd;
160 | strncpy(settings.serverPassword, atCmd, MAX_PWD_LEN);
161 | settings.serverPassword[MAX_PWD_LEN] = NUL;
162 | atCmd[0] = NUL;
163 | sendResult(R_OK);
164 | break;
165 | default:
166 | sendResult(R_ERROR);
167 | break;
168 | }
169 | return atCmd;
170 | }
171 |
172 | //
173 | // AT&V display current settings
174 | // AT&V0 display current settings
175 | // AT&V1 display NVRAM settings
176 | //
177 | char *displayAllSettings(char* atCmd) {
178 | switch( atCmd[0]) {
179 | case '0':
180 | ++atCmd;
181 | case NUL:
182 | displayCurrentSettings();
183 | if( !atCmd[0] ) {
184 | sendResult(R_OK);
185 | }
186 | break;
187 | case '1':
188 | ++atCmd;
189 | displayStoredSettings();
190 | if( !atCmd[0] ) {
191 | sendResult(R_OK);
192 | }
193 | break;
194 | default:
195 | sendResult(R_ERROR);
196 | break;
197 | }
198 | return atCmd;
199 | }
200 |
201 | //
202 | // AT&W: update NVRAM from current settings
203 | //
204 | char *updateNvram(char *atCmd) {
205 | EEPROM.put(0, settings);
206 | if( EEPROM.commit() ) {
207 | if( !atCmd[0] ) {
208 | sendResult(R_OK);
209 | }
210 | } else {
211 | sendResult(R_ERROR);
212 | }
213 | return atCmd;
214 | }
215 |
216 | //
217 | // AT&Zn? show contents of speed dial slot n
218 | // AT&Zn=host,alias set speed dial slot n
219 | //
220 | char *doSpeedDialSlot(char *atCmd) {
221 | int slot;
222 |
223 | if( isDigit(atCmd[0]) ) {
224 | slot = atCmd[0] - '0';
225 | ++atCmd;
226 | switch( atCmd[0] ) {
227 | case '?':
228 | ++atCmd;
229 | if( settings.speedDial[slot][0] ) {
230 | Serial.printf("%s,%s\r\n",
231 | settings.speedDial[slot], settings.alias[slot]);
232 | if( !atCmd[0] ) {
233 | sendResult(R_OK);
234 | }
235 | } else {
236 | sendResult(R_ERROR);
237 | }
238 | break;
239 | case '=':
240 | ++atCmd;
241 | if( !atCmd[0] ) {
242 | // erase slot
243 | settings.speedDial[slot][0] = NUL;
244 | settings.alias[slot][0] = NUL;
245 | sendResult(R_OK);
246 | } else {
247 | char *comma = strchr(atCmd, ',');
248 | if( !comma ) {
249 | sendResult(R_ERROR);
250 | } else {
251 | *comma++ = NUL;
252 | strncpy(settings.speedDial[slot], atCmd, MAX_SPEED_DIAL_LEN);
253 | settings.speedDial[slot][MAX_SPEED_DIAL_LEN] = NUL;
254 | strncpy(settings.alias[slot], comma, MAX_ALIAS_LEN);
255 | settings.alias[slot][MAX_ALIAS_LEN] = NUL;
256 | atCmd[0] = NUL;
257 | sendResult(R_OK);
258 | }
259 | }
260 | break;
261 | default:
262 | sendResult(R_ERROR);
263 | break;
264 | }
265 | } else {
266 | sendResult(R_ERROR);
267 | }
268 | return atCmd;
269 | }
270 |
--------------------------------------------------------------------------------
/RetroWiFiModem/at_proprietary.h:
--------------------------------------------------------------------------------
1 | //
2 | // AT$AE? query auto execute command string
3 | // AT$AE=auto execute command string
4 | //
5 | char *doAutoExecute(char *atCmd) {
6 | switch( atCmd[0] ) {
7 | case '?':
8 | ++atCmd;
9 | Serial.println(settings.autoExecute);
10 | if( !atCmd[0] ) {
11 | sendResult(R_OK);
12 | }
13 | break;
14 | case '=':
15 | ++atCmd;
16 | strncpy(settings.autoExecute, atCmd, MAX_AUTOEXEC_LEN);
17 | settings.busyMsg[MAX_AUTOEXEC_LEN] = NUL;
18 | atCmd[0] = NUL;
19 | sendResult(R_OK);
20 | break;
21 | default:
22 | sendResult(R_ERROR);
23 | break;
24 | }
25 | return atCmd;
26 | }
27 |
28 | //
29 | // AT$AYT send "Are you there?" if in a Telnet session
30 | //
31 | char *doAreYouThere(char *atCmd) {
32 |
33 | if( tcpClient.connected() && settings.telnet != NO_TELNET ) {
34 | state = ONLINE;
35 | dtrWentInactive = false;
36 | bytesOut += tcpClient.write(IAC);
37 | bytesOut += tcpClient.write(AYT);
38 | } else {
39 | sendResult(R_ERROR);
40 | }
41 | return atCmd;
42 | }
43 |
44 | //
45 | // AT$BM? query busy message
46 | // AT$BM=busy message set busy message
47 | //
48 | char *doBusyMessage(char *atCmd) {
49 | switch( atCmd[0] ) {
50 | case '?':
51 | ++atCmd;
52 | Serial.println(settings.busyMsg);
53 | if( !atCmd[0] ) {
54 | sendResult(R_OK);
55 | }
56 | break;
57 | case '=':
58 | ++atCmd;
59 | strncpy(settings.busyMsg, atCmd, MAX_BUSYMSG_LEN);
60 | settings.busyMsg[MAX_BUSYMSG_LEN] = NUL;
61 | atCmd[0] = NUL;
62 | sendResult(R_OK);
63 | break;
64 | default:
65 | sendResult(R_ERROR);
66 | break;
67 | }
68 | return atCmd;
69 | }
70 |
71 | //
72 | // AT$MDNS? query mDNS network name
73 | // AT$MDNS=mdnsname set mDNS network name
74 | //
75 | char *doMdnsName(char *atCmd) {
76 | switch( atCmd[0] ) {
77 | case '?':
78 | ++atCmd;
79 | Serial.println(settings.mdnsName);
80 | if( !atCmd[0] ) {
81 | sendResult(R_OK);
82 | }
83 | break;
84 |
85 | case '=':
86 | ++atCmd;
87 | strncpy(settings.mdnsName , atCmd, MAX_MDNSNAME_LEN);
88 | settings.mdnsName[MAX_MDNSNAME_LEN] = NUL;
89 | atCmd[0] = NUL;
90 | sendResult(R_OK);
91 | break;
92 |
93 | default:
94 | sendResult(R_ERROR);
95 | lastCmd[0] = NUL;
96 | break;
97 | }
98 | return atCmd;
99 | }
100 |
101 | //
102 | // AT$PASS? query WiFi password
103 | // AT$PASS=password set WiFi password
104 | //
105 | char *doWiFiPassword(char *atCmd) {
106 | switch( atCmd[0] ) {
107 | case '?':
108 | ++atCmd;
109 | Serial.println(settings.wifiPassword);
110 | if( !atCmd[0] ) {
111 | sendResult(R_OK);
112 | }
113 | break;
114 | case '=':
115 | ++atCmd;
116 | strncpy(settings.wifiPassword, atCmd, MAX_WIFI_PWD_LEN);
117 | settings.wifiPassword[MAX_WIFI_PWD_LEN] = NUL;
118 | atCmd[0] = NUL;
119 | sendResult(R_OK);
120 | break;
121 | default:
122 | sendResult(R_ERROR);
123 | break;
124 | }
125 | return atCmd;
126 | }
127 |
128 | //
129 | // AT$SB? query serial speed
130 | // AT$SB=n set serial speed
131 | //
132 | char *doSpeedChange(char *atCmd) {
133 | uint32_t newSerialSpeed;
134 |
135 | switch( atCmd[0] ) {
136 | case '?':
137 | ++atCmd;
138 | Serial.println(settings.serialSpeed);
139 | if( !atCmd[0] ) {
140 | sendResult(R_OK);
141 | }
142 | break;
143 | case '=':
144 | ++atCmd;
145 | newSerialSpeed = atol(atCmd);
146 | while( isdigit(*atCmd) ) {
147 | ++atCmd;
148 | }
149 | if( newSerialSpeed != settings.serialSpeed ) {
150 | switch( newSerialSpeed ) {
151 | case 110L: // 110 thru 76.8K are the
152 | case 300L: // standard 'BYE' rates, if
153 | case 450L: // you're wondering why
154 | case 600L: // unusual rates like 110, 450
155 | case 710L: // and 710 are in this list
156 | case 1200L:
157 | case 2400L:
158 | case 4800L:
159 | case 9600L:
160 | case 19200L:
161 | case 38400L:
162 | case 57600L:
163 | case 76800L:
164 | case 115200L:
165 | sendResult(R_OK);
166 | Serial.flush(); // wait for transmit to finish
167 | digitalWrite(TXEN, HIGH); // disable the TX output
168 | Serial.updateBaudRate(newSerialSpeed);
169 | settings.serialSpeed = newSerialSpeed;
170 | digitalWrite(TXEN, LOW); // reenable the TX output
171 | break;
172 |
173 | default:
174 | sendResult(R_ERROR);
175 | break;
176 | }
177 | } else {
178 | sendResult(R_OK);
179 | }
180 | break;
181 | default:
182 | sendResult(R_ERROR);
183 | break;
184 | }
185 | return atCmd;
186 | }
187 |
188 | //
189 | // AT$SP? query inbound TCP port #
190 | // AT$SP=n set inbound TCP port #
191 | // NOTE: n=0 will disable the inbound TCP port
192 | // and a RING message will never be displayed
193 | //
194 | char *doServerPort(char *atCmd) {
195 | switch( atCmd[0] ) {
196 | case '?':
197 | ++atCmd;
198 | Serial.println(settings.listenPort);
199 | if( !atCmd[0] ) {
200 | sendResult(R_OK);
201 | }
202 | break;
203 | case '=':
204 | ++atCmd;
205 | settings.listenPort = atoi(atCmd);
206 | while( isDigit(atCmd[0]) ) {
207 | ++atCmd;
208 | }
209 | if( !atCmd[0] ) {
210 | sendResult(R_OK);
211 | }
212 | break;
213 | default:
214 | sendResult(R_ERROR);
215 | break;
216 | }
217 | return atCmd;
218 | }
219 |
220 | //
221 | // AT$SSID? query WiFi SSID
222 | // AT$SSID=ssid set WiFi SSID
223 | //
224 | char *doSSID(char *atCmd) {
225 | switch( atCmd[0] ) {
226 | case '?':
227 | ++atCmd;
228 | Serial.println(settings.ssid);
229 | if( !atCmd[0] ) {
230 | sendResult(R_OK);
231 | }
232 | break;
233 | case '=':
234 | ++atCmd;
235 | strncpy(settings.ssid, atCmd, MAX_SSID_LEN);
236 | settings.ssid[MAX_SSID_LEN] = NUL;
237 | atCmd[0] = NUL;
238 | sendResult(R_OK);
239 | break;
240 | default:
241 | sendResult(R_ERROR);
242 | break;
243 | }
244 | return atCmd;
245 | }
246 |
247 | //
248 | // AT$SU? query data configuration
249 | // AT$SU=nps set data configuration
250 | // n=7/8 data bits
251 | // p=N/E/O parity
252 | // s=1/2 stop bits
253 | //
254 | char *doDataConfig(char *atCmd) {
255 | bool ok = true;
256 | switch( atCmd[0] ) {
257 | case '?':
258 | ++atCmd;
259 | Serial.printf("%u%c%u\r\n",
260 | settings.dataBits,
261 | settings.parity,
262 | settings.stopBits);
263 | if( !atCmd[0] ) {
264 | sendResult(R_OK);
265 | }
266 | break;
267 | case '=':
268 | switch( atCmd[1] ) {
269 | case '5':
270 | case '6':
271 | case '7':
272 | case '8':
273 | break;
274 | default:
275 | ok = false;
276 | break;
277 | }
278 | switch( toupper(atCmd[2]) ) {
279 | case 'N':
280 | case 'O':
281 | case 'E':
282 | break;
283 | default:
284 | ok = false;
285 | break;
286 | }
287 | switch( atCmd[3] ) {
288 | case '1':
289 | case '2':
290 | break;
291 | default:
292 | ok = false;
293 | break;
294 | }
295 | if( ok ) {
296 | settings.dataBits = atCmd[1] - '0';
297 | settings.parity = toupper(atCmd[2]);
298 | settings.stopBits = atCmd[3] - '0';
299 | atCmd += 4; // skip over =dps
300 | if( !atCmd[0] ) {
301 | sendResult(R_OK);
302 | }
303 | } else {
304 | sendResult(R_ERROR);
305 | }
306 | break;
307 | default:
308 | sendResult(R_ERROR);
309 | break;
310 | }
311 | return atCmd;
312 | }
313 |
314 | //
315 | // AT$TTL? query Telnet location
316 | // AT$TTL=location set Telnet location
317 | //
318 | char *doLocation(char *atCmd) {
319 | switch( atCmd[0] ) {
320 | case '?':
321 | ++atCmd;
322 | Serial.println(settings.location);
323 | if( !atCmd[0] ) {
324 | sendResult(R_OK);
325 | }
326 | break;
327 | case '=':
328 | ++atCmd;
329 | strncpy(settings.location, atCmd, MAX_LOCATION_LEN);
330 | settings.location[MAX_LOCATION_LEN] = NUL;
331 | atCmd[0] = NUL;
332 | sendResult(R_OK);
333 | break;
334 | default:
335 | sendResult(R_ERROR);
336 | break;
337 | }
338 | return atCmd;
339 | }
340 |
341 | //
342 | // AT$TTS? query Telnet window size
343 | // AT$TTS=WxH set Telnet window size (width x height)
344 | //
345 | char *doWindowSize(char *atCmd) {
346 | switch( atCmd[0] ) {
347 | case '?':
348 | ++atCmd;
349 | Serial.printf("%ux%u\r\n", settings.width, settings.height);
350 | if( !atCmd[0] ) {
351 | sendResult(R_OK);
352 | }
353 | break;
354 | case '=':
355 | {
356 | char *width = atCmd + 1;
357 | char *height = strpbrk(width, "xX");
358 | if( !width || !height ) {
359 | sendResult(R_ERROR);
360 | } else {
361 | ++height; // point to 1st char past X
362 | settings.width = atoi(width);
363 | settings.height = atoi(height);
364 | atCmd = height;
365 | while( isDigit(atCmd[0]) ) {
366 | ++atCmd;
367 | }
368 | if( !atCmd[0] ) {
369 | sendResult(R_OK);
370 | }
371 | }
372 | }
373 | break;
374 | default:
375 | sendResult(R_ERROR);
376 | break;
377 | }
378 | return atCmd;
379 | }
380 |
381 | //
382 | // AT$TTY? query Telnet terminal type
383 | // AT$TTY=terminal set Telnet terminal type
384 | //
385 | char *doTerminalType(char *atCmd) {
386 | switch( atCmd[0] ) {
387 | case '?':
388 | ++atCmd;
389 | Serial.println(settings.terminal);
390 | if( !atCmd[0] ) {
391 | sendResult(R_OK);
392 | }
393 | break;
394 | case '=':
395 | ++atCmd;
396 | strncpy(settings.terminal, atCmd, MAX_TERMINAL_LEN);
397 | settings.location[MAX_TERMINAL_LEN] = NUL;
398 | atCmd[0] = NUL;
399 | sendResult(R_OK);
400 | break;
401 | default:
402 | sendResult(R_ERROR);
403 | break;
404 | }
405 | return atCmd;
406 | }
407 |
408 | //
409 | // AT$W? query startup wait status
410 | // AT$W=0 disable startup wait
411 | // AT$W=1 enable startup wait (wait for a CR on startup)
412 | //
413 | char *doStartupWait(char *atCmd) {
414 | switch( atCmd[0] ) {
415 | case '?':
416 | ++atCmd;
417 | Serial.println(settings.startupWait);
418 | if( !atCmd[0] ) {
419 | sendResult(R_OK);
420 | }
421 | break;
422 | case '=':
423 | ++atCmd;
424 | switch( atCmd[0] ) {
425 | case '0':
426 | case '1':
427 | settings.startupWait = atCmd[0] == '1';
428 | atCmd[0] = NUL;
429 | sendResult(R_OK);
430 | break;
431 | default:
432 | sendResult(R_ERROR);
433 | break;
434 | }
435 | break;
436 | default:
437 | sendResult(R_ERROR);
438 | break;
439 | }
440 | return atCmd;
441 | }
442 |
--------------------------------------------------------------------------------
/RetroWiFiModem/globals.h:
--------------------------------------------------------------------------------
1 | #ifndef _GLOBALS_H
2 | #define _GLOBALS_H
3 |
4 | // globals
5 | const char okStr[] PROGMEM = {"OK"};
6 | const char connectStr[] PROGMEM = {"CONNECT"};
7 | const char ringStr[] PROGMEM = {"RING"};
8 | const char noCarrierStr[] PROGMEM = {"NO CARRIER"};
9 | const char errorStr[] PROGMEM = {"ERROR"};
10 | const char noAnswerStr[] PROGMEM = {"NO ANSWER"};
11 | enum ResultCodes { R_OK, R_CONNECT, R_RING, R_NO_CARRIER, R_ERROR, R_NO_ANSWER, R_RING_IP };
12 | const char * const resultCodes[] PROGMEM = { okStr, connectStr, ringStr, noCarrierStr, errorStr, noAnswerStr, ringStr};
13 | enum DtrStates { DTR_IGNORE, DTR_GOTO_COMMAND, DTR_END_CALL, DTR_RESET};
14 |
15 | WiFiClient tcpClient;
16 | uint32_t bytesIn = 0, bytesOut = 0;
17 | unsigned long connectTime = 0;
18 |
19 | WiFiServer tcpServer(0);
20 |
21 | struct Settings {
22 | uint16_t magicNumber;
23 | char ssid[MAX_SSID_LEN + 1];
24 | char wifiPassword[MAX_WIFI_PWD_LEN + 1];
25 | uint32_t serialSpeed;
26 | uint8_t dataBits;
27 | char parity;
28 | uint8_t stopBits;
29 | bool rtsCts;
30 | uint8_t width, height;
31 | char escChar;
32 | char alias[SPEED_DIAL_SLOTS][MAX_ALIAS_LEN + 1];
33 | char speedDial[SPEED_DIAL_SLOTS][MAX_SPEED_DIAL_LEN + 1];
34 | char mdnsName[MAX_MDNSNAME_LEN + 1];
35 | uint8_t autoAnswer;
36 | uint16_t listenPort;
37 | char busyMsg[MAX_BUSYMSG_LEN + 1];
38 | char serverPassword[MAX_PWD_LEN + 1];
39 | bool echo;
40 | uint8_t telnet;
41 | char autoExecute[MAX_AUTOEXEC_LEN + 1];
42 | char terminal[MAX_TERMINAL_LEN + 1];
43 | char location[MAX_LOCATION_LEN + 1];
44 | bool startupWait;
45 | bool extendedCodes;
46 | bool verbose;
47 | bool quiet;
48 | DtrStates dtrHandling;
49 | bool speaker;
50 | uint8_t volume;
51 | } settings;
52 |
53 | char atCmd[MAX_CMD_LEN + 1], lastCmd[MAX_CMD_LEN + 1];
54 | unsigned atCmdLen = 0;
55 |
56 | enum {CMD_NOT_IN_CALL, CMD_IN_CALL, ONLINE, PASSWORD} state = CMD_NOT_IN_CALL;
57 |
58 | bool ringing = false; // no incoming call
59 | uint8_t ringCount = 0; // current incoming call ring count
60 | uint32_t lastRingMs = 0; // time of last RING result
61 | uint8_t escCount = 0; // Go to AT mode at "+++" sequence, that has to be counted
62 | uint32_t startGuardTime = 0; // When did we last receive a "+++" sequence
63 | char password[MAX_PWD_LEN + 1];
64 | uint8_t passwordTries = 0; // # of unsuccessful tries at incoming password
65 | uint8_t passwordLen = 0;
66 | uint8_t txBuf[TX_BUF_SIZE]; // Transmit Buffer
67 | uint8_t sessionTelnetType;
68 | volatile bool dtrWentInactive = false;
69 | bool amClient = true; // true if we've dialled out, rather than been dialled into
70 | #endif
71 |
--------------------------------------------------------------------------------
/RetroWiFiModem/player.h:
--------------------------------------------------------------------------------
1 | uint8_t playerVolume = 3;
2 |
3 | typedef struct {
4 | uint8_t header;
5 | uint8_t version;
6 | uint8_t length;
7 | uint8_t command;
8 | uint8_t ack;
9 | uint8_t param[2];
10 | uint8_t checksum[2];
11 | uint8_t end;
12 | } T_DFCMD;
13 |
14 | T_DFCMD playTrack = {0x7E, 0xFF, 0x06, 0x03, 0x00, {0,0}, {0,0}, 0xEF};
15 | T_DFCMD setVolume = {0x7E, 0xFF, 0x06, 0x06, 0x00, {0,0}, {0,0}, 0xEF};
16 |
17 | void playerInit(void) {
18 | Serial1.begin(9600);
19 | pinMode(BUSY, INPUT);
20 | }
21 |
22 | bool playerIsBusy(void) {
23 | return !digitalRead(BUSY);
24 | }
25 |
26 | // waits while the busy signal is low or timeout
27 | void playerBusy(uint16_t pause) {
28 | uint32_t startTime = millis();
29 | bool busyWentActive = false;
30 |
31 | while( playerIsBusy() || millis() - startTime < pause ) {
32 | if( !busyWentActive && playerIsBusy() ) {
33 | busyWentActive = true;
34 | }
35 | if( busyWentActive && !playerIsBusy() ) {
36 | break;
37 | }
38 | yield();
39 | }
40 | }
41 |
42 | void playerChecksum(T_DFCMD *cmd) {
43 | int16_t sum;
44 |
45 | sum = cmd->version + cmd->length + cmd->command
46 | + cmd->ack + cmd->param[0] + cmd->param[1];
47 | sum = -sum;
48 | cmd->checksum[0] = (uint8_t)(sum >> 8);
49 | cmd->checksum[1] = (uint8_t)(sum & 0xFF);
50 | }
51 |
52 | // Set volume
53 | void playerSetVolume(uint8_t volume) {
54 | uint8_t val;
55 |
56 | playerVolume = volume;
57 | switch( volume ) {
58 | case 0:
59 | val = 0;
60 | break;
61 | case 1:
62 | val = 20;
63 | break;
64 | case 2:
65 | val = 25;
66 | break;
67 | default:
68 | val = 30;
69 | break;
70 | }
71 | setVolume.param[1] = val;
72 | playerChecksum(&setVolume);
73 | Serial1.write((uint8_t *)&setVolume, sizeof setVolume);
74 | }
75 |
76 | // Play sound asynchronously
77 | void playSoundAsync(uint16_t trackNumber) {
78 | playTrack.param[0] = trackNumber >> 8;
79 | playTrack.param[1] = trackNumber & 0xFF;
80 | playerChecksum(&playTrack);
81 | Serial1.write((uint8_t *)&playTrack, sizeof playTrack);
82 | }
83 |
84 |
85 | // Play sound and block until it finishes
86 | void playSound(uint16_t trackNumber) {
87 | playTrack.param[0] = trackNumber >> 8;
88 | playTrack.param[1] = trackNumber & 0xFF;
89 | playerChecksum(&playTrack);
90 | Serial1.write((uint8_t *)&playTrack, sizeof playTrack);
91 | // Wait till sound ends
92 | playerBusy(750);
93 | }
94 |
95 | // Mute sound - same as setVolume(0)
96 | void playerMute(void) {
97 | uint8_t saveVolume = playerVolume;
98 | playerSetVolume(0);
99 | playerVolume = saveVolume;
100 | }
101 |
102 | // Unmute sound restoring the previous volume
103 | void playerUnmute(void) {
104 | playerSetVolume(playerVolume);
105 | }
106 |
--------------------------------------------------------------------------------
/bin/RetroWiFiModem.d1r2_or_d1mini.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/bin/RetroWiFiModem.d1r2_or_d1mini.bin
--------------------------------------------------------------------------------
/case/back_panel.scad:
--------------------------------------------------------------------------------
1 | $fn=64;
2 | eps = 0.04;
3 | inch = 25.4;
4 |
5 | panel_x = 68.76;
6 | panel_y = 19.84;
7 | panel_z = 1.5;
8 | panel_r = 0.05 * inch;
9 |
10 | barrel_x = 0.354*inch;
11 | barrel_y = 0.428*inch;
12 |
13 | module dsub(c,e,a)
14 | {
15 | r=3.35;
16 | h=3.96;
17 | md=3.05;
18 | hull() {
19 | translate([-c/2,h/2,0])
20 | circle(r=r);
21 | translate([c/2,h/2,0])
22 | circle(r=r);
23 | translate([-e/2,-h/2,0])
24 | circle(r=r);
25 | translate([e/2,-h/2,0])
26 | circle(r=r);
27 | }
28 | translate([-a/2,0,0])
29 | circle(d=md);
30 | translate([a/2,0,0])
31 | circle(d=md);
32 | }
33 |
34 | module dsub9() {
35 | dsub(c=13.77,e=12.01,a=24.99);
36 | }
37 |
38 | difference() {
39 | linear_extrude(height=panel_z) {
40 | hull() {
41 | translate([panel_r, panel_r, 0]) {
42 | circle(r=panel_r);
43 | }
44 | translate([panel_x-panel_r, panel_r, 0]) {
45 | circle(r=panel_r);
46 | }
47 | translate([panel_x-panel_r, panel_y-panel_r, 0]) {
48 | circle(r=panel_r);
49 | }
50 | translate([panel_r, panel_y-panel_r, 0]) {
51 | circle(r=panel_r);
52 | }
53 | }
54 | }
55 | translate([panel_x/2 - 12.015, panel_y/2, -eps] ) {
56 | linear_extrude(height=panel_z+2*eps) {
57 | dsub9();
58 | }
59 | }
60 | translate([panel_x/2+13.33,6.17+barrel_y/2,-eps]) {
61 | linear_extrude(height=panel_z+2*eps) {
62 | square([barrel_x, barrel_y],center=true);
63 | }
64 | }
65 | }
--------------------------------------------------------------------------------
/case/front_panel.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/case/front_panel.pdf
--------------------------------------------------------------------------------
/case/front_panel.scad:
--------------------------------------------------------------------------------
1 | $fn=64;
2 | eps = 0.04;
3 | inch = 25.4;
4 |
5 | panel_x = 68.76;
6 | panel_y = 19.84;
7 | panel_z = 1.5;
8 | panel_r = 0.05 * inch;
9 |
10 | lens_x = 2.363 * inch;
11 | lens_y = 0.592 * inch;
12 | lens_z = 0.062 * inch;
13 |
14 | bezel_x = 2.258 * inch;
15 | bezel_y = 0.487 * inch;
16 | bezel_r = 1/16 * inch;
17 |
18 | difference() {
19 | linear_extrude(height=panel_z) {
20 | hull() {
21 | translate([panel_r, panel_r, 0]) {
22 | circle(r=panel_r);
23 | }
24 | translate([panel_x-panel_r, panel_r, 0]) {
25 | circle(r=panel_r);
26 | }
27 | translate([panel_x-panel_r, panel_y-panel_r, 0]) {
28 | circle(r=panel_r);
29 | }
30 | translate([panel_r, panel_y-panel_r, 0]) {
31 | circle(r=panel_r);
32 | }
33 | }
34 | }
35 | translate([panel_x/2,panel_y-1.27-lens_y/2,0.4]) {
36 | linear_extrude(height=panel_z+2*eps) {
37 | square([lens_x+2*eps, lens_y+2*eps],center=true);
38 | }
39 | }
40 | translate([panel_x/2,panel_y-1.27-lens_y/2,-eps]) {
41 | linear_extrude(height=panel_z+2*eps) {
42 | hull() {
43 | translate([-bezel_x/2+bezel_r, -bezel_y/2+bezel_r, 0]) {
44 | circle(r=bezel_r);
45 | }
46 | translate([bezel_x/2-bezel_r, -bezel_y/2+bezel_r, 0]) {
47 | circle(r=bezel_r);
48 | }
49 | translate([bezel_x/2-bezel_r, bezel_y/2-bezel_r, 0]) {
50 | circle(r=bezel_r);
51 | }
52 | translate([-bezel_x/2+bezel_r, bezel_y/2-bezel_r, 0]) {
53 | circle(r=bezel_r);
54 | }
55 | }
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/images/Back panel.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/images/Back panel.jpg
--------------------------------------------------------------------------------
/images/Front Panel.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/images/Front Panel.jpg
--------------------------------------------------------------------------------
/images/Interior.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/images/Interior.jpg
--------------------------------------------------------------------------------
/images/Plugged in.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/images/Plugged in.jpg
--------------------------------------------------------------------------------
/images/Prototype.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/images/Prototype.jpg
--------------------------------------------------------------------------------
/images/RetroWiFiModem.sch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/images/RetroWiFiModem.sch.png
--------------------------------------------------------------------------------
/kicad/.gitignore:
--------------------------------------------------------------------------------
1 | # export files for BOM
2 | *.csv
3 | *.tsv
4 | *.xml
5 | # backup files
6 | *.bak
7 | *.bck
8 | #
9 | fp-info-cache
10 | *.zip
11 | *.7z
12 | output
13 | gerber
14 | rescue-backup
15 |
--------------------------------------------------------------------------------
/kicad/RetroWiFiModem-bom.csv:
--------------------------------------------------------------------------------
1 | Reference,Quantity, Value, DigiKey PN,BC-Robotics PN
2 | P1,1,CONN_02X05,ED1543-ND,
3 | U3,1,SN74HC32DR,296-1199-1-ND,
4 | U4,1,L4931CZ33-AP,LP2950ACZ-3.3GOS-ND,
5 | D3-D8,8,TLPR5600,TLPR5600-ND,
6 | "C1-C2,C4-C6,C8",6,100nF,399-9859-1-ND,
7 | C7,1,1uF,399-3529-ND,
8 | CON1,1,BARREL_JACK,839-54-00166-ND,
9 | R1,8,560R,CF18JT560RCT-ND,
10 | R9-R10,2,10K,CF18JT10K0CT-ND,
11 | U1,1,MAX3237ECDWR,296-36945-1-ND,
12 | U2,1,74HCT245D,74HCT245DCT-ND,
13 | C3,1,100nF,399-9859-1-ND,
14 | U5,1,WeMos_mini,,
15 | U6,1,DFPlayer_Mini,1738-1041-ND,
16 | LS1,1,Speaker,,AUD-013
17 | D9,1,1N4148,1N4148FS-ND,
18 | ,1,Hammond 1593NBK case,HM963-ND ,
19 | ,1,Hammond red panel,HM889-ND ,
20 | ,50,PCB screws,HM1442-ND,
21 | ,1,5V wall adapter,364-1251-ND ,
22 | ,1,DE-9F IDC connector,5746861-4-ND,
23 | ,2,4-40 hex standoffs,A104867-ND,
24 | ,4,8 pos machine pin socket,2057-SMC-1-08-1-GT-ND,
25 | ,1,10 pos IDC socket,1175-1443-ND ,
26 | ,1,10 cond ribbon cable,3M157815-1-ND,
27 |
--------------------------------------------------------------------------------
/kicad/RetroWiFiModem.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_nets": [],
7 | "high_contrast_mode": 0,
8 | "net_color_mode": 1,
9 | "opacity": {
10 | "pads": 1.0,
11 | "tracks": 1.0,
12 | "vias": 1.0,
13 | "zones": 0.6
14 | },
15 | "ratsnest_display_mode": 0,
16 | "selection_filter": {
17 | "dimensions": true,
18 | "footprints": true,
19 | "graphics": true,
20 | "keepouts": true,
21 | "lockedItems": true,
22 | "otherItems": true,
23 | "pads": true,
24 | "text": true,
25 | "tracks": true,
26 | "vias": true,
27 | "zones": true
28 | },
29 | "visible_items": [
30 | 0,
31 | 1,
32 | 2,
33 | 3,
34 | 4,
35 | 5,
36 | 6,
37 | 7,
38 | 8,
39 | 9,
40 | 10,
41 | 11,
42 | 12,
43 | 13,
44 | 14,
45 | 15,
46 | 16,
47 | 17,
48 | 18,
49 | 19,
50 | 20,
51 | 21,
52 | 22,
53 | 23,
54 | 24,
55 | 25,
56 | 26,
57 | 27,
58 | 28,
59 | 29,
60 | 30,
61 | 32,
62 | 33,
63 | 34,
64 | 35,
65 | 36
66 | ],
67 | "visible_layers": "fffffff_ffffffff",
68 | "zone_display_mode": 0
69 | },
70 | "meta": {
71 | "filename": "RetroWiFiModem.kicad_prl",
72 | "version": 3
73 | },
74 | "project": {
75 | "files": []
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/kicad/RetroWiFiModem.kicad_pro:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "design_settings": {
4 | "defaults": {
5 | "board_outline_line_width": 0.15,
6 | "copper_line_width": 0.19999999999999998,
7 | "copper_text_italic": false,
8 | "copper_text_size_h": 1.5,
9 | "copper_text_size_v": 1.5,
10 | "copper_text_thickness": 0.3,
11 | "copper_text_upright": false,
12 | "courtyard_line_width": 0.049999999999999996,
13 | "dimension_precision": 4,
14 | "dimension_units": 3,
15 | "dimensions": {
16 | "arrow_length": 1270000,
17 | "extension_offset": 500000,
18 | "keep_text_aligned": true,
19 | "suppress_zeroes": false,
20 | "text_position": 0,
21 | "units_format": 1
22 | },
23 | "fab_line_width": 0.09999999999999999,
24 | "fab_text_italic": false,
25 | "fab_text_size_h": 1.0,
26 | "fab_text_size_v": 1.0,
27 | "fab_text_thickness": 0.15,
28 | "fab_text_upright": false,
29 | "other_line_width": 0.09999999999999999,
30 | "other_text_italic": false,
31 | "other_text_size_h": 1.0,
32 | "other_text_size_v": 1.0,
33 | "other_text_thickness": 0.15,
34 | "other_text_upright": false,
35 | "pads": {
36 | "drill": 3.2,
37 | "height": 3.2,
38 | "width": 3.2
39 | },
40 | "silk_line_width": 0.15,
41 | "silk_text_italic": false,
42 | "silk_text_size_h": 1.0,
43 | "silk_text_size_v": 1.0,
44 | "silk_text_thickness": 0.15,
45 | "silk_text_upright": false,
46 | "zones": {
47 | "45_degree_only": false,
48 | "min_clearance": 0.508
49 | }
50 | },
51 | "diff_pair_dimensions": [],
52 | "drc_exclusions": [],
53 | "meta": {
54 | "filename": "board_design_settings.json",
55 | "version": 2
56 | },
57 | "rule_severities": {
58 | "annular_width": "error",
59 | "clearance": "error",
60 | "copper_edge_clearance": "error",
61 | "courtyards_overlap": "error",
62 | "diff_pair_gap_out_of_range": "error",
63 | "diff_pair_uncoupled_length_too_long": "error",
64 | "drill_out_of_range": "error",
65 | "duplicate_footprints": "warning",
66 | "extra_footprint": "warning",
67 | "footprint_type_mismatch": "error",
68 | "hole_clearance": "error",
69 | "hole_near_hole": "error",
70 | "invalid_outline": "error",
71 | "item_on_disabled_layer": "error",
72 | "items_not_allowed": "error",
73 | "length_out_of_range": "error",
74 | "malformed_courtyard": "error",
75 | "microvia_drill_out_of_range": "error",
76 | "missing_courtyard": "ignore",
77 | "missing_footprint": "warning",
78 | "net_conflict": "warning",
79 | "npth_inside_courtyard": "ignore",
80 | "padstack": "error",
81 | "pth_inside_courtyard": "ignore",
82 | "shorting_items": "error",
83 | "silk_over_copper": "warning",
84 | "silk_overlap": "warning",
85 | "skew_out_of_range": "error",
86 | "through_hole_pad_without_hole": "error",
87 | "too_many_vias": "error",
88 | "track_dangling": "warning",
89 | "track_width": "error",
90 | "tracks_crossing": "error",
91 | "unconnected_items": "error",
92 | "unresolved_variable": "error",
93 | "via_dangling": "warning",
94 | "zone_has_empty_net": "error",
95 | "zones_intersect": "error"
96 | },
97 | "rule_severitieslegacy_courtyards_overlap": true,
98 | "rule_severitieslegacy_no_courtyard_defined": false,
99 | "rules": {
100 | "allow_blind_buried_vias": false,
101 | "allow_microvias": false,
102 | "max_error": 0.005,
103 | "min_clearance": 0.0,
104 | "min_copper_edge_clearance": 0.075,
105 | "min_hole_clearance": 0.25,
106 | "min_hole_to_hole": 0.25,
107 | "min_microvia_diameter": 0.19999999999999998,
108 | "min_microvia_drill": 0.09999999999999999,
109 | "min_silk_clearance": 0.0,
110 | "min_through_hole_diameter": 0.3,
111 | "min_track_width": 0.19999999999999998,
112 | "min_via_annular_width": 0.049999999999999996,
113 | "min_via_diameter": 0.39999999999999997,
114 | "use_height_for_length_calcs": true
115 | },
116 | "track_widths": [],
117 | "via_dimensions": [
118 | {
119 | "diameter": 0.0,
120 | "drill": 0.0
121 | },
122 | {
123 | "diameter": 1.4,
124 | "drill": 0.8
125 | }
126 | ],
127 | "zones_allow_external_fillets": false,
128 | "zones_use_no_outline": true
129 | },
130 | "layer_presets": []
131 | },
132 | "boards": [],
133 | "cvpcb": {
134 | "equivalence_files": []
135 | },
136 | "erc": {
137 | "erc_exclusions": [],
138 | "meta": {
139 | "version": 0
140 | },
141 | "pin_map": [
142 | [
143 | 0,
144 | 0,
145 | 0,
146 | 0,
147 | 0,
148 | 0,
149 | 1,
150 | 0,
151 | 0,
152 | 0,
153 | 0,
154 | 2
155 | ],
156 | [
157 | 0,
158 | 2,
159 | 0,
160 | 1,
161 | 0,
162 | 0,
163 | 1,
164 | 0,
165 | 2,
166 | 2,
167 | 2,
168 | 2
169 | ],
170 | [
171 | 0,
172 | 0,
173 | 0,
174 | 0,
175 | 0,
176 | 0,
177 | 1,
178 | 0,
179 | 1,
180 | 0,
181 | 1,
182 | 2
183 | ],
184 | [
185 | 0,
186 | 1,
187 | 0,
188 | 0,
189 | 0,
190 | 0,
191 | 1,
192 | 1,
193 | 2,
194 | 1,
195 | 1,
196 | 2
197 | ],
198 | [
199 | 0,
200 | 0,
201 | 0,
202 | 0,
203 | 0,
204 | 0,
205 | 1,
206 | 0,
207 | 0,
208 | 0,
209 | 0,
210 | 2
211 | ],
212 | [
213 | 0,
214 | 0,
215 | 0,
216 | 0,
217 | 0,
218 | 0,
219 | 0,
220 | 0,
221 | 0,
222 | 0,
223 | 0,
224 | 2
225 | ],
226 | [
227 | 1,
228 | 1,
229 | 1,
230 | 1,
231 | 1,
232 | 0,
233 | 1,
234 | 1,
235 | 1,
236 | 1,
237 | 1,
238 | 2
239 | ],
240 | [
241 | 0,
242 | 0,
243 | 0,
244 | 1,
245 | 0,
246 | 0,
247 | 1,
248 | 0,
249 | 0,
250 | 0,
251 | 0,
252 | 2
253 | ],
254 | [
255 | 0,
256 | 2,
257 | 1,
258 | 2,
259 | 0,
260 | 0,
261 | 1,
262 | 0,
263 | 2,
264 | 2,
265 | 2,
266 | 2
267 | ],
268 | [
269 | 0,
270 | 2,
271 | 0,
272 | 1,
273 | 0,
274 | 0,
275 | 1,
276 | 0,
277 | 2,
278 | 0,
279 | 0,
280 | 2
281 | ],
282 | [
283 | 0,
284 | 2,
285 | 1,
286 | 1,
287 | 0,
288 | 0,
289 | 1,
290 | 0,
291 | 2,
292 | 0,
293 | 0,
294 | 2
295 | ],
296 | [
297 | 2,
298 | 2,
299 | 2,
300 | 2,
301 | 2,
302 | 2,
303 | 2,
304 | 2,
305 | 2,
306 | 2,
307 | 2,
308 | 2
309 | ]
310 | ],
311 | "rule_severities": {
312 | "bus_definition_conflict": "error",
313 | "bus_entry_needed": "error",
314 | "bus_label_syntax": "error",
315 | "bus_to_bus_conflict": "error",
316 | "bus_to_net_conflict": "error",
317 | "different_unit_footprint": "error",
318 | "different_unit_net": "error",
319 | "duplicate_reference": "error",
320 | "duplicate_sheet_names": "error",
321 | "extra_units": "error",
322 | "global_label_dangling": "warning",
323 | "hier_label_mismatch": "error",
324 | "label_dangling": "error",
325 | "lib_symbol_issues": "warning",
326 | "multiple_net_names": "warning",
327 | "net_not_bus_member": "warning",
328 | "no_connect_connected": "warning",
329 | "no_connect_dangling": "warning",
330 | "pin_not_connected": "error",
331 | "pin_not_driven": "error",
332 | "pin_to_pin": "warning",
333 | "power_pin_not_driven": "error",
334 | "similar_labels": "warning",
335 | "unannotated": "error",
336 | "unit_value_mismatch": "error",
337 | "unresolved_variable": "error",
338 | "wire_dangling": "error"
339 | }
340 | },
341 | "libraries": {
342 | "pinned_footprint_libs": [],
343 | "pinned_symbol_libs": []
344 | },
345 | "meta": {
346 | "filename": "RetroWiFiModem.kicad_pro",
347 | "version": 1
348 | },
349 | "net_settings": {
350 | "classes": [
351 | {
352 | "bus_width": 12.0,
353 | "clearance": 0.2,
354 | "diff_pair_gap": 0.25,
355 | "diff_pair_via_gap": 0.25,
356 | "diff_pair_width": 0.2,
357 | "line_style": 0,
358 | "microvia_diameter": 0.3,
359 | "microvia_drill": 0.1,
360 | "name": "Default",
361 | "pcb_color": "rgba(0, 0, 0, 0.000)",
362 | "schematic_color": "rgba(0, 0, 0, 0.000)",
363 | "track_width": 0.254,
364 | "via_diameter": 0.6,
365 | "via_drill": 0.4,
366 | "wire_width": 6.0
367 | },
368 | {
369 | "bus_width": 12.0,
370 | "clearance": 0.2,
371 | "diff_pair_gap": 0.25,
372 | "diff_pair_via_gap": 0.25,
373 | "diff_pair_width": 0.2,
374 | "line_style": 0,
375 | "microvia_diameter": 0.3,
376 | "microvia_drill": 0.1,
377 | "name": "Power",
378 | "nets": [
379 | "+3V3",
380 | "+5V",
381 | "GND"
382 | ],
383 | "pcb_color": "rgba(0, 0, 0, 0.000)",
384 | "schematic_color": "rgba(0, 0, 0, 0.000)",
385 | "track_width": 0.508,
386 | "via_diameter": 0.6,
387 | "via_drill": 0.4,
388 | "wire_width": 6.0
389 | }
390 | ],
391 | "meta": {
392 | "version": 2
393 | },
394 | "net_colors": null
395 | },
396 | "pcbnew": {
397 | "last_paths": {
398 | "gencad": "",
399 | "idf": "",
400 | "netlist": "RetroWiFiModem.net",
401 | "specctra_dsn": "",
402 | "step": "",
403 | "vrml": ""
404 | },
405 | "page_layout_descr_file": ""
406 | },
407 | "schematic": {
408 | "annotate_start_num": 0,
409 | "drawing": {
410 | "default_line_thickness": 6.0,
411 | "default_text_size": 60.0,
412 | "field_names": [],
413 | "intersheets_ref_own_page": false,
414 | "intersheets_ref_prefix": "",
415 | "intersheets_ref_short": false,
416 | "intersheets_ref_show": false,
417 | "intersheets_ref_suffix": "",
418 | "junction_size_choice": 3,
419 | "label_size_ratio": 0.25,
420 | "pin_symbol_size": 0.0,
421 | "text_offset_ratio": 0.08
422 | },
423 | "legacy_lib_dir": "",
424 | "legacy_lib_list": [],
425 | "meta": {
426 | "version": 1
427 | },
428 | "net_format_name": "Pcbnew",
429 | "ngspice": {
430 | "fix_include_paths": true,
431 | "fix_passive_vals": false,
432 | "meta": {
433 | "version": 0
434 | },
435 | "model_mode": 0,
436 | "workbook_filename": ""
437 | },
438 | "page_layout_descr_file": "",
439 | "plot_directory": "",
440 | "spice_adjust_passive_values": false,
441 | "spice_external_command": "spice \"%I\"",
442 | "subpart_first_id": 65,
443 | "subpart_id_separator": 0
444 | },
445 | "sheets": [
446 | [
447 | "c4378ab1-a632-46d3-b99b-d787229c62d1",
448 | ""
449 | ]
450 | ],
451 | "text_variables": {}
452 | }
453 |
--------------------------------------------------------------------------------
/kicad/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | )
3 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-B_Mask.gbs:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*
2 | G04 #@! TF.CreationDate,2024-04-17T15:14:36-06:00*
3 | G04 #@! TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Soldermask,Bot*
6 | G04 #@! TF.FilePolarity,Negative*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:36*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10R,1.300000X1.300000*%
33 | %ADD11C,1.300000*%
34 | %ADD12R,2.000000X2.000000*%
35 | %ADD13C,2.000000*%
36 | %ADD14R,1.727200X1.727200*%
37 | %ADD15O,1.727200X1.727200*%
38 | %ADD16C,1.397000*%
39 | %ADD17C,1.524000*%
40 | %ADD18R,3.500000X3.500000*%
41 | %ADD19RoundRect,0.750000X-0.750000X-1.000000X0.750000X-1.000000X0.750000X1.000000X-0.750000X1.000000X0*%
42 | %ADD20RoundRect,0.875000X-0.875000X-0.875000X0.875000X-0.875000X0.875000X0.875000X-0.875000X0.875000X0*%
43 | %ADD21C,1.800000*%
44 | %ADD22R,2.400000X1.600000*%
45 | %ADD23O,2.400000X1.600000*%
46 | %ADD24R,1.600000X1.600000*%
47 | %ADD25O,1.600000X1.600000*%
48 | %ADD26R,1.700000X1.700000*%
49 | %ADD27O,1.700000X1.700000*%
50 | %ADD28C,3.200000*%
51 | G04 APERTURE END LIST*
52 | D10*
53 | X127508000Y-80899000D03*
54 | D11*
55 | X127508000Y-83399000D03*
56 | D10*
57 | X131064000Y-84709000D03*
58 | D11*
59 | X131064000Y-82209000D03*
60 | D10*
61 | X143510000Y-78105000D03*
62 | D11*
63 | X146010000Y-78105000D03*
64 | D10*
65 | X149860000Y-83439000D03*
66 | D11*
67 | X149860000Y-80939000D03*
68 | D10*
69 | X180340000Y-123825000D03*
70 | D11*
71 | X177840000Y-123825000D03*
72 | D10*
73 | X156972000Y-97409000D03*
74 | D11*
75 | X159472000Y-97409000D03*
76 | D12*
77 | X205740000Y-130744000D03*
78 | D13*
79 | X205740000Y-133284000D03*
80 | D12*
81 | X205740000Y-124140000D03*
82 | D13*
83 | X205740000Y-126680000D03*
84 | D12*
85 | X205740000Y-117536000D03*
86 | D13*
87 | X205740000Y-120076000D03*
88 | D12*
89 | X205740000Y-110932000D03*
90 | D13*
91 | X205740000Y-113472000D03*
92 | D12*
93 | X205740000Y-104328000D03*
94 | D13*
95 | X205740000Y-106868000D03*
96 | D12*
97 | X205740000Y-97724000D03*
98 | D13*
99 | X205740000Y-100264000D03*
100 | D12*
101 | X205740000Y-91120000D03*
102 | D13*
103 | X205740000Y-93660000D03*
104 | D12*
105 | X205740000Y-84516000D03*
106 | D13*
107 | X205740000Y-87056000D03*
108 | D14*
109 | X128905000Y-101965000D03*
110 | D15*
111 | X126365000Y-101965000D03*
112 | X128905000Y-99425000D03*
113 | X126365000Y-99425000D03*
114 | X128905000Y-96885000D03*
115 | X126365000Y-96885000D03*
116 | X128905000Y-94345000D03*
117 | X126365000Y-94345000D03*
118 | X128905000Y-91805000D03*
119 | X126365000Y-91805000D03*
120 | D16*
121 | X153035000Y-77978000D03*
122 | X153035000Y-85598000D03*
123 | D10*
124 | X186055000Y-111760000D03*
125 | D11*
126 | X186055000Y-114260000D03*
127 | D17*
128 | X156972000Y-92329000D03*
129 | X159512000Y-92329000D03*
130 | X162052000Y-92329000D03*
131 | D18*
132 | X119665000Y-122232500D03*
133 | D19*
134 | X113665000Y-122232500D03*
135 | D20*
136 | X116665000Y-126932500D03*
137 | D21*
138 | X142240000Y-125730000D03*
139 | X144780000Y-125730000D03*
140 | X147320000Y-125730000D03*
141 | X149860000Y-125730000D03*
142 | X152400000Y-125730000D03*
143 | X154940000Y-125730000D03*
144 | X157480000Y-125730000D03*
145 | X160020000Y-125730000D03*
146 | X160020000Y-102870000D03*
147 | X157480000Y-102870000D03*
148 | X154940000Y-102870000D03*
149 | X152400000Y-102870000D03*
150 | X149860000Y-102870000D03*
151 | X147320000Y-102870000D03*
152 | X144780000Y-102870000D03*
153 | X142240000Y-102870000D03*
154 | D22*
155 | X193103500Y-108585000D03*
156 | D23*
157 | X193103500Y-111125000D03*
158 | X193103500Y-113665000D03*
159 | X193103500Y-116205000D03*
160 | X193103500Y-118745000D03*
161 | X193103500Y-121285000D03*
162 | X193103500Y-123825000D03*
163 | X193103500Y-126365000D03*
164 | X200723500Y-126365000D03*
165 | X200723500Y-123825000D03*
166 | X200723500Y-121285000D03*
167 | X200723500Y-118745000D03*
168 | X200723500Y-116205000D03*
169 | X200723500Y-113665000D03*
170 | X200723500Y-111125000D03*
171 | X200723500Y-108585000D03*
172 | D17*
173 | X170180000Y-90805000D03*
174 | X170180000Y-93345000D03*
175 | X170180000Y-95885000D03*
176 | X170180000Y-98425000D03*
177 | X170180000Y-100965000D03*
178 | X170180000Y-103505000D03*
179 | X170180000Y-106045000D03*
180 | X170180000Y-108585000D03*
181 | X188214000Y-108585000D03*
182 | X188214000Y-106045000D03*
183 | X188214000Y-103505000D03*
184 | X188214000Y-100965000D03*
185 | X188214000Y-98425000D03*
186 | X188214000Y-95885000D03*
187 | X188214000Y-93345000D03*
188 | X188214000Y-90805000D03*
189 | D24*
190 | X184785000Y-87630000D03*
191 | D25*
192 | X177165000Y-87630000D03*
193 | D26*
194 | X175895000Y-83185000D03*
195 | D27*
196 | X173355000Y-83185000D03*
197 | D16*
198 | X164465000Y-89916000D03*
199 | X164465000Y-97536000D03*
200 | X171450000Y-120015000D03*
201 | X171450000Y-112395000D03*
202 | D28*
203 | X159450000Y-85770000D03*
204 | X189450000Y-85770000D03*
205 | X119450000Y-132020000D03*
206 | X159450000Y-132020000D03*
207 | X119450000Y-85770000D03*
208 | X189450000Y-132020000D03*
209 | M02*
210 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-B_Paste.gbp:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*
2 | G04 #@! TF.CreationDate,2024-04-17T15:14:35-06:00*
3 | G04 #@! TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Bot*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:35*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 APERTURE END LIST*
15 | M02*
16 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-B_Silkscreen.gbo:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*
2 | G04 #@! TF.CreationDate,2024-04-17T15:14:35-06:00*
3 | G04 #@! TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Legend,Bot*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:35*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10C,0.300000*%
33 | %ADD11R,1.300000X1.300000*%
34 | %ADD12C,1.300000*%
35 | %ADD13R,2.000000X2.000000*%
36 | %ADD14C,2.000000*%
37 | %ADD15R,1.727200X1.727200*%
38 | %ADD16O,1.727200X1.727200*%
39 | %ADD17C,1.397000*%
40 | %ADD18C,1.524000*%
41 | %ADD19R,3.500000X3.500000*%
42 | %ADD20RoundRect,0.750000X-0.750000X-1.000000X0.750000X-1.000000X0.750000X1.000000X-0.750000X1.000000X0*%
43 | %ADD21RoundRect,0.875000X-0.875000X-0.875000X0.875000X-0.875000X0.875000X0.875000X-0.875000X0.875000X0*%
44 | %ADD22C,1.800000*%
45 | %ADD23R,2.400000X1.600000*%
46 | %ADD24O,2.400000X1.600000*%
47 | %ADD25R,1.600000X1.600000*%
48 | %ADD26O,1.600000X1.600000*%
49 | %ADD27R,1.700000X1.700000*%
50 | %ADD28O,1.700000X1.700000*%
51 | %ADD29C,3.200000*%
52 | G04 APERTURE END LIST*
53 | D10*
54 | X115264285Y-116090000D02*
55 | X115407142Y-116018571D01*
56 | X115621428Y-116018571D01*
57 | X115835714Y-116090000D01*
58 | X115978571Y-116232857D01*
59 | X116050000Y-116375714D01*
60 | X116121428Y-116661428D01*
61 | X116121428Y-116875714D01*
62 | X116050000Y-117161428D01*
63 | X115978571Y-117304285D01*
64 | X115835714Y-117447142D01*
65 | X115621428Y-117518571D01*
66 | X115478571Y-117518571D01*
67 | X115264285Y-117447142D01*
68 | X115192857Y-117375714D01*
69 | X115192857Y-116875714D01*
70 | X115478571Y-116875714D01*
71 | X114550000Y-116518571D02*
72 | X114550000Y-117518571D01*
73 | X114550000Y-116661428D02*
74 | X114478571Y-116590000D01*
75 | X114335714Y-116518571D01*
76 | X114121428Y-116518571D01*
77 | X113978571Y-116590000D01*
78 | X113907142Y-116732857D01*
79 | X113907142Y-117518571D01*
80 | X112550000Y-117518571D02*
81 | X112550000Y-116018571D01*
82 | X112550000Y-117447142D02*
83 | X112692857Y-117518571D01*
84 | X112978571Y-117518571D01*
85 | X113121428Y-117447142D01*
86 | X113192857Y-117375714D01*
87 | X113264285Y-117232857D01*
88 | X113264285Y-116804285D01*
89 | X113192857Y-116661428D01*
90 | X113121428Y-116590000D01*
91 | X112978571Y-116518571D01*
92 | X112692857Y-116518571D01*
93 | X112550000Y-116590000D01*
94 | X148156285Y-133137571D02*
95 | X148656285Y-132423285D01*
96 | X149013428Y-133137571D02*
97 | X149013428Y-131637571D01*
98 | X148442000Y-131637571D01*
99 | X148299142Y-131709000D01*
100 | X148227714Y-131780428D01*
101 | X148156285Y-131923285D01*
102 | X148156285Y-132137571D01*
103 | X148227714Y-132280428D01*
104 | X148299142Y-132351857D01*
105 | X148442000Y-132423285D01*
106 | X149013428Y-132423285D01*
107 | X146942000Y-133066142D02*
108 | X147084857Y-133137571D01*
109 | X147370571Y-133137571D01*
110 | X147513428Y-133066142D01*
111 | X147584857Y-132923285D01*
112 | X147584857Y-132351857D01*
113 | X147513428Y-132209000D01*
114 | X147370571Y-132137571D01*
115 | X147084857Y-132137571D01*
116 | X146942000Y-132209000D01*
117 | X146870571Y-132351857D01*
118 | X146870571Y-132494714D01*
119 | X147584857Y-132637571D01*
120 | X146442000Y-132137571D02*
121 | X145870571Y-132137571D01*
122 | X146227714Y-131637571D02*
123 | X146227714Y-132923285D01*
124 | X146156285Y-133066142D01*
125 | X146013428Y-133137571D01*
126 | X145870571Y-133137571D01*
127 | X145370571Y-133137571D02*
128 | X145370571Y-132137571D01*
129 | X145370571Y-132423285D02*
130 | X145299142Y-132280428D01*
131 | X145227714Y-132209000D01*
132 | X145084857Y-132137571D01*
133 | X144942000Y-132137571D01*
134 | X144227714Y-133137571D02*
135 | X144370571Y-133066142D01*
136 | X144442000Y-132994714D01*
137 | X144513428Y-132851857D01*
138 | X144513428Y-132423285D01*
139 | X144442000Y-132280428D01*
140 | X144370571Y-132209000D01*
141 | X144227714Y-132137571D01*
142 | X144013428Y-132137571D01*
143 | X143870571Y-132209000D01*
144 | X143799142Y-132280428D01*
145 | X143727714Y-132423285D01*
146 | X143727714Y-132851857D01*
147 | X143799142Y-132994714D01*
148 | X143870571Y-133066142D01*
149 | X144013428Y-133137571D01*
150 | X144227714Y-133137571D01*
151 | X142084857Y-131637571D02*
152 | X141727714Y-133137571D01*
153 | X141442000Y-132066142D01*
154 | X141156285Y-133137571D01*
155 | X140799142Y-131637571D01*
156 | X140227714Y-133137571D02*
157 | X140227714Y-132137571D01*
158 | X140227714Y-131637571D02*
159 | X140299142Y-131709000D01*
160 | X140227714Y-131780428D01*
161 | X140156285Y-131709000D01*
162 | X140227714Y-131637571D01*
163 | X140227714Y-131780428D01*
164 | X139013428Y-132351857D02*
165 | X139513428Y-132351857D01*
166 | X139513428Y-133137571D02*
167 | X139513428Y-131637571D01*
168 | X138799142Y-131637571D01*
169 | X138227714Y-133137571D02*
170 | X138227714Y-132137571D01*
171 | X138227714Y-131637571D02*
172 | X138299142Y-131709000D01*
173 | X138227714Y-131780428D01*
174 | X138156285Y-131709000D01*
175 | X138227714Y-131637571D01*
176 | X138227714Y-131780428D01*
177 | X136370571Y-133137571D02*
178 | X136370571Y-131637571D01*
179 | X135870571Y-132709000D01*
180 | X135370571Y-131637571D01*
181 | X135370571Y-133137571D01*
182 | X134442000Y-133137571D02*
183 | X134584857Y-133066142D01*
184 | X134656285Y-132994714D01*
185 | X134727714Y-132851857D01*
186 | X134727714Y-132423285D01*
187 | X134656285Y-132280428D01*
188 | X134584857Y-132209000D01*
189 | X134442000Y-132137571D01*
190 | X134227714Y-132137571D01*
191 | X134084857Y-132209000D01*
192 | X134013428Y-132280428D01*
193 | X133942000Y-132423285D01*
194 | X133942000Y-132851857D01*
195 | X134013428Y-132994714D01*
196 | X134084857Y-133066142D01*
197 | X134227714Y-133137571D01*
198 | X134442000Y-133137571D01*
199 | X132656285Y-133137571D02*
200 | X132656285Y-131637571D01*
201 | X132656285Y-133066142D02*
202 | X132799142Y-133137571D01*
203 | X133084857Y-133137571D01*
204 | X133227714Y-133066142D01*
205 | X133299142Y-132994714D01*
206 | X133370571Y-132851857D01*
207 | X133370571Y-132423285D01*
208 | X133299142Y-132280428D01*
209 | X133227714Y-132209000D01*
210 | X133084857Y-132137571D01*
211 | X132799142Y-132137571D01*
212 | X132656285Y-132209000D01*
213 | X131370571Y-133066142D02*
214 | X131513428Y-133137571D01*
215 | X131799142Y-133137571D01*
216 | X131942000Y-133066142D01*
217 | X132013428Y-132923285D01*
218 | X132013428Y-132351857D01*
219 | X131942000Y-132209000D01*
220 | X131799142Y-132137571D01*
221 | X131513428Y-132137571D01*
222 | X131370571Y-132209000D01*
223 | X131299142Y-132351857D01*
224 | X131299142Y-132494714D01*
225 | X132013428Y-132637571D01*
226 | X130656285Y-133137571D02*
227 | X130656285Y-132137571D01*
228 | X130656285Y-132280428D02*
229 | X130584857Y-132209000D01*
230 | X130442000Y-132137571D01*
231 | X130227714Y-132137571D01*
232 | X130084857Y-132209000D01*
233 | X130013428Y-132351857D01*
234 | X130013428Y-133137571D01*
235 | X130013428Y-132351857D02*
236 | X129942000Y-132209000D01*
237 | X129799142Y-132137571D01*
238 | X129584857Y-132137571D01*
239 | X129442000Y-132209000D01*
240 | X129370571Y-132351857D01*
241 | X129370571Y-133137571D01*
242 | X143442000Y-135552571D02*
243 | X143442000Y-134052571D01*
244 | X142870571Y-134052571D01*
245 | X142727714Y-134124000D01*
246 | X142656285Y-134195428D01*
247 | X142584857Y-134338285D01*
248 | X142584857Y-134552571D01*
249 | X142656285Y-134695428D01*
250 | X142727714Y-134766857D01*
251 | X142870571Y-134838285D01*
252 | X143442000Y-134838285D01*
253 | X141084857Y-135409714D02*
254 | X141156285Y-135481142D01*
255 | X141370571Y-135552571D01*
256 | X141513428Y-135552571D01*
257 | X141727714Y-135481142D01*
258 | X141870571Y-135338285D01*
259 | X141942000Y-135195428D01*
260 | X142013428Y-134909714D01*
261 | X142013428Y-134695428D01*
262 | X141942000Y-134409714D01*
263 | X141870571Y-134266857D01*
264 | X141727714Y-134124000D01*
265 | X141513428Y-134052571D01*
266 | X141370571Y-134052571D01*
267 | X141156285Y-134124000D01*
268 | X141084857Y-134195428D01*
269 | X139942000Y-134766857D02*
270 | X139727714Y-134838285D01*
271 | X139656285Y-134909714D01*
272 | X139584857Y-135052571D01*
273 | X139584857Y-135266857D01*
274 | X139656285Y-135409714D01*
275 | X139727714Y-135481142D01*
276 | X139870571Y-135552571D01*
277 | X140442000Y-135552571D01*
278 | X140442000Y-134052571D01*
279 | X139942000Y-134052571D01*
280 | X139799142Y-134124000D01*
281 | X139727714Y-134195428D01*
282 | X139656285Y-134338285D01*
283 | X139656285Y-134481142D01*
284 | X139727714Y-134624000D01*
285 | X139799142Y-134695428D01*
286 | X139942000Y-134766857D01*
287 | X140442000Y-134766857D01*
288 | X137870571Y-134195428D02*
289 | X137799142Y-134124000D01*
290 | X137656285Y-134052571D01*
291 | X137299142Y-134052571D01*
292 | X137156285Y-134124000D01*
293 | X137084857Y-134195428D01*
294 | X137013428Y-134338285D01*
295 | X137013428Y-134481142D01*
296 | X137084857Y-134695428D01*
297 | X137942000Y-135552571D01*
298 | X137013428Y-135552571D01*
299 | X136370571Y-135409714D02*
300 | X136299142Y-135481142D01*
301 | X136370571Y-135552571D01*
302 | X136442000Y-135481142D01*
303 | X136370571Y-135409714D01*
304 | X136370571Y-135552571D01*
305 | X135727714Y-134195428D02*
306 | X135656285Y-134124000D01*
307 | X135513428Y-134052571D01*
308 | X135156285Y-134052571D01*
309 | X135013428Y-134124000D01*
310 | X134942000Y-134195428D01*
311 | X134870571Y-134338285D01*
312 | X134870571Y-134481142D01*
313 | X134942000Y-134695428D01*
314 | X135799142Y-135552571D01*
315 | X134870571Y-135552571D01*
316 | X147227714Y-137539000D02*
317 | X146513428Y-137539000D01*
318 | X147370571Y-137967571D02*
319 | X146870571Y-136467571D01*
320 | X146370571Y-137967571D01*
321 | X145870571Y-136967571D02*
322 | X145870571Y-138467571D01*
323 | X145870571Y-137039000D02*
324 | X145727714Y-136967571D01*
325 | X145442000Y-136967571D01*
326 | X145299142Y-137039000D01*
327 | X145227714Y-137110428D01*
328 | X145156285Y-137253285D01*
329 | X145156285Y-137681857D01*
330 | X145227714Y-137824714D01*
331 | X145299142Y-137896142D01*
332 | X145442000Y-137967571D01*
333 | X145727714Y-137967571D01*
334 | X145870571Y-137896142D01*
335 | X144513428Y-137967571D02*
336 | X144513428Y-136967571D01*
337 | X144513428Y-137253285D02*
338 | X144442000Y-137110428D01*
339 | X144370571Y-137039000D01*
340 | X144227714Y-136967571D01*
341 | X144084857Y-136967571D01*
342 | X143584857Y-137967571D02*
343 | X143584857Y-136967571D01*
344 | X143584857Y-136467571D02*
345 | X143656285Y-136539000D01*
346 | X143584857Y-136610428D01*
347 | X143513428Y-136539000D01*
348 | X143584857Y-136467571D01*
349 | X143584857Y-136610428D01*
350 | X142656285Y-137967571D02*
351 | X142799142Y-137896142D01*
352 | X142870571Y-137753285D01*
353 | X142870571Y-136467571D01*
354 | X140156285Y-137967571D02*
355 | X141013428Y-137967571D01*
356 | X140584857Y-137967571D02*
357 | X140584857Y-136467571D01*
358 | X140727714Y-136681857D01*
359 | X140870571Y-136824714D01*
360 | X141013428Y-136896142D01*
361 | X139656285Y-136467571D02*
362 | X138656285Y-136467571D01*
363 | X139299142Y-137967571D01*
364 | X138013428Y-137896142D02*
365 | X138013428Y-137967571D01*
366 | X138084857Y-138110428D01*
367 | X138156285Y-138181857D01*
368 | X136299142Y-136610428D02*
369 | X136227714Y-136539000D01*
370 | X136084857Y-136467571D01*
371 | X135727714Y-136467571D01*
372 | X135584857Y-136539000D01*
373 | X135513428Y-136610428D01*
374 | X135442000Y-136753285D01*
375 | X135442000Y-136896142D01*
376 | X135513428Y-137110428D01*
377 | X136370571Y-137967571D01*
378 | X135442000Y-137967571D01*
379 | X134513428Y-136467571D02*
380 | X134370571Y-136467571D01*
381 | X134227714Y-136539000D01*
382 | X134156285Y-136610428D01*
383 | X134084857Y-136753285D01*
384 | X134013428Y-137039000D01*
385 | X134013428Y-137396142D01*
386 | X134084857Y-137681857D01*
387 | X134156285Y-137824714D01*
388 | X134227714Y-137896142D01*
389 | X134370571Y-137967571D01*
390 | X134513428Y-137967571D01*
391 | X134656285Y-137896142D01*
392 | X134727714Y-137824714D01*
393 | X134799142Y-137681857D01*
394 | X134870571Y-137396142D01*
395 | X134870571Y-137039000D01*
396 | X134799142Y-136753285D01*
397 | X134727714Y-136610428D01*
398 | X134656285Y-136539000D01*
399 | X134513428Y-136467571D01*
400 | X133442000Y-136610428D02*
401 | X133370571Y-136539000D01*
402 | X133227714Y-136467571D01*
403 | X132870571Y-136467571D01*
404 | X132727714Y-136539000D01*
405 | X132656285Y-136610428D01*
406 | X132584857Y-136753285D01*
407 | X132584857Y-136896142D01*
408 | X132656285Y-137110428D01*
409 | X133513428Y-137967571D01*
410 | X132584857Y-137967571D01*
411 | X131299142Y-136967571D02*
412 | X131299142Y-137967571D01*
413 | X131656285Y-136396142D02*
414 | X132013428Y-137467571D01*
415 | X131084857Y-137467571D01*
416 | X122578571Y-116947142D02*
417 | X121435714Y-116947142D01*
418 | X122007142Y-117518571D02*
419 | X122007142Y-116375714D01*
420 | X120007142Y-116018571D02*
421 | X120721428Y-116018571D01*
422 | X120792857Y-116732857D01*
423 | X120721428Y-116661428D01*
424 | X120578571Y-116590000D01*
425 | X120221428Y-116590000D01*
426 | X120078571Y-116661428D01*
427 | X120007142Y-116732857D01*
428 | X119935714Y-116875714D01*
429 | X119935714Y-117232857D01*
430 | X120007142Y-117375714D01*
431 | X120078571Y-117447142D01*
432 | X120221428Y-117518571D01*
433 | X120578571Y-117518571D01*
434 | X120721428Y-117447142D01*
435 | X120792857Y-117375714D01*
436 | X119507142Y-116018571D02*
437 | X119007142Y-117518571D01*
438 | X118507142Y-116018571D01*
439 | %LPC*%
440 | D11*
441 | X127508000Y-80899000D03*
442 | D12*
443 | X127508000Y-83399000D03*
444 | D11*
445 | X131064000Y-84709000D03*
446 | D12*
447 | X131064000Y-82209000D03*
448 | D11*
449 | X143510000Y-78105000D03*
450 | D12*
451 | X146010000Y-78105000D03*
452 | D11*
453 | X149860000Y-83439000D03*
454 | D12*
455 | X149860000Y-80939000D03*
456 | D11*
457 | X180340000Y-123825000D03*
458 | D12*
459 | X177840000Y-123825000D03*
460 | D11*
461 | X156972000Y-97409000D03*
462 | D12*
463 | X159472000Y-97409000D03*
464 | D13*
465 | X205740000Y-130744000D03*
466 | D14*
467 | X205740000Y-133284000D03*
468 | D13*
469 | X205740000Y-124140000D03*
470 | D14*
471 | X205740000Y-126680000D03*
472 | D13*
473 | X205740000Y-117536000D03*
474 | D14*
475 | X205740000Y-120076000D03*
476 | D13*
477 | X205740000Y-110932000D03*
478 | D14*
479 | X205740000Y-113472000D03*
480 | D13*
481 | X205740000Y-104328000D03*
482 | D14*
483 | X205740000Y-106868000D03*
484 | D13*
485 | X205740000Y-97724000D03*
486 | D14*
487 | X205740000Y-100264000D03*
488 | D13*
489 | X205740000Y-91120000D03*
490 | D14*
491 | X205740000Y-93660000D03*
492 | D13*
493 | X205740000Y-84516000D03*
494 | D14*
495 | X205740000Y-87056000D03*
496 | D15*
497 | X128905000Y-101965000D03*
498 | D16*
499 | X126365000Y-101965000D03*
500 | X128905000Y-99425000D03*
501 | X126365000Y-99425000D03*
502 | X128905000Y-96885000D03*
503 | X126365000Y-96885000D03*
504 | X128905000Y-94345000D03*
505 | X126365000Y-94345000D03*
506 | X128905000Y-91805000D03*
507 | X126365000Y-91805000D03*
508 | D17*
509 | X153035000Y-77978000D03*
510 | X153035000Y-85598000D03*
511 | D11*
512 | X186055000Y-111760000D03*
513 | D12*
514 | X186055000Y-114260000D03*
515 | D18*
516 | X156972000Y-92329000D03*
517 | X159512000Y-92329000D03*
518 | X162052000Y-92329000D03*
519 | D19*
520 | X119665000Y-122232500D03*
521 | D20*
522 | X113665000Y-122232500D03*
523 | D21*
524 | X116665000Y-126932500D03*
525 | D22*
526 | X142240000Y-125730000D03*
527 | X144780000Y-125730000D03*
528 | X147320000Y-125730000D03*
529 | X149860000Y-125730000D03*
530 | X152400000Y-125730000D03*
531 | X154940000Y-125730000D03*
532 | X157480000Y-125730000D03*
533 | X160020000Y-125730000D03*
534 | X160020000Y-102870000D03*
535 | X157480000Y-102870000D03*
536 | X154940000Y-102870000D03*
537 | X152400000Y-102870000D03*
538 | X149860000Y-102870000D03*
539 | X147320000Y-102870000D03*
540 | X144780000Y-102870000D03*
541 | X142240000Y-102870000D03*
542 | D23*
543 | X193103500Y-108585000D03*
544 | D24*
545 | X193103500Y-111125000D03*
546 | X193103500Y-113665000D03*
547 | X193103500Y-116205000D03*
548 | X193103500Y-118745000D03*
549 | X193103500Y-121285000D03*
550 | X193103500Y-123825000D03*
551 | X193103500Y-126365000D03*
552 | X200723500Y-126365000D03*
553 | X200723500Y-123825000D03*
554 | X200723500Y-121285000D03*
555 | X200723500Y-118745000D03*
556 | X200723500Y-116205000D03*
557 | X200723500Y-113665000D03*
558 | X200723500Y-111125000D03*
559 | X200723500Y-108585000D03*
560 | D18*
561 | X170180000Y-90805000D03*
562 | X170180000Y-93345000D03*
563 | X170180000Y-95885000D03*
564 | X170180000Y-98425000D03*
565 | X170180000Y-100965000D03*
566 | X170180000Y-103505000D03*
567 | X170180000Y-106045000D03*
568 | X170180000Y-108585000D03*
569 | X188214000Y-108585000D03*
570 | X188214000Y-106045000D03*
571 | X188214000Y-103505000D03*
572 | X188214000Y-100965000D03*
573 | X188214000Y-98425000D03*
574 | X188214000Y-95885000D03*
575 | X188214000Y-93345000D03*
576 | X188214000Y-90805000D03*
577 | D25*
578 | X184785000Y-87630000D03*
579 | D26*
580 | X177165000Y-87630000D03*
581 | D27*
582 | X175895000Y-83185000D03*
583 | D28*
584 | X173355000Y-83185000D03*
585 | D17*
586 | X164465000Y-89916000D03*
587 | X164465000Y-97536000D03*
588 | X171450000Y-120015000D03*
589 | X171450000Y-112395000D03*
590 | D29*
591 | X159450000Y-85770000D03*
592 | X189450000Y-85770000D03*
593 | X119450000Y-132020000D03*
594 | X159450000Y-132020000D03*
595 | X119450000Y-85770000D03*
596 | X189450000Y-132020000D03*
597 | M02*
598 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-Edge_Cuts.gm1:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*
2 | G04 #@! TF.CreationDate,2024-04-17T15:14:36-06:00*
3 | G04 #@! TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Profile,NP*
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:36*
9 | %MOMM*%
10 | %LPD*%
11 | G01*
12 | G04 APERTURE LIST*
13 | G04 #@! TA.AperFunction,Profile*
14 | %ADD10C,0.150000*%
15 | G04 #@! TD*
16 | G04 APERTURE END LIST*
17 | D10*
18 | X209700000Y-75830000D02*
19 | X209700000Y-141970000D01*
20 | X162485000Y-141970000D02*
21 | X109700000Y-141970000D01*
22 | X169115000Y-136825000D02*
23 | G75*
24 | G03*
25 | X162485000Y-136825000I-3315000J0D01*
26 | G01*
27 | X169115000Y-141970000D02*
28 | X169115000Y-136825000D01*
29 | X111980600Y-81141000D02*
30 | X109700000Y-81141000D01*
31 | X109700000Y-81141000D02*
32 | X109700000Y-75830000D01*
33 | X116832000Y-87271100D02*
34 | X111980600Y-87271100D01*
35 | X162485000Y-80975000D02*
36 | G75*
37 | G03*
38 | X169115000Y-80975000I3315000J0D01*
39 | G01*
40 | X169115000Y-80975000D02*
41 | X169115000Y-75830000D01*
42 | X111980600Y-87271100D02*
43 | X111980600Y-81141000D01*
44 | X111980600Y-106498900D02*
45 | X116832000Y-106498900D01*
46 | X111980600Y-112629000D02*
47 | X111980600Y-106498900D01*
48 | X169115000Y-75830000D02*
49 | X209700000Y-75830000D01*
50 | X162485000Y-136825000D02*
51 | X162485000Y-141970000D01*
52 | X162485000Y-75830000D02*
53 | X162485000Y-80975000D01*
54 | X209700000Y-141970000D02*
55 | X169115000Y-141970000D01*
56 | X109700000Y-75830000D02*
57 | X162485000Y-75830000D01*
58 | X116832000Y-106498900D02*
59 | X116832000Y-87271100D01*
60 | X109700000Y-141970000D02*
61 | X109700000Y-112629000D01*
62 | X109700000Y-112629000D02*
63 | X111980600Y-112629000D01*
64 | M02*
65 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-F_Mask.gts:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*
2 | G04 #@! TF.CreationDate,2024-04-17T15:14:35-06:00*
3 | G04 #@! TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Soldermask,Top*
6 | G04 #@! TF.FilePolarity,Negative*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:35*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10R,1.300000X1.300000*%
33 | %ADD11C,1.300000*%
34 | %ADD12R,2.000000X2.000000*%
35 | %ADD13C,2.000000*%
36 | %ADD14R,1.727200X1.727200*%
37 | %ADD15O,1.727200X1.727200*%
38 | %ADD16C,1.397000*%
39 | %ADD17C,1.524000*%
40 | %ADD18R,3.500000X3.500000*%
41 | %ADD19RoundRect,0.750000X-0.750000X-1.000000X0.750000X-1.000000X0.750000X1.000000X-0.750000X1.000000X0*%
42 | %ADD20RoundRect,0.875000X-0.875000X-0.875000X0.875000X-0.875000X0.875000X0.875000X-0.875000X0.875000X0*%
43 | %ADD21RoundRect,0.150000X-0.875000X-0.150000X0.875000X-0.150000X0.875000X0.150000X-0.875000X0.150000X0*%
44 | %ADD22C,1.800000*%
45 | %ADD23RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
46 | %ADD24R,2.400000X1.600000*%
47 | %ADD25O,2.400000X1.600000*%
48 | %ADD26R,2.000000X0.600000*%
49 | %ADD27R,1.600000X1.600000*%
50 | %ADD28O,1.600000X1.600000*%
51 | %ADD29R,1.700000X1.700000*%
52 | %ADD30O,1.700000X1.700000*%
53 | %ADD31C,3.200000*%
54 | G04 APERTURE END LIST*
55 | D10*
56 | X127508000Y-80899000D03*
57 | D11*
58 | X127508000Y-83399000D03*
59 | D10*
60 | X131064000Y-84709000D03*
61 | D11*
62 | X131064000Y-82209000D03*
63 | D10*
64 | X143510000Y-78105000D03*
65 | D11*
66 | X146010000Y-78105000D03*
67 | D10*
68 | X149860000Y-83439000D03*
69 | D11*
70 | X149860000Y-80939000D03*
71 | D10*
72 | X180340000Y-123825000D03*
73 | D11*
74 | X177840000Y-123825000D03*
75 | D10*
76 | X156972000Y-97409000D03*
77 | D11*
78 | X159472000Y-97409000D03*
79 | D12*
80 | X205740000Y-130744000D03*
81 | D13*
82 | X205740000Y-133284000D03*
83 | D12*
84 | X205740000Y-124140000D03*
85 | D13*
86 | X205740000Y-126680000D03*
87 | D12*
88 | X205740000Y-117536000D03*
89 | D13*
90 | X205740000Y-120076000D03*
91 | D12*
92 | X205740000Y-110932000D03*
93 | D13*
94 | X205740000Y-113472000D03*
95 | D12*
96 | X205740000Y-104328000D03*
97 | D13*
98 | X205740000Y-106868000D03*
99 | D12*
100 | X205740000Y-97724000D03*
101 | D13*
102 | X205740000Y-100264000D03*
103 | D12*
104 | X205740000Y-91120000D03*
105 | D13*
106 | X205740000Y-93660000D03*
107 | D12*
108 | X205740000Y-84516000D03*
109 | D13*
110 | X205740000Y-87056000D03*
111 | D14*
112 | X128905000Y-101965000D03*
113 | D15*
114 | X126365000Y-101965000D03*
115 | X128905000Y-99425000D03*
116 | X126365000Y-99425000D03*
117 | X128905000Y-96885000D03*
118 | X126365000Y-96885000D03*
119 | X128905000Y-94345000D03*
120 | X126365000Y-94345000D03*
121 | X128905000Y-91805000D03*
122 | X126365000Y-91805000D03*
123 | D16*
124 | X153035000Y-77978000D03*
125 | X153035000Y-85598000D03*
126 | D10*
127 | X186055000Y-111760000D03*
128 | D11*
129 | X186055000Y-114260000D03*
130 | D17*
131 | X156972000Y-92329000D03*
132 | X159512000Y-92329000D03*
133 | X162052000Y-92329000D03*
134 | D18*
135 | X119665000Y-122232500D03*
136 | D19*
137 | X113665000Y-122232500D03*
138 | D20*
139 | X116665000Y-126932500D03*
140 | D21*
141 | X171245000Y-126365000D03*
142 | X171245000Y-127635000D03*
143 | X171245000Y-128905000D03*
144 | X171245000Y-130175000D03*
145 | X171245000Y-131445000D03*
146 | X171245000Y-132715000D03*
147 | X171245000Y-133985000D03*
148 | X171245000Y-135255000D03*
149 | X171245000Y-136525000D03*
150 | X171245000Y-137795000D03*
151 | X180545000Y-137795000D03*
152 | X180545000Y-136525000D03*
153 | X180545000Y-135255000D03*
154 | X180545000Y-133985000D03*
155 | X180545000Y-132715000D03*
156 | X180545000Y-131445000D03*
157 | X180545000Y-130175000D03*
158 | X180545000Y-128905000D03*
159 | X180545000Y-127635000D03*
160 | X180545000Y-126365000D03*
161 | D22*
162 | X142240000Y-125730000D03*
163 | X144780000Y-125730000D03*
164 | X147320000Y-125730000D03*
165 | X149860000Y-125730000D03*
166 | X152400000Y-125730000D03*
167 | X154940000Y-125730000D03*
168 | X157480000Y-125730000D03*
169 | X160020000Y-125730000D03*
170 | X160020000Y-102870000D03*
171 | X157480000Y-102870000D03*
172 | X154940000Y-102870000D03*
173 | X152400000Y-102870000D03*
174 | X149860000Y-102870000D03*
175 | X147320000Y-102870000D03*
176 | X144780000Y-102870000D03*
177 | X142240000Y-102870000D03*
178 | D23*
179 | X177611000Y-112395000D03*
180 | X177611000Y-113665000D03*
181 | X177611000Y-114935000D03*
182 | X177611000Y-116205000D03*
183 | X177611000Y-117475000D03*
184 | X177611000Y-118745000D03*
185 | X177611000Y-120015000D03*
186 | X182561000Y-120015000D03*
187 | X182561000Y-118745000D03*
188 | X182561000Y-117475000D03*
189 | X182561000Y-116205000D03*
190 | X182561000Y-114935000D03*
191 | X182561000Y-113665000D03*
192 | X182561000Y-112395000D03*
193 | D24*
194 | X193103500Y-108585000D03*
195 | D25*
196 | X193103500Y-111125000D03*
197 | X193103500Y-113665000D03*
198 | X193103500Y-116205000D03*
199 | X193103500Y-118745000D03*
200 | X193103500Y-121285000D03*
201 | X193103500Y-123825000D03*
202 | X193103500Y-126365000D03*
203 | X200723500Y-126365000D03*
204 | X200723500Y-123825000D03*
205 | X200723500Y-121285000D03*
206 | X200723500Y-118745000D03*
207 | X200723500Y-116205000D03*
208 | X200723500Y-113665000D03*
209 | X200723500Y-111125000D03*
210 | X200723500Y-108585000D03*
211 | D17*
212 | X170180000Y-90805000D03*
213 | X170180000Y-93345000D03*
214 | X170180000Y-95885000D03*
215 | X170180000Y-98425000D03*
216 | X170180000Y-100965000D03*
217 | X170180000Y-103505000D03*
218 | X170180000Y-106045000D03*
219 | X170180000Y-108585000D03*
220 | X188214000Y-108585000D03*
221 | X188214000Y-106045000D03*
222 | X188214000Y-103505000D03*
223 | X188214000Y-100965000D03*
224 | X188214000Y-98425000D03*
225 | X188214000Y-95885000D03*
226 | X188214000Y-93345000D03*
227 | X188214000Y-90805000D03*
228 | D26*
229 | X136778000Y-80899000D03*
230 | X136778000Y-82169000D03*
231 | X136778000Y-83439000D03*
232 | X136778000Y-84709000D03*
233 | X136778000Y-85979000D03*
234 | X136778000Y-87249000D03*
235 | X136778000Y-88519000D03*
236 | X136778000Y-89789000D03*
237 | X136778000Y-91059000D03*
238 | X136778000Y-92329000D03*
239 | X136778000Y-93599000D03*
240 | X136778000Y-94869000D03*
241 | X136778000Y-96139000D03*
242 | X136778000Y-97409000D03*
243 | X146178000Y-97409000D03*
244 | X146178000Y-96139000D03*
245 | X146178000Y-94869000D03*
246 | X146178000Y-93599000D03*
247 | X146178000Y-92329000D03*
248 | X146178000Y-91059000D03*
249 | X146178000Y-89789000D03*
250 | X146178000Y-88519000D03*
251 | X146178000Y-87249000D03*
252 | X146178000Y-85979000D03*
253 | X146178000Y-84709000D03*
254 | X146178000Y-83439000D03*
255 | X146178000Y-82169000D03*
256 | X146178000Y-80899000D03*
257 | D27*
258 | X184785000Y-87630000D03*
259 | D28*
260 | X177165000Y-87630000D03*
261 | D29*
262 | X175895000Y-83185000D03*
263 | D30*
264 | X173355000Y-83185000D03*
265 | D16*
266 | X164465000Y-89916000D03*
267 | X164465000Y-97536000D03*
268 | X171450000Y-120015000D03*
269 | X171450000Y-112395000D03*
270 | D31*
271 | X159450000Y-85770000D03*
272 | X189450000Y-85770000D03*
273 | X119450000Y-132020000D03*
274 | X159450000Y-132020000D03*
275 | X119450000Y-85770000D03*
276 | X189450000Y-132020000D03*
277 | M02*
278 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-F_Paste.gtp:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*
2 | G04 #@! TF.CreationDate,2024-04-17T15:14:35-06:00*
3 | G04 #@! TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Top*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:35*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10RoundRect,0.150000X-0.875000X-0.150000X0.875000X-0.150000X0.875000X0.150000X-0.875000X0.150000X0*%
33 | %ADD11RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
34 | %ADD12R,2.000000X0.600000*%
35 | G04 APERTURE END LIST*
36 | D10*
37 | X171245000Y-126365000D03*
38 | X171245000Y-127635000D03*
39 | X171245000Y-128905000D03*
40 | X171245000Y-130175000D03*
41 | X171245000Y-131445000D03*
42 | X171245000Y-132715000D03*
43 | X171245000Y-133985000D03*
44 | X171245000Y-135255000D03*
45 | X171245000Y-136525000D03*
46 | X171245000Y-137795000D03*
47 | X180545000Y-137795000D03*
48 | X180545000Y-136525000D03*
49 | X180545000Y-135255000D03*
50 | X180545000Y-133985000D03*
51 | X180545000Y-132715000D03*
52 | X180545000Y-131445000D03*
53 | X180545000Y-130175000D03*
54 | X180545000Y-128905000D03*
55 | X180545000Y-127635000D03*
56 | X180545000Y-126365000D03*
57 | D11*
58 | X177611000Y-112395000D03*
59 | X177611000Y-113665000D03*
60 | X177611000Y-114935000D03*
61 | X177611000Y-116205000D03*
62 | X177611000Y-117475000D03*
63 | X177611000Y-118745000D03*
64 | X177611000Y-120015000D03*
65 | X182561000Y-120015000D03*
66 | X182561000Y-118745000D03*
67 | X182561000Y-117475000D03*
68 | X182561000Y-116205000D03*
69 | X182561000Y-114935000D03*
70 | X182561000Y-113665000D03*
71 | X182561000Y-112395000D03*
72 | D12*
73 | X136778000Y-80899000D03*
74 | X136778000Y-82169000D03*
75 | X136778000Y-83439000D03*
76 | X136778000Y-84709000D03*
77 | X136778000Y-85979000D03*
78 | X136778000Y-87249000D03*
79 | X136778000Y-88519000D03*
80 | X136778000Y-89789000D03*
81 | X136778000Y-91059000D03*
82 | X136778000Y-92329000D03*
83 | X136778000Y-93599000D03*
84 | X136778000Y-94869000D03*
85 | X136778000Y-96139000D03*
86 | X136778000Y-97409000D03*
87 | X146178000Y-97409000D03*
88 | X146178000Y-96139000D03*
89 | X146178000Y-94869000D03*
90 | X146178000Y-93599000D03*
91 | X146178000Y-92329000D03*
92 | X146178000Y-91059000D03*
93 | X146178000Y-89789000D03*
94 | X146178000Y-88519000D03*
95 | X146178000Y-87249000D03*
96 | X146178000Y-85979000D03*
97 | X146178000Y-84709000D03*
98 | X146178000Y-83439000D03*
99 | X146178000Y-82169000D03*
100 | X146178000Y-80899000D03*
101 | M02*
102 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-NPTH-drl_map.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1*%
2 | %TF.CreationDate,2024-04-17T15:14:39-06:00*%
3 | %TF.ProjectId,RetroWiFiModem,52657472-6f57-4694-9669-4d6f64656d2e,0.3*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Drillmap*%
6 | %TF.FilePolarity,Positive*%
7 | %FSLAX45Y45*%
8 | G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 6.0.8+dfsg-1~bpo11+1+rpt1) date 2024-04-17 15:14:39*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | %ADD10C,0.150000*%
15 | %ADD11C,0.200000*%
16 | %ADD12C,0.320000*%
17 | G04 APERTURE END LIST*
18 | D10*
19 | X20970000Y-7583000D02*
20 | X20970000Y-14197000D01*
21 | X16248500Y-14197000D02*
22 | X10970000Y-14197000D01*
23 | X16911500Y-13682500D02*
24 | G75*
25 | G03*
26 | X16248500Y-13682500I-331500J0D01*
27 | G01*
28 | X16911500Y-14197000D02*
29 | X16911500Y-13682500D01*
30 | X11198060Y-8114100D02*
31 | X10970000Y-8114100D01*
32 | X10970000Y-8114100D02*
33 | X10970000Y-7583000D01*
34 | X11683200Y-8727110D02*
35 | X11198060Y-8727110D01*
36 | X16248500Y-8097500D02*
37 | G75*
38 | G03*
39 | X16911500Y-8097500I331500J0D01*
40 | G01*
41 | X16911500Y-8097500D02*
42 | X16911500Y-7583000D01*
43 | X11198060Y-8727110D02*
44 | X11198060Y-8114100D01*
45 | X11198060Y-10649890D02*
46 | X11683200Y-10649890D01*
47 | X11198060Y-11262900D02*
48 | X11198060Y-10649890D01*
49 | X16911500Y-7583000D02*
50 | X20970000Y-7583000D01*
51 | X16248500Y-13682500D02*
52 | X16248500Y-14197000D01*
53 | X16248500Y-7583000D02*
54 | X16248500Y-8097500D01*
55 | X20970000Y-14197000D02*
56 | X16911500Y-14197000D01*
57 | X10970000Y-7583000D02*
58 | X16248500Y-7583000D01*
59 | X11683200Y-10649890D02*
60 | X11683200Y-8727110D01*
61 | X10970000Y-14197000D02*
62 | X10970000Y-11262900D01*
63 | X10970000Y-11262900D02*
64 | X11198060Y-11262900D01*
65 | D11*
66 | D12*
67 | X11785000Y-8417000D02*
68 | X12105000Y-8737000D01*
69 | X12105000Y-8417000D02*
70 | X11785000Y-8737000D01*
71 | X11785000Y-13042000D02*
72 | X12105000Y-13362000D01*
73 | X12105000Y-13042000D02*
74 | X11785000Y-13362000D01*
75 | X15785000Y-8417000D02*
76 | X16105000Y-8737000D01*
77 | X16105000Y-8417000D02*
78 | X15785000Y-8737000D01*
79 | X15785000Y-13042000D02*
80 | X16105000Y-13362000D01*
81 | X16105000Y-13042000D02*
82 | X15785000Y-13362000D01*
83 | X18785000Y-8417000D02*
84 | X19105000Y-8737000D01*
85 | X19105000Y-8417000D02*
86 | X18785000Y-8737000D01*
87 | X18785000Y-13042000D02*
88 | X19105000Y-13362000D01*
89 | X19105000Y-13042000D02*
90 | X18785000Y-13362000D01*
91 | D11*
92 | X11220119Y-14514976D02*
93 | X11220119Y-14314976D01*
94 | X11267738Y-14314976D01*
95 | X11296309Y-14324500D01*
96 | X11315357Y-14343548D01*
97 | X11324881Y-14362595D01*
98 | X11334405Y-14400690D01*
99 | X11334405Y-14429262D01*
100 | X11324881Y-14467357D01*
101 | X11315357Y-14486405D01*
102 | X11296309Y-14505452D01*
103 | X11267738Y-14514976D01*
104 | X11220119Y-14514976D01*
105 | X11420119Y-14514976D02*
106 | X11420119Y-14381643D01*
107 | X11420119Y-14419738D02*
108 | X11429643Y-14400690D01*
109 | X11439167Y-14391167D01*
110 | X11458214Y-14381643D01*
111 | X11477262Y-14381643D01*
112 | X11543928Y-14514976D02*
113 | X11543928Y-14381643D01*
114 | X11543928Y-14314976D02*
115 | X11534405Y-14324500D01*
116 | X11543928Y-14334024D01*
117 | X11553452Y-14324500D01*
118 | X11543928Y-14314976D01*
119 | X11543928Y-14334024D01*
120 | X11667738Y-14514976D02*
121 | X11648690Y-14505452D01*
122 | X11639167Y-14486405D01*
123 | X11639167Y-14314976D01*
124 | X11772500Y-14514976D02*
125 | X11753452Y-14505452D01*
126 | X11743928Y-14486405D01*
127 | X11743928Y-14314976D01*
128 | X12001071Y-14514976D02*
129 | X12001071Y-14314976D01*
130 | X12067738Y-14457833D01*
131 | X12134405Y-14314976D01*
132 | X12134405Y-14514976D01*
133 | X12315357Y-14514976D02*
134 | X12315357Y-14410214D01*
135 | X12305833Y-14391167D01*
136 | X12286786Y-14381643D01*
137 | X12248690Y-14381643D01*
138 | X12229643Y-14391167D01*
139 | X12315357Y-14505452D02*
140 | X12296309Y-14514976D01*
141 | X12248690Y-14514976D01*
142 | X12229643Y-14505452D01*
143 | X12220119Y-14486405D01*
144 | X12220119Y-14467357D01*
145 | X12229643Y-14448309D01*
146 | X12248690Y-14438786D01*
147 | X12296309Y-14438786D01*
148 | X12315357Y-14429262D01*
149 | X12410595Y-14381643D02*
150 | X12410595Y-14581643D01*
151 | X12410595Y-14391167D02*
152 | X12429643Y-14381643D01*
153 | X12467738Y-14381643D01*
154 | X12486786Y-14391167D01*
155 | X12496309Y-14400690D01*
156 | X12505833Y-14419738D01*
157 | X12505833Y-14476881D01*
158 | X12496309Y-14495928D01*
159 | X12486786Y-14505452D01*
160 | X12467738Y-14514976D01*
161 | X12429643Y-14514976D01*
162 | X12410595Y-14505452D01*
163 | X12591548Y-14495928D02*
164 | X12601071Y-14505452D01*
165 | X12591548Y-14514976D01*
166 | X12582024Y-14505452D01*
167 | X12591548Y-14495928D01*
168 | X12591548Y-14514976D01*
169 | X12591548Y-14391167D02*
170 | X12601071Y-14400690D01*
171 | X12591548Y-14410214D01*
172 | X12582024Y-14400690D01*
173 | X12591548Y-14391167D01*
174 | X12591548Y-14410214D01*
175 | X10762500Y-14744500D02*
176 | X10962500Y-14944500D01*
177 | X10962500Y-14744500D02*
178 | X10762500Y-14944500D01*
179 | X11201071Y-14734976D02*
180 | X11324881Y-14734976D01*
181 | X11258214Y-14811167D01*
182 | X11286786Y-14811167D01*
183 | X11305833Y-14820690D01*
184 | X11315357Y-14830214D01*
185 | X11324881Y-14849262D01*
186 | X11324881Y-14896881D01*
187 | X11315357Y-14915928D01*
188 | X11305833Y-14925452D01*
189 | X11286786Y-14934976D01*
190 | X11229643Y-14934976D01*
191 | X11210595Y-14925452D01*
192 | X11201071Y-14915928D01*
193 | X11410595Y-14915928D02*
194 | X11420119Y-14925452D01*
195 | X11410595Y-14934976D01*
196 | X11401071Y-14925452D01*
197 | X11410595Y-14915928D01*
198 | X11410595Y-14934976D01*
199 | X11496309Y-14754024D02*
200 | X11505833Y-14744500D01*
201 | X11524881Y-14734976D01*
202 | X11572500Y-14734976D01*
203 | X11591548Y-14744500D01*
204 | X11601071Y-14754024D01*
205 | X11610595Y-14773071D01*
206 | X11610595Y-14792119D01*
207 | X11601071Y-14820690D01*
208 | X11486786Y-14934976D01*
209 | X11610595Y-14934976D01*
210 | X11734405Y-14734976D02*
211 | X11753452Y-14734976D01*
212 | X11772500Y-14744500D01*
213 | X11782024Y-14754024D01*
214 | X11791548Y-14773071D01*
215 | X11801071Y-14811167D01*
216 | X11801071Y-14858786D01*
217 | X11791548Y-14896881D01*
218 | X11782024Y-14915928D01*
219 | X11772500Y-14925452D01*
220 | X11753452Y-14934976D01*
221 | X11734405Y-14934976D01*
222 | X11715357Y-14925452D01*
223 | X11705833Y-14915928D01*
224 | X11696309Y-14896881D01*
225 | X11686786Y-14858786D01*
226 | X11686786Y-14811167D01*
227 | X11696309Y-14773071D01*
228 | X11705833Y-14754024D01*
229 | X11715357Y-14744500D01*
230 | X11734405Y-14734976D01*
231 | X11924881Y-14734976D02*
232 | X11943928Y-14734976D01*
233 | X11962976Y-14744500D01*
234 | X11972500Y-14754024D01*
235 | X11982024Y-14773071D01*
236 | X11991548Y-14811167D01*
237 | X11991548Y-14858786D01*
238 | X11982024Y-14896881D01*
239 | X11972500Y-14915928D01*
240 | X11962976Y-14925452D01*
241 | X11943928Y-14934976D01*
242 | X11924881Y-14934976D01*
243 | X11905833Y-14925452D01*
244 | X11896309Y-14915928D01*
245 | X11886786Y-14896881D01*
246 | X11877262Y-14858786D01*
247 | X11877262Y-14811167D01*
248 | X11886786Y-14773071D01*
249 | X11896309Y-14754024D01*
250 | X11905833Y-14744500D01*
251 | X11924881Y-14734976D01*
252 | X12077262Y-14934976D02*
253 | X12077262Y-14801643D01*
254 | X12077262Y-14820690D02*
255 | X12086786Y-14811167D01*
256 | X12105833Y-14801643D01*
257 | X12134405Y-14801643D01*
258 | X12153452Y-14811167D01*
259 | X12162976Y-14830214D01*
260 | X12162976Y-14934976D01*
261 | X12162976Y-14830214D02*
262 | X12172500Y-14811167D01*
263 | X12191548Y-14801643D01*
264 | X12220119Y-14801643D01*
265 | X12239167Y-14811167D01*
266 | X12248690Y-14830214D01*
267 | X12248690Y-14934976D01*
268 | X12343928Y-14934976D02*
269 | X12343928Y-14801643D01*
270 | X12343928Y-14820690D02*
271 | X12353452Y-14811167D01*
272 | X12372500Y-14801643D01*
273 | X12401071Y-14801643D01*
274 | X12420119Y-14811167D01*
275 | X12429643Y-14830214D01*
276 | X12429643Y-14934976D01*
277 | X12429643Y-14830214D02*
278 | X12439167Y-14811167D01*
279 | X12458214Y-14801643D01*
280 | X12486786Y-14801643D01*
281 | X12505833Y-14811167D01*
282 | X12515357Y-14830214D01*
283 | X12515357Y-14934976D01*
284 | X12905833Y-14725452D02*
285 | X12734405Y-14982595D01*
286 | X13162976Y-14734976D02*
287 | X13182024Y-14734976D01*
288 | X13201071Y-14744500D01*
289 | X13210595Y-14754024D01*
290 | X13220119Y-14773071D01*
291 | X13229643Y-14811167D01*
292 | X13229643Y-14858786D01*
293 | X13220119Y-14896881D01*
294 | X13210595Y-14915928D01*
295 | X13201071Y-14925452D01*
296 | X13182024Y-14934976D01*
297 | X13162976Y-14934976D01*
298 | X13143928Y-14925452D01*
299 | X13134405Y-14915928D01*
300 | X13124881Y-14896881D01*
301 | X13115357Y-14858786D01*
302 | X13115357Y-14811167D01*
303 | X13124881Y-14773071D01*
304 | X13134405Y-14754024D01*
305 | X13143928Y-14744500D01*
306 | X13162976Y-14734976D01*
307 | X13315357Y-14915928D02*
308 | X13324881Y-14925452D01*
309 | X13315357Y-14934976D01*
310 | X13305833Y-14925452D01*
311 | X13315357Y-14915928D01*
312 | X13315357Y-14934976D01*
313 | X13515357Y-14934976D02*
314 | X13401071Y-14934976D01*
315 | X13458214Y-14934976D02*
316 | X13458214Y-14734976D01*
317 | X13439167Y-14763548D01*
318 | X13420119Y-14782595D01*
319 | X13401071Y-14792119D01*
320 | X13591548Y-14754024D02*
321 | X13601071Y-14744500D01*
322 | X13620119Y-14734976D01*
323 | X13667738Y-14734976D01*
324 | X13686786Y-14744500D01*
325 | X13696309Y-14754024D01*
326 | X13705833Y-14773071D01*
327 | X13705833Y-14792119D01*
328 | X13696309Y-14820690D01*
329 | X13582024Y-14934976D01*
330 | X13705833Y-14934976D01*
331 | X13877262Y-14734976D02*
332 | X13839167Y-14734976D01*
333 | X13820119Y-14744500D01*
334 | X13810595Y-14754024D01*
335 | X13791548Y-14782595D01*
336 | X13782024Y-14820690D01*
337 | X13782024Y-14896881D01*
338 | X13791548Y-14915928D01*
339 | X13801071Y-14925452D01*
340 | X13820119Y-14934976D01*
341 | X13858214Y-14934976D01*
342 | X13877262Y-14925452D01*
343 | X13886786Y-14915928D01*
344 | X13896309Y-14896881D01*
345 | X13896309Y-14849262D01*
346 | X13886786Y-14830214D01*
347 | X13877262Y-14820690D01*
348 | X13858214Y-14811167D01*
349 | X13820119Y-14811167D01*
350 | X13801071Y-14820690D01*
351 | X13791548Y-14830214D01*
352 | X13782024Y-14849262D01*
353 | X14020119Y-14734976D02*
354 | X14039167Y-14734976D01*
355 | X14058214Y-14744500D01*
356 | X14067738Y-14754024D01*
357 | X14077262Y-14773071D01*
358 | X14086786Y-14811167D01*
359 | X14086786Y-14858786D01*
360 | X14077262Y-14896881D01*
361 | X14067738Y-14915928D01*
362 | X14058214Y-14925452D01*
363 | X14039167Y-14934976D01*
364 | X14020119Y-14934976D01*
365 | X14001071Y-14925452D01*
366 | X13991548Y-14915928D01*
367 | X13982024Y-14896881D01*
368 | X13972500Y-14858786D01*
369 | X13972500Y-14811167D01*
370 | X13982024Y-14773071D01*
371 | X13991548Y-14754024D01*
372 | X14001071Y-14744500D01*
373 | X14020119Y-14734976D01*
374 | X14162976Y-14734976D02*
375 | X14162976Y-14773071D01*
376 | X14239167Y-14734976D02*
377 | X14239167Y-14773071D01*
378 | X14534405Y-15011167D02*
379 | X14524881Y-15001643D01*
380 | X14505833Y-14973071D01*
381 | X14496309Y-14954024D01*
382 | X14486786Y-14925452D01*
383 | X14477262Y-14877833D01*
384 | X14477262Y-14839738D01*
385 | X14486786Y-14792119D01*
386 | X14496309Y-14763548D01*
387 | X14505833Y-14744500D01*
388 | X14524881Y-14715928D01*
389 | X14534405Y-14706405D01*
390 | X14696309Y-14734976D02*
391 | X14658214Y-14734976D01*
392 | X14639167Y-14744500D01*
393 | X14629643Y-14754024D01*
394 | X14610595Y-14782595D01*
395 | X14601071Y-14820690D01*
396 | X14601071Y-14896881D01*
397 | X14610595Y-14915928D01*
398 | X14620119Y-14925452D01*
399 | X14639167Y-14934976D01*
400 | X14677262Y-14934976D01*
401 | X14696309Y-14925452D01*
402 | X14705833Y-14915928D01*
403 | X14715357Y-14896881D01*
404 | X14715357Y-14849262D01*
405 | X14705833Y-14830214D01*
406 | X14696309Y-14820690D01*
407 | X14677262Y-14811167D01*
408 | X14639167Y-14811167D01*
409 | X14620119Y-14820690D01*
410 | X14610595Y-14830214D01*
411 | X14601071Y-14849262D01*
412 | X14953452Y-14934976D02*
413 | X14953452Y-14734976D01*
414 | X15039167Y-14934976D02*
415 | X15039167Y-14830214D01*
416 | X15029643Y-14811167D01*
417 | X15010595Y-14801643D01*
418 | X14982024Y-14801643D01*
419 | X14962976Y-14811167D01*
420 | X14953452Y-14820690D01*
421 | X15162976Y-14934976D02*
422 | X15143928Y-14925452D01*
423 | X15134405Y-14915928D01*
424 | X15124881Y-14896881D01*
425 | X15124881Y-14839738D01*
426 | X15134405Y-14820690D01*
427 | X15143928Y-14811167D01*
428 | X15162976Y-14801643D01*
429 | X15191548Y-14801643D01*
430 | X15210595Y-14811167D01*
431 | X15220119Y-14820690D01*
432 | X15229643Y-14839738D01*
433 | X15229643Y-14896881D01*
434 | X15220119Y-14915928D01*
435 | X15210595Y-14925452D01*
436 | X15191548Y-14934976D01*
437 | X15162976Y-14934976D01*
438 | X15343928Y-14934976D02*
439 | X15324881Y-14925452D01*
440 | X15315357Y-14906405D01*
441 | X15315357Y-14734976D01*
442 | X15496309Y-14925452D02*
443 | X15477262Y-14934976D01*
444 | X15439167Y-14934976D01*
445 | X15420119Y-14925452D01*
446 | X15410595Y-14906405D01*
447 | X15410595Y-14830214D01*
448 | X15420119Y-14811167D01*
449 | X15439167Y-14801643D01*
450 | X15477262Y-14801643D01*
451 | X15496309Y-14811167D01*
452 | X15505833Y-14830214D01*
453 | X15505833Y-14849262D01*
454 | X15410595Y-14868309D01*
455 | X15582024Y-14925452D02*
456 | X15601071Y-14934976D01*
457 | X15639167Y-14934976D01*
458 | X15658214Y-14925452D01*
459 | X15667738Y-14906405D01*
460 | X15667738Y-14896881D01*
461 | X15658214Y-14877833D01*
462 | X15639167Y-14868309D01*
463 | X15610595Y-14868309D01*
464 | X15591548Y-14858786D01*
465 | X15582024Y-14839738D01*
466 | X15582024Y-14830214D01*
467 | X15591548Y-14811167D01*
468 | X15610595Y-14801643D01*
469 | X15639167Y-14801643D01*
470 | X15658214Y-14811167D01*
471 | X15734405Y-15011167D02*
472 | X15743928Y-15001643D01*
473 | X15762976Y-14973071D01*
474 | X15772500Y-14954024D01*
475 | X15782024Y-14925452D01*
476 | X15791548Y-14877833D01*
477 | X15791548Y-14839738D01*
478 | X15782024Y-14792119D01*
479 | X15772500Y-14763548D01*
480 | X15762976Y-14744500D01*
481 | X15743928Y-14715928D01*
482 | X15734405Y-14706405D01*
483 | X16096309Y-15011167D02*
484 | X16086786Y-15001643D01*
485 | X16067738Y-14973071D01*
486 | X16058214Y-14954024D01*
487 | X16048690Y-14925452D01*
488 | X16039167Y-14877833D01*
489 | X16039167Y-14839738D01*
490 | X16048690Y-14792119D01*
491 | X16058214Y-14763548D01*
492 | X16067738Y-14744500D01*
493 | X16086786Y-14715928D01*
494 | X16096309Y-14706405D01*
495 | X16172500Y-14801643D02*
496 | X16172500Y-14934976D01*
497 | X16172500Y-14820690D02*
498 | X16182024Y-14811167D01*
499 | X16201071Y-14801643D01*
500 | X16229643Y-14801643D01*
501 | X16248690Y-14811167D01*
502 | X16258214Y-14830214D01*
503 | X16258214Y-14934976D01*
504 | X16382024Y-14934976D02*
505 | X16362976Y-14925452D01*
506 | X16353452Y-14915928D01*
507 | X16343928Y-14896881D01*
508 | X16343928Y-14839738D01*
509 | X16353452Y-14820690D01*
510 | X16362976Y-14811167D01*
511 | X16382024Y-14801643D01*
512 | X16410595Y-14801643D01*
513 | X16429643Y-14811167D01*
514 | X16439167Y-14820690D01*
515 | X16448690Y-14839738D01*
516 | X16448690Y-14896881D01*
517 | X16439167Y-14915928D01*
518 | X16429643Y-14925452D01*
519 | X16410595Y-14934976D01*
520 | X16382024Y-14934976D01*
521 | X16505833Y-14801643D02*
522 | X16582024Y-14801643D01*
523 | X16534405Y-14734976D02*
524 | X16534405Y-14906405D01*
525 | X16543928Y-14925452D01*
526 | X16562976Y-14934976D01*
527 | X16582024Y-14934976D01*
528 | X16801071Y-14801643D02*
529 | X16801071Y-15001643D01*
530 | X16801071Y-14811167D02*
531 | X16820119Y-14801643D01*
532 | X16858214Y-14801643D01*
533 | X16877262Y-14811167D01*
534 | X16886786Y-14820690D01*
535 | X16896310Y-14839738D01*
536 | X16896310Y-14896881D01*
537 | X16886786Y-14915928D01*
538 | X16877262Y-14925452D01*
539 | X16858214Y-14934976D01*
540 | X16820119Y-14934976D01*
541 | X16801071Y-14925452D01*
542 | X17010595Y-14934976D02*
543 | X16991548Y-14925452D01*
544 | X16982024Y-14906405D01*
545 | X16982024Y-14734976D01*
546 | X17172500Y-14934976D02*
547 | X17172500Y-14830214D01*
548 | X17162976Y-14811167D01*
549 | X17143929Y-14801643D01*
550 | X17105833Y-14801643D01*
551 | X17086786Y-14811167D01*
552 | X17172500Y-14925452D02*
553 | X17153452Y-14934976D01*
554 | X17105833Y-14934976D01*
555 | X17086786Y-14925452D01*
556 | X17077262Y-14906405D01*
557 | X17077262Y-14887357D01*
558 | X17086786Y-14868309D01*
559 | X17105833Y-14858786D01*
560 | X17153452Y-14858786D01*
561 | X17172500Y-14849262D01*
562 | X17239167Y-14801643D02*
563 | X17315357Y-14801643D01*
564 | X17267738Y-14734976D02*
565 | X17267738Y-14906405D01*
566 | X17277262Y-14925452D01*
567 | X17296310Y-14934976D01*
568 | X17315357Y-14934976D01*
569 | X17458214Y-14925452D02*
570 | X17439167Y-14934976D01*
571 | X17401071Y-14934976D01*
572 | X17382024Y-14925452D01*
573 | X17372500Y-14906405D01*
574 | X17372500Y-14830214D01*
575 | X17382024Y-14811167D01*
576 | X17401071Y-14801643D01*
577 | X17439167Y-14801643D01*
578 | X17458214Y-14811167D01*
579 | X17467738Y-14830214D01*
580 | X17467738Y-14849262D01*
581 | X17372500Y-14868309D01*
582 | X17639167Y-14934976D02*
583 | X17639167Y-14734976D01*
584 | X17639167Y-14925452D02*
585 | X17620119Y-14934976D01*
586 | X17582024Y-14934976D01*
587 | X17562976Y-14925452D01*
588 | X17553452Y-14915928D01*
589 | X17543929Y-14896881D01*
590 | X17543929Y-14839738D01*
591 | X17553452Y-14820690D01*
592 | X17562976Y-14811167D01*
593 | X17582024Y-14801643D01*
594 | X17620119Y-14801643D01*
595 | X17639167Y-14811167D01*
596 | X17715357Y-15011167D02*
597 | X17724881Y-15001643D01*
598 | X17743929Y-14973071D01*
599 | X17753452Y-14954024D01*
600 | X17762976Y-14925452D01*
601 | X17772500Y-14877833D01*
602 | X17772500Y-14839738D01*
603 | X17762976Y-14792119D01*
604 | X17753452Y-14763548D01*
605 | X17743929Y-14744500D01*
606 | X17724881Y-14715928D01*
607 | X17715357Y-14706405D01*
608 | M02*
609 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-NPTH.drl:
--------------------------------------------------------------------------------
1 | M48
2 | ; DRILL file {KiCad 6.0.8+dfsg-1~bpo11+1+rpt1} date Wed 17 Apr 2024 03:14:38 PM
3 | ; FORMAT={-:-/ absolute / metric / decimal}
4 | ; #@! TF.CreationDate,2024-04-17T15:14:38-06:00
5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1
6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH
7 | FMAT,2
8 | METRIC
9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
10 | T1C3.200
11 | %
12 | G90
13 | G05
14 | T1
15 | X119.45Y-85.77
16 | X119.45Y-132.02
17 | X159.45Y-85.77
18 | X159.45Y-132.02
19 | X189.45Y-85.77
20 | X189.45Y-132.02
21 | T0
22 | M30
23 |
--------------------------------------------------------------------------------
/kicad/gerbers/RetroWiFiModem-PTH.drl:
--------------------------------------------------------------------------------
1 | M48
2 | ; DRILL file {KiCad 6.0.8+dfsg-1~bpo11+1+rpt1} date Wed 17 Apr 2024 03:14:38 PM
3 | ; FORMAT={-:-/ absolute / metric / decimal}
4 | ; #@! TF.CreationDate,2024-04-17T15:14:38-06:00
5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,6.0.8+dfsg-1~bpo11+1+rpt1
6 | ; #@! TF.FileFunction,Plated,1,2,PTH
7 | FMAT,2
8 | METRIC
9 | ; #@! TA.AperFunction,Plated,PTH,ViaDrill
10 | T1C0.400
11 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill
12 | T2C0.762
13 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill
14 | T3C0.800
15 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill
16 | T4C1.000
17 | %
18 | G90
19 | G05
20 | T1
21 | X124.714Y-87.249
22 | X131.826Y-85.979
23 | X132.461Y-88.519
24 | X132.461Y-101.981
25 | X133.477Y-89.789
26 | X133.477Y-96.901
27 | X134.112Y-91.059
28 | X134.112Y-100.711
29 | X135.001Y-92.329
30 | X135.001Y-103.632
31 | X138.557Y-96.139
32 | X138.557Y-98.552
33 | X139.319Y-93.599
34 | X139.446Y-115.951
35 | X143.51Y-83.312
36 | X143.51Y-97.409
37 | X144.272Y-82.169
38 | X144.78Y-87.249
39 | X144.78Y-117.475
40 | X146.05Y-113.665
41 | X147.32Y-116.84
42 | X148.082Y-91.059
43 | X148.59Y-118.11
44 | X148.971Y-89.789
45 | X149.86Y-94.869
46 | X149.86Y-114.3
47 | X149.86Y-115.951
48 | X151.13Y-88.519
49 | X151.13Y-120.65
50 | X152.4Y-98.552
51 | X152.4Y-112.395
52 | X153.67Y-92.329
53 | X154.432Y-87.376
54 | X154.94Y-120.65
55 | X155.575Y-83.185
56 | X156.21Y-114.935
57 | X157.48Y-118.11
58 | X160.02Y-115.57
59 | X163.195Y-111.125
60 | X167.64Y-113.665
61 | X168.91Y-120.65
62 | X168.91Y-132.715
63 | X173.355Y-111.125
64 | X173.355Y-118.11
65 | X173.355Y-130.175
66 | X173.99Y-117.475
67 | X173.99Y-135.255
68 | X174.625Y-112.395
69 | X174.625Y-115.57
70 | X174.625Y-116.84
71 | X174.625Y-136.525
72 | X175.26Y-114.3
73 | X175.26Y-132.715
74 | X175.895Y-114.935
75 | X175.895Y-131.445
76 | X182.245Y-128.905
77 | X182.245Y-130.175
78 | X183.515Y-131.445
79 | X184.15Y-132.715
80 | X184.785Y-133.985
81 | X193.04Y-137.795
82 | X194.945Y-136.525
83 | X195.58Y-135.89
84 | T2
85 | X170.18Y-90.805
86 | X170.18Y-93.345
87 | X170.18Y-95.885
88 | X170.18Y-98.425
89 | X170.18Y-100.965
90 | X170.18Y-103.505
91 | X170.18Y-106.045
92 | X170.18Y-108.585
93 | X188.214Y-90.805
94 | X188.214Y-93.345
95 | X188.214Y-95.885
96 | X188.214Y-98.425
97 | X188.214Y-100.965
98 | X188.214Y-103.505
99 | X188.214Y-106.045
100 | X188.214Y-108.585
101 | T3
102 | X127.508Y-80.899
103 | X127.508Y-83.399
104 | X131.064Y-82.209
105 | X131.064Y-84.709
106 | X143.51Y-78.105
107 | X146.01Y-78.105
108 | X149.86Y-80.939
109 | X149.86Y-83.439
110 | X153.035Y-77.978
111 | X153.035Y-85.598
112 | X156.972Y-92.329
113 | X156.972Y-97.409
114 | X159.472Y-97.409
115 | X159.512Y-92.329
116 | X162.052Y-92.329
117 | X164.465Y-89.916
118 | X164.465Y-97.536
119 | X171.45Y-112.395
120 | X171.45Y-120.015
121 | X177.165Y-87.63
122 | X177.84Y-123.825
123 | X180.34Y-123.825
124 | X184.785Y-87.63
125 | X186.055Y-111.76
126 | X186.055Y-114.26
127 | X193.103Y-108.585
128 | X193.103Y-111.125
129 | X193.103Y-113.665
130 | X193.103Y-116.205
131 | X193.103Y-118.745
132 | X193.103Y-121.285
133 | X193.103Y-123.825
134 | X193.103Y-126.365
135 | X200.724Y-108.585
136 | X200.724Y-111.125
137 | X200.724Y-113.665
138 | X200.724Y-116.205
139 | X200.724Y-118.745
140 | X200.724Y-121.285
141 | X200.724Y-123.825
142 | X200.724Y-126.365
143 | T4
144 | X126.365Y-91.805
145 | X126.365Y-94.345
146 | X126.365Y-96.885
147 | X126.365Y-99.425
148 | X126.365Y-101.965
149 | X128.905Y-91.805
150 | X128.905Y-94.345
151 | X128.905Y-96.885
152 | X128.905Y-99.425
153 | X128.905Y-101.965
154 | X142.24Y-102.87
155 | X142.24Y-125.73
156 | X144.78Y-102.87
157 | X144.78Y-125.73
158 | X147.32Y-102.87
159 | X147.32Y-125.73
160 | X149.86Y-102.87
161 | X149.86Y-125.73
162 | X152.4Y-102.87
163 | X152.4Y-125.73
164 | X154.94Y-102.87
165 | X154.94Y-125.73
166 | X157.48Y-102.87
167 | X157.48Y-125.73
168 | X160.02Y-102.87
169 | X160.02Y-125.73
170 | X173.355Y-83.185
171 | X175.895Y-83.185
172 | X205.74Y-84.516
173 | X205.74Y-87.056
174 | X205.74Y-91.12
175 | X205.74Y-93.66
176 | X205.74Y-97.724
177 | X205.74Y-100.264
178 | X205.74Y-104.328
179 | X205.74Y-106.868
180 | X205.74Y-110.932
181 | X205.74Y-113.472
182 | X205.74Y-117.536
183 | X205.74Y-120.076
184 | X205.74Y-124.14
185 | X205.74Y-126.68
186 | X205.74Y-130.744
187 | X205.74Y-133.284
188 | T4
189 | X113.665Y-121.232G85X113.665Y-123.232
190 | G05
191 | X115.665Y-126.932G85X117.665Y-126.932
192 | G05
193 | X119.665Y-121.232G85X119.665Y-123.232
194 | G05
195 | T0
196 | M30
197 |
--------------------------------------------------------------------------------
/kicad/library/RetroWiFiModem.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | $CMP 1N4148
4 | D 100V 0.15A standard switching diode, DO-35
5 | K diode
6 | F https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf
7 | $ENDCMP
8 | #
9 | $CMP 1N4149
10 | D 75V Vrm 0.5A Ifsm standard switching diode, DO-35
11 | K diode
12 | F http://www.microsemi.com/document-portal/doc_view/11580-lds-0239
13 | $ENDCMP
14 | #
15 | $CMP 1N4151
16 | D 75V 0.5A standard switching diode, DO-35
17 | K diode
18 | F http://www.microsemi.com/document-portal/doc_view/11580-lds-0239
19 | $ENDCMP
20 | #
21 | $CMP 1N4448
22 | D 100V 0.15A High-speed standard diode, DO-35
23 | K diode
24 | F https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf
25 | $ENDCMP
26 | #
27 | $CMP 1N914
28 | D 100V 0.3A Small Signal Fast Switching Diode, DO-35
29 | K diode
30 | F http://www.vishay.com/docs/85622/1n914.pdf
31 | $ENDCMP
32 | #
33 | $CMP 74HC245
34 | D Octal BUS Transceivers, 3 State out
35 | K HCMOS BUS 3State
36 | $ENDCMP
37 | #
38 | $CMP 74LS245
39 | D Octal BUS Transceivers, 3 State out
40 | K TTL BUS 3State
41 | $ENDCMP
42 | #
43 | $CMP BA243
44 | D 20V 0.1A silicon planar diode for VHF tuner band selection, DO-35
45 | K diode
46 | F http://cdn-reichelt.de/documents/datenblatt/A400/BA243_TFK.pdf
47 | $ENDCMP
48 | #
49 | $CMP BA244
50 | D 20V 0.1A silicon planar diode for VHF tuner band selection, DO-35
51 | K diode
52 | F http://cdn-reichelt.de/documents/datenblatt/A400/BA243_TFK.pdf
53 | $ENDCMP
54 | #
55 | $CMP BA282
56 | D 35V 0.1A Band Switching Diode, DO-35
57 | K diode
58 | F http://docs-europe.electrocomponents.com/webdocs/1304/0900766b813040d6.pdf
59 | $ENDCMP
60 | #
61 | $CMP BA283
62 | D 35V 0.1A Band Switching Diode, DO-35
63 | K diode
64 | F http://docs-europe.electrocomponents.com/webdocs/1304/0900766b813040d6.pdf
65 | $ENDCMP
66 | #
67 | $CMP BAV17
68 | D 20V 0.25A Small Signal Switching Diode, High Voltage, DO-35
69 | K diode
70 | F http://www.vishay.com/docs/85543/bav17.pdf
71 | $ENDCMP
72 | #
73 | $CMP BAV18
74 | D 50V 0.25A Small Signal Switching Diode, High Voltage, DO-35
75 | K diode
76 | F http://www.vishay.com/docs/85543/bav17.pdf
77 | $ENDCMP
78 | #
79 | $CMP BAV19
80 | D 100V 0.25A Small Signal Switching Diode, High Voltage, DO-35
81 | K diode
82 | F http://www.vishay.com/docs/85543/bav17.pdf
83 | $ENDCMP
84 | #
85 | $CMP BAV20
86 | D 150V 0.25A Small Signal Switching Diode, High Voltage, DO-35
87 | K diode
88 | F http://www.vishay.com/docs/85543/bav17.pdf
89 | $ENDCMP
90 | #
91 | $CMP BAV21
92 | D 200V 0.25A Small Signal Switching Diode, High Voltage, DO-35
93 | K diode
94 | F http://www.vishay.com/docs/85543/bav17.pdf
95 | $ENDCMP
96 | #
97 | $CMP BAW75
98 | D 25V 0.45A Small Signal Switching Diode, DO-35
99 | K diode
100 | F http://www.vishay.com/docs/85550/baw75.pdf
101 | $ENDCMP
102 | #
103 | $CMP BAW76
104 | D 50V 0.3A Small Signal Fast Switching Diode, DO-35
105 | K diode
106 | F http://www.vishay.com/docs/85551/baw76.pdf
107 | $ENDCMP
108 | #
109 | $CMP BAY93
110 | D 20V 0.115A Very Fast Switching Diode, DO-35
111 | K diode
112 | F https://cdn-reichelt.de/documents/datenblatt/A400/BAY93_TFK.pdf
113 | $ENDCMP
114 | #
115 | $CMP R_Pack08_US_Split
116 | D 8 resistor network, parallel topology, split
117 | K R network parallel topology isolated
118 | F ~
119 | $ENDCMP
120 | #
121 | #End Doc Library
122 |
--------------------------------------------------------------------------------
/kicad/library/RetroWiFiModem.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # +3V3
5 | #
6 | DEF +3V3 #PWR 0 0 Y Y 1 F P
7 | F0 "#PWR" 0 -150 50 H I C CNN
8 | F1 "+3V3" 0 140 50 H V C CNN
9 | F2 "" 0 0 50 H V C CNN
10 | F3 "" 0 0 50 H V C CNN
11 | DRAW
12 | P 2 0 1 0 -30 50 0 100 N
13 | P 2 0 1 0 0 0 0 100 N
14 | P 2 0 1 0 0 100 30 50 N
15 | X +3V3 1 0 0 0 U 50 50 1 1 W N
16 | ENDDRAW
17 | ENDDEF
18 | #
19 | # +5V
20 | #
21 | DEF +5V #PWR 0 0 Y Y 1 F P
22 | F0 "#PWR" 0 -150 50 H I C CNN
23 | F1 "+5V" 0 140 50 H V C CNN
24 | F2 "" 0 0 50 H V C CNN
25 | F3 "" 0 0 50 H V C CNN
26 | DRAW
27 | P 2 0 1 0 -30 50 0 100 N
28 | P 2 0 1 0 0 0 0 100 N
29 | P 2 0 1 0 0 100 30 50 N
30 | X +5V 1 0 0 0 U 50 50 1 1 W N
31 | ENDDRAW
32 | ENDDEF
33 | #
34 | # 1N4148
35 | #
36 | DEF 1N4148 D 0 40 N N 1 F N
37 | F0 "D" 0 100 50 H V C CNN
38 | F1 "1N4148" 0 -100 50 H V C CNN
39 | F2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" 0 -175 50 H I C CNN
40 | F3 "" 0 0 50 H I C CNN
41 | ALIAS 1N4448 1N4149 1N4151 1N914 BA243 BA244 BA282 BA283 BAV17 BAV18 BAV19 BAV20 BAV21 BAW75 BAW76 BAY93
42 | $FPLIST
43 | D*DO?35*
44 | $ENDFPLIST
45 | DRAW
46 | P 2 0 1 10 -50 50 -50 -50 N
47 | P 2 0 1 0 50 0 -50 0 N
48 | P 4 0 1 10 50 50 50 -50 -50 0 50 50 N
49 | X K 1 -150 0 100 R 50 50 1 1 P
50 | X A 2 150 0 100 L 50 50 1 1 P
51 | ENDDRAW
52 | ENDDEF
53 | #
54 | # 74LS245A
55 | #
56 | DEF 74LS245A U 0 10 Y Y 1 F N
57 | F0 "U" 100 575 50 H V L BNN
58 | F1 "74LS245A" 50 -575 50 H V L TNN
59 | F2 "" 0 0 50 H V C CNN
60 | F3 "" 0 0 50 H V C CNN
61 | ALIAS 74LS245 74HC245 74HCT245
62 | DRAW
63 | S -400 550 400 -550 0 1 0 f
64 | P 3 0 1 0 50 100 0 -100 -100 -100 N
65 | P 4 0 1 0 100 100 -50 100 -100 -100 -150 -100 N
66 | X GND 10 0 -650 100 U 50 50 0 0 W
67 | X VCC 20 0 650 100 D 50 50 0 0 W
68 | X A->B 1 -500 -400 100 R 50 50 1 1 I
69 | X B7 11 -500 -200 100 R 50 50 1 1 B
70 | X B6 12 -500 -100 100 R 50 50 1 1 B
71 | X B5 13 -500 0 100 R 50 50 1 1 B
72 | X B4 14 -500 100 100 R 50 50 1 1 B
73 | X B3 15 -500 200 100 R 50 50 1 1 B
74 | X B2 16 -500 300 100 R 50 50 1 1 B
75 | X B1 17 -500 400 100 R 50 50 1 1 B
76 | X B0 18 -500 500 100 R 50 50 1 1 B
77 | X CE 19 -500 -500 100 R 50 50 1 1 I I
78 | X A0 2 500 500 100 L 50 50 1 1 B
79 | X A1 3 500 400 100 L 50 50 1 1 B
80 | X A2 4 500 300 100 L 50 50 1 1 B
81 | X A3 5 500 200 100 L 50 50 1 1 B
82 | X A4 6 500 100 100 L 50 50 1 1 B
83 | X A5 7 500 0 100 L 50 50 1 1 B
84 | X A6 8 500 -100 100 L 50 50 1 1 B
85 | X A7 9 500 -200 100 L 50 50 1 1 B
86 | ENDDRAW
87 | ENDDEF
88 | #
89 | # 74LS32
90 | #
91 | DEF 74LS32 U 0 30 Y Y 4 F N
92 | F0 "U" 0 50 50 H V C CNN
93 | F1 "74LS32" 0 -50 50 H V C CNN
94 | F2 "" 0 0 50 H V C CNN
95 | F3 "" 0 0 50 H V C CNN
96 | DRAW
97 | A -470 0 262 495 -495 0 1 0 N -300 199 -300 -198
98 | A -2 126 326 -897 -225 0 1 0 N 0 -199 299 2
99 | A 4 -120 320 906 221 0 1 0 N 2 200 300 0
100 | A 100 0 200 896 -896 0 2 0 N 101 200 101 -199
101 | P 2 0 1 0 -300 -200 0 -200 N
102 | P 2 0 1 0 -300 200 0 200 N
103 | P 4 0 2 0 100 200 -300 200 -300 -200 100 -200 N
104 | X VCC 14 -200 200 0 U 40 40 0 0 W N
105 | X GND 7 -200 -200 0 U 40 40 0 0 W N
106 | X ~ 1 -600 100 370 R 50 50 1 1 I
107 | X ~ 2 -600 -100 370 R 50 50 1 1 I
108 | X ~ 3 600 0 300 L 50 50 1 1 O
109 | X ~ 4 -600 100 370 R 50 50 2 1 I
110 | X ~ 5 -600 -100 370 R 50 50 2 1 I
111 | X ~ 6 600 0 300 L 50 50 2 1 O
112 | X ~ 10 -600 -100 370 R 50 50 3 1 I
113 | X ~ 8 600 0 300 L 50 50 3 1 O
114 | X ~ 9 -600 100 370 R 50 50 3 1 I
115 | X ~ 11 600 0 300 L 50 50 4 1 O
116 | X ~ 12 -600 100 370 R 50 50 4 1 I
117 | X ~ 13 -600 -100 370 R 50 50 4 1 I
118 | X ~ 1 -600 100 300 R 50 50 1 2 I I
119 | X ~ 2 -600 -100 300 R 50 50 1 2 I I
120 | X ~ 3 600 0 300 L 50 50 1 2 O I
121 | X ~ 4 -600 100 300 R 50 50 2 2 I I
122 | X ~ 5 -600 -100 300 R 50 50 2 2 I I
123 | X ~ 6 600 0 300 L 50 50 2 2 O I
124 | X ~ 10 -600 -100 300 R 50 50 3 2 I I
125 | X ~ 8 600 0 300 L 50 50 3 2 O I
126 | X ~ 9 -600 100 300 R 50 50 3 2 I I
127 | X ~ 11 600 0 300 L 50 50 4 2 O I
128 | X ~ 12 -600 100 300 R 50 50 4 2 I I
129 | X ~ 13 -600 -100 300 R 50 50 4 2 I I
130 | ENDDRAW
131 | ENDDEF
132 | #
133 | # BARREL_JACK
134 | #
135 | DEF BARREL_JACK CON 0 40 Y Y 1 F N
136 | F0 "CON" 0 250 50 H V C CNN
137 | F1 "BARREL_JACK" 0 -200 50 H V C CNN
138 | F2 "" 0 0 50 H V C CNN
139 | F3 "" 0 0 50 H V C CNN
140 | DRAW
141 | A -300 99 49 -900 1788 0 1 0 N -300 50 -350 100
142 | A -300 101 49 900 -1788 0 1 0 N -300 150 -350 100
143 | S 100 150 0 50 0 1 0 N
144 | P 2 0 1 0 -300 50 0 50 N
145 | P 2 0 1 0 0 150 -300 150 N
146 | P 3 0 1 0 100 0 -50 0 -50 -100 N
147 | P 5 0 1 0 100 -100 -150 -100 -200 -50 -250 -100 -350 -100 N
148 | X ~ 1 300 100 200 L 50 50 1 1 P
149 | X ~ 2 300 -100 200 L 50 50 1 1 P
150 | X ~ 3 300 0 200 L 50 50 1 1 P
151 | ENDDRAW
152 | ENDDEF
153 | #
154 | # CONN_02X05
155 | #
156 | DEF CONN_02X05 P 0 1 Y N 1 F N
157 | F0 "P" 0 300 50 H V C CNN
158 | F1 "CONN_02X05" 0 -300 50 H V C CNN
159 | F2 "" 0 -1200 50 H V C CNN
160 | F3 "" 0 -1200 50 H V C CNN
161 | $FPLIST
162 | Pin_Header_Straight_2X05
163 | Pin_Header_Angled_2X05
164 | Socket_Strip_Straight_2X05
165 | Socket_Strip_Angled_2X05
166 | $ENDFPLIST
167 | DRAW
168 | S -100 -195 -50 -205 0 1 0 N
169 | S -100 -95 -50 -105 0 1 0 N
170 | S -100 5 -50 -5 0 1 0 N
171 | S -100 105 -50 95 0 1 0 N
172 | S -100 205 -50 195 0 1 0 N
173 | S -100 250 100 -250 0 1 0 N
174 | S 50 -195 100 -205 0 1 0 N
175 | S 50 -95 100 -105 0 1 0 N
176 | S 50 5 100 -5 0 1 0 N
177 | S 50 105 100 95 0 1 0 N
178 | S 50 205 100 195 0 1 0 N
179 | X P1 1 -250 200 150 R 50 50 1 1 P
180 | X P10 10 250 -200 150 L 50 50 1 1 P
181 | X P2 2 250 200 150 L 50 50 1 1 P
182 | X P3 3 -250 100 150 R 50 50 1 1 P
183 | X P4 4 250 100 150 L 50 50 1 1 P
184 | X P5 5 -250 0 150 R 50 50 1 1 P
185 | X P6 6 250 0 150 L 50 50 1 1 P
186 | X P7 7 -250 -100 150 R 50 50 1 1 P
187 | X P8 8 250 -100 150 L 50 50 1 1 P
188 | X P9 9 -250 -200 150 R 50 50 1 1 P
189 | ENDDRAW
190 | ENDDEF
191 | #
192 | # C_Small
193 | #
194 | DEF C_Small C 0 10 N N 1 F N
195 | F0 "C" 10 70 50 H V L CNN
196 | F1 "C_Small" 10 -80 50 H V L CNN
197 | F2 "" 0 0 50 H V C CNN
198 | F3 "" 0 0 50 H V C CNN
199 | $FPLIST
200 | C?
201 | C_????_*
202 | C_????
203 | SMD*_c
204 | Capacitor*
205 | $ENDFPLIST
206 | DRAW
207 | P 2 0 1 13 -60 -20 60 -20 N
208 | P 2 0 1 12 -60 20 60 20 N
209 | X ~ 1 0 100 80 D 50 50 1 1 P
210 | X ~ 2 0 -100 80 U 50 50 1 1 P
211 | ENDDRAW
212 | ENDDEF
213 | #
214 | # DFPlayer_Mini
215 | #
216 | DEF DFPlayer_Mini U 0 40 Y Y 1 F N
217 | F0 "U" 0 550 60 H V C CNN
218 | F1 "DFPlayer_Mini" 0 450 60 H V C CNN
219 | F2 "" 0 -100 60 H I C CNN
220 | F3 "" 0 -100 60 H I C CNN
221 | DRAW
222 | S -400 400 400 -500 0 1 0 f
223 | X VCC 1 -550 300 150 R 50 50 1 1 W
224 | X GND 10 550 -300 150 L 50 50 1 1 W
225 | X IO_2 11 550 -200 150 L 50 50 1 1 I
226 | X ADKEY_1 12 550 -100 150 L 50 50 1 1 I
227 | X ADKEY_2 13 550 0 150 L 50 50 1 1 I
228 | X USB+ 14 550 100 150 L 50 50 1 1 B
229 | X USB- 15 550 200 150 L 50 50 1 1 B
230 | X BUSY 16 550 300 150 L 50 50 1 1 O
231 | X RX 2 -550 200 150 R 50 50 1 1 I
232 | X TX 3 -550 100 150 R 50 50 1 1 O
233 | X DAC_R 4 -550 0 150 R 50 50 1 1 O
234 | X DAC_L 5 -550 -100 150 R 50 50 1 1 O
235 | X SPK+ 6 -550 -200 150 R 50 50 1 1 O
236 | X GND 7 -550 -300 150 R 50 50 1 1 W
237 | X SPK- 8 -550 -400 150 R 50 50 1 1 O
238 | X IO_1 9 550 -400 150 L 50 50 1 1 I
239 | ENDDRAW
240 | ENDDEF
241 | #
242 | # GND
243 | #
244 | DEF GND #PWR 0 0 Y Y 1 F P
245 | F0 "#PWR" 0 -250 50 H I C CNN
246 | F1 "GND" 0 -150 50 H V C CNN
247 | F2 "" 0 0 50 H V C CNN
248 | F3 "" 0 0 50 H V C CNN
249 | DRAW
250 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
251 | X GND 1 0 0 0 D 50 50 1 1 W N
252 | ENDDRAW
253 | ENDDEF
254 | #
255 | # LED
256 | #
257 | DEF LED D 0 40 Y N 1 F N
258 | F0 "D" 0 100 50 H V C CNN
259 | F1 "LED" 0 -100 50 H V C CNN
260 | F2 "" 0 0 50 H V C CNN
261 | F3 "" 0 0 50 H V C CNN
262 | $FPLIST
263 | LED*
264 | $ENDFPLIST
265 | DRAW
266 | P 2 0 1 8 -50 -50 -50 50 N
267 | P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
268 | P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
269 | P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
270 | X K 1 -150 0 100 R 50 50 1 1 P
271 | X A 2 150 0 100 L 50 50 1 1 P
272 | ENDDRAW
273 | ENDDEF
274 | #
275 | # LM2931AZ-3.3_5.0
276 | #
277 | DEF LM2931AZ-3.3_5.0 U 0 30 Y Y 1 F N
278 | F0 "U" 0 250 50 H V C CNN
279 | F1 "LM2931AZ-3.3_5.0" 0 200 50 H V C CNN
280 | F2 "TO92-123" 0 100 50 H V C CIN
281 | F3 "" 0 0 50 H V C CNN
282 | ALIAS L4931CZ33-AP
283 | $FPLIST
284 | TO92-123
285 | $ENDFPLIST
286 | DRAW
287 | S -250 -150 250 150 0 1 10 f
288 | X VO 1 400 50 150 L 50 50 1 1 w
289 | X GND 2 0 -250 100 U 50 50 1 1 W
290 | X VI 3 -400 50 150 R 50 50 1 1 W
291 | ENDDRAW
292 | ENDDEF
293 | #
294 | # MAX3237CAI+
295 | #
296 | DEF MAX3237CAI+ U 0 10 Y Y 1 L N
297 | F0 "U" -400 950 60 H V C CNN
298 | F1 "MAX3237CAI+" -350 850 60 H V C CNN
299 | F2 "21-0056C_28_MXM" -500 750 60 H I C CNN
300 | F3 "" -750 600 60 H V C CNN
301 | $FPLIST
302 | 21-0056C_28_MXM
303 | 21-0056C_28_MXM-M
304 | 21-0056C_28_MXM-L
305 | $ENDFPLIST
306 | DRAW
307 | S -450 700 450 -900 0 1 0 f
308 | X C2+ 1 -550 600 100 R 59 59 1 1 P
309 | X T4OUT 10 -550 -300 100 R 59 59 1 1 O
310 | X R3IN 11 -550 -400 100 R 59 59 1 1 I
311 | X T5OUT 12 -550 -500 100 R 59 59 1 1 O
312 | X EN 13 -550 -700 100 R 59 59 1 1 I I
313 | X SHDN 14 -550 -800 100 R 59 59 1 1 I I
314 | X MBAUD 15 550 -800 100 L 59 59 1 1 I
315 | X R1OUTB 16 550 -700 100 L 59 59 1 1 O
316 | X T5IN 17 550 -500 100 L 59 59 1 1 I
317 | X R3OUT 18 550 -400 100 L 59 59 1 1 O
318 | X T4IN 19 550 -300 100 L 59 59 1 1 I
319 | X GND 2 0 -1000 100 U 59 59 1 1 W
320 | X R2OUT 20 550 -200 100 L 59 59 1 1 O
321 | X R1OUT 21 550 -100 100 L 59 59 1 1 O
322 | X T3IN 22 550 0 100 L 59 59 1 1 I
323 | X T2IN 23 550 100 100 L 59 59 1 1 I
324 | X T1IN 24 550 200 100 L 59 59 1 1 I
325 | X C1- 25 550 400 100 L 59 59 1 1 P
326 | X VCC 26 0 800 100 D 59 59 1 1 W
327 | X V+ 27 550 500 100 L 59 59 1 1 P
328 | X C1+ 28 550 600 100 L 59 59 1 1 P
329 | X C2- 3 -550 500 100 R 59 59 1 1 P
330 | X V- 4 -550 400 100 R 59 59 1 1 P
331 | X T1OUT 5 -550 200 100 R 59 59 1 1 O
332 | X T2OUT 6 -550 100 100 R 59 59 1 1 O
333 | X T3OUT 7 -550 0 100 R 59 59 1 1 O
334 | X R1IN 8 -550 -100 100 R 59 59 1 1 I
335 | X R2IN 9 -550 -200 100 R 59 59 1 1 I
336 | ENDDRAW
337 | ENDDEF
338 | #
339 | # PWR_FLAG
340 | #
341 | DEF PWR_FLAG #FLG 0 0 N N 1 F P
342 | F0 "#FLG" 0 95 50 H I C CNN
343 | F1 "PWR_FLAG" 0 180 50 H V C CNN
344 | F2 "" 0 0 50 H V C CNN
345 | F3 "" 0 0 50 H V C CNN
346 | DRAW
347 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
348 | X pwr 1 0 0 0 U 50 50 0 0 w
349 | ENDDRAW
350 | ENDDEF
351 | #
352 | # R_Pack08_US_Split
353 | #
354 | DEF R_Pack08_US_Split RN 0 0 Y N 8 F N
355 | F0 "RN" 80 0 50 V V C CNN
356 | F1 "R_Pack08_US_Split" 0 0 50 V V C CNN
357 | F2 "" -80 0 50 V I C CNN
358 | F3 "" 0 0 50 H I C CNN
359 | $FPLIST
360 | DIP*
361 | SOIC*
362 | R*Array*Concave*
363 | R*Array*Convex*
364 | $ENDFPLIST
365 | DRAW
366 | P 10 0 1 10 0 -70 0 -60 -30 -50 30 -30 -30 -10 30 10 -30 30 30 50 0 60 0 70 N
367 | X R1.1 1 0 -100 25 U 50 50 1 1 P
368 | X R1.2 16 0 100 25 D 50 50 1 1 P
369 | X R1.2 15 0 100 25 D 50 50 2 1 P
370 | X R1.1 2 0 -100 25 U 50 50 2 1 P
371 | X R1.2 14 0 100 25 D 50 50 3 1 P
372 | X R1.1 3 0 -100 25 U 50 50 3 1 P
373 | X R1.2 13 0 100 25 D 50 50 4 1 P
374 | X R1.1 4 0 -100 25 U 50 50 4 1 P
375 | X R1.2 12 0 100 25 D 50 50 5 1 P
376 | X R1.1 5 0 -100 25 U 50 50 5 1 P
377 | X R1.2 11 0 100 25 D 50 50 6 1 P
378 | X R1.1 6 0 -100 25 U 50 50 6 1 P
379 | X R1.2 10 0 100 25 D 50 50 7 1 P
380 | X R1.1 7 0 -100 25 U 50 50 7 1 P
381 | X R1.1 8 0 -100 25 U 50 50 8 1 P
382 | X R1.2 9 0 100 25 D 50 50 8 1 P
383 | ENDDRAW
384 | ENDDEF
385 | #
386 | # R_US
387 | #
388 | DEF R_US R 0 40 N N 1 F N
389 | F0 "R" 80 0 50 V V C CNN
390 | F1 "R_US" -80 0 50 V V C CNN
391 | F2 "Discret:R3-LARGE_PADS" 0 150 60 H I C CNN
392 | F3 "" 0 0 60 H I C CNN
393 | $FPLIST
394 | R?
395 | R_*
396 | $ENDFPLIST
397 | DRAW
398 | P 10 0 1 10 0 -70 0 -60 -30 -50 30 -30 -30 -10 30 10 -30 30 30 50 0 60 0 70 N
399 | X ~ 1 0 100 25 D 40 40 1 1 P
400 | X ~ 2 0 -100 25 U 40 40 1 1 P
401 | ENDDRAW
402 | ENDDEF
403 | #
404 | # WeMos_mini
405 | #
406 | DEF WeMos_mini U 0 40 Y Y 1 F N
407 | F0 "U" 0 500 60 H V C CNN
408 | F1 "WeMos_mini" 0 -500 60 H V C CNN
409 | F2 "" 550 -700 60 H V C CNN
410 | F3 "" 550 -700 60 H V C CNN
411 | DRAW
412 | S -300 450 300 -550 0 1 0 f
413 | X 5V 1 -500 350 200 R 50 50 1 1 W
414 | X A0 10 500 -250 200 L 50 50 1 1 B
415 | X D0 11 500 -150 200 L 50 50 1 1 B
416 | X D5 12 500 -50 200 L 50 50 1 1 B
417 | X D6 13 500 50 200 L 50 50 1 1 B
418 | X D7 14 500 150 200 L 50 50 1 1 B
419 | X D8 15 500 250 200 L 50 50 1 1 B
420 | X 3.3V 16 500 350 200 L 50 50 1 1 w
421 | X GND 2 -500 250 200 R 50 50 1 1 W
422 | X D4 3 -500 150 200 R 50 50 1 1 B
423 | X D3 4 -500 50 200 R 50 50 1 1 B
424 | X D2 5 -500 -50 200 R 50 50 1 1 B
425 | X D1 6 -500 -150 200 R 50 50 1 1 B
426 | X Rx 7 -500 -250 200 R 50 50 1 1 B
427 | X Tx 8 -500 -350 200 R 50 50 1 1 B
428 | X Rst 9 500 -350 200 L 50 50 1 1 B
429 | ENDDRAW
430 | ENDDEF
431 | #
432 | #End Library
433 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/BARREL_JACK.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Connectors:BARREL_JACK (layer F.Cu) (tedit 5E7CEBAA)
2 | (descr "DC Barrel Jack")
3 | (tags "Power Jack")
4 | (fp_text reference CON1 (at 10.09904 0 90) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value "5V centre +" (at 1.52 -5.86) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -4.0005 -4.50088) (end -4.0005 4.50088) (layer F.SilkS) (width 0.15))
11 | (fp_line (start -7.50062 -4.50088) (end -7.50062 4.50088) (layer F.SilkS) (width 0.15))
12 | (fp_line (start -7.50062 4.50088) (end 7.00024 4.50088) (layer F.SilkS) (width 0.15))
13 | (fp_line (start 7.00024 4.50088) (end 7.00024 -4.50088) (layer F.SilkS) (width 0.15))
14 | (fp_line (start 7.00024 -4.50088) (end -7.50062 -4.50088) (layer F.SilkS) (width 0.15))
15 | (pad 1 thru_hole rect (at 6.20014 0) (size 3.50012 3.50012) (drill oval 1 3) (layers *.Cu *.Mask))
16 | (pad 2 thru_hole rect (at 0.20066 0) (size 3.50012 3.50012) (drill oval 1 3) (layers *.Cu *.Mask))
17 | (pad 3 thru_hole rect (at 3.2004 4.699) (size 3.50012 3.50012) (drill oval 3 1) (layers *.Cu *.Mask))
18 | (model Connector_BarrelJack.3dshapes/AB2_PB_2MM_JACK.wrl
19 | (at (xyz 0 0 0))
20 | (scale (xyz 1 1 1))
21 | (rotate (xyz 0 0 0))
22 | )
23 | )
24 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/C3.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Discret:C3 (layer F.Cu) (tedit 5E9FBE4D)
2 | (descr "Capacitor 0.3 in.")
3 | (tags C)
4 | (fp_text reference C9 (at -1.27 1.905) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value 100nF (at 0 0.127) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
11 | (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
12 | (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
13 | (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
14 | (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
15 | (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
16 | (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
17 | (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
18 | (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8) (layers *.Cu *.Mask))
19 | (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8) (layers *.Cu *.Mask))
20 | (model Discret.3dshapes/R3.wrl
21 | (at (xyz 0 0 0))
22 | (scale (xyz 0.3 0.3 0.3))
23 | (rotate (xyz 0 0 0))
24 | )
25 | )
26 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/C_Disc_D3_P2.5.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Capacitors_THT:C_Disc_D3_P2.5 (layer F.Cu) (tedit 0)
2 | (descr "Capacitor 3mm Disc, Pitch 2.5mm")
3 | (tags Capacitor)
4 | (fp_text reference C8 (at 1.25 -2.5) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value 100nF (at 1.25 2.5) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -0.9 -1.5) (end 3.4 -1.5) (layer F.CrtYd) (width 0.05))
11 | (fp_line (start 3.4 -1.5) (end 3.4 1.5) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 3.4 1.5) (end -0.9 1.5) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -0.9 1.5) (end -0.9 -1.5) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -0.25 -1.25) (end 2.75 -1.25) (layer F.SilkS) (width 0.15))
15 | (fp_line (start 2.75 1.25) (end -0.25 1.25) (layer F.SilkS) (width 0.15))
16 | (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask))
17 | (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask))
18 | (model Capacitors_ThroughHole.3dshapes/C_Disc_D3_P2.5.wrl
19 | (at (xyz 0.0492126 0 0))
20 | (scale (xyz 1 1 1))
21 | (rotate (xyz 0 0 0))
22 | )
23 | )
24 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/C_Disc_D3_P5.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Capacitors_THT:C_Disc_D3_P5 (layer F.Cu) (tedit 5E9FBEAC)
2 | (descr "Capacitor 3mm Disc, Pitch 5.08mm")
3 | (tags Capacitor)
4 | (fp_text reference C6 (at -3.81 1.905) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value 100nF (at -0.29 2.03) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -3.42 -1.5) (end 3.42 -1.5) (layer F.CrtYd) (width 0.05))
11 | (fp_line (start 3.42 -1.5) (end 3.42 1.5) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 3.42 1.5) (end -3.42 1.5) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -3.42 1.5) (end -3.42 -1.5) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -2.77 -1.25) (end 2.77 -1.25) (layer F.SilkS) (width 0.15))
15 | (fp_line (start 2.77 1.25) (end -2.77 1.25) (layer F.SilkS) (width 0.15))
16 | (pad 1 thru_hole rect (at -2.54 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask))
17 | (pad 2 thru_hole circle (at 2.54 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask))
18 | (model Capacitors_ThroughHole.3dshapes/C_Disc_D6_P5.wrl
19 | (at (xyz 0 0 0))
20 | (scale (xyz 1 1 1))
21 | (rotate (xyz 0 0 0))
22 | )
23 | )
24 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/DFPlayerMini.kicad_mod:
--------------------------------------------------------------------------------
1 | (module DFPlayerMini (layer F.Cu) (tedit 63EC163E)
2 | (fp_text reference REF** (at 22.527 0.2) (layer F.SilkS)
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value DFPlayer_Mini (at 9.017 3.81) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_line (start -1.143 -1.27) (end 19.177 -1.27) (layer F.SilkS) (width 0.12))
9 | (fp_line (start 19.177 -1.27) (end 19.177 19.05) (layer F.SilkS) (width 0.12))
10 | (fp_line (start 19.177 19.05) (end -1.143 19.05) (layer F.SilkS) (width 0.12))
11 | (fp_line (start -1.143 19.05) (end -1.143 -1.27) (layer F.SilkS) (width 0.12))
12 |
13 | (fp_line (start -1.393 -1.52) (end 19.427 -1.52) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 19.427 -1.52) (end 19.427 19.30) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start 19.427 19.30) (end -1.393 19.30) (layer F.CrtYd) (width 0.05))
16 | (fp_line (start -1.393 19.30) (end -1.393 -1.52) (layer F.CrtYd) (width 0.05))
17 |
18 | (fp_poly (pts (xy 1.397 5.08) (xy 1.397 19.05) (xy 11.557 19.05) (xy 12.827 20.32)
19 | (xy 16.637 20.32) (xy 16.637 5.08)) (layer F.Fab) (width 0.10))
20 | (fp_poly (pts (xy 1.397 -1.27) (xy 1.397 1.27) (xy 2.667 1.27) (xy 2.667 -1.27)) (layer F.Fab) (width 0.10))
21 | (fp_poly (pts (xy 3.937 -1.27) (xy 3.937 1.27) (xy 5.207 1.27) (xy 5.207 -1.27)) (layer F.Fab) (width 0.10))
22 | (fp_poly (pts (xy 6.477 -1.27) (xy 6.477 1.27) (xy 7.747 1.27) (xy 7.747 -1.27)) (layer F.Fab) (width 0.10))
23 | (fp_poly (pts (xy 10.287 -1.27) (xy 10.287 1.27) (xy 11.557 1.27) (xy 11.557 -1.27)) (layer F.Fab) (width 0.10))
24 | (fp_poly (pts (xy 12.827 -1.27) (xy 12.827 1.27) (xy 14.097 1.27) (xy 14.097 -1.27)) (layer F.Fab) (width 0.10))
25 | (fp_poly (pts (xy 15.367 -1.27) (xy 15.367 1.27) (xy 16.637 1.27) (xy 16.637 -1.27)) (layer F.Fab) (width 0.10))
26 | (fp_text user REF** (at 22.557 0.2) (layer F.Fab)
27 | (effects (font (size 1 1) (thickness 0.12)))
28 | )
29 | (pad 1 thru_hole circle (at 0 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
30 | (pad 2 thru_hole circle (at 0 2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
31 | (pad 3 thru_hole circle (at 0 5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
32 | (pad 4 thru_hole circle (at 0 7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
33 | (pad 5 thru_hole circle (at 0 10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
34 | (pad 6 thru_hole circle (at 0 12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
35 | (pad 7 thru_hole circle (at 0 15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
36 | (pad 8 thru_hole circle (at 0 17.78) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
37 | (pad 9 thru_hole circle (at 18.034 17.78) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
38 | (pad 10 thru_hole circle (at 18.034 15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
39 | (pad 11 thru_hole circle (at 18.034 12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
40 | (pad 12 thru_hole circle (at 18.034 10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
41 | (pad 13 thru_hole circle (at 18.034 7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
42 | (pad 14 thru_hole circle (at 18.034 5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
43 | (pad 15 thru_hole circle (at 18.034 2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
44 | (pad 16 thru_hole circle (at 18.034 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
45 | )
46 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/DIP-16_W7.62mm_LongPads.kicad_mod:
--------------------------------------------------------------------------------
1 | (module DIP-16_W7.62mm_LongPads (layer F.Cu) (tedit 5A02E8C5)
2 | (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), LongPads")
3 | (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil LongPads")
4 | (fp_text reference REF** (at 3.81 -2.33) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value DIP-16_W7.62mm_LongPads (at 3.81 20.11) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 9.1 -1.55) (end -1.45 -1.55) (layer F.CrtYd) (width 0.05))
11 | (fp_line (start 9.1 19.3) (end 9.1 -1.55) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start -1.45 19.3) (end 9.1 19.3) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -1.45 -1.55) (end -1.45 19.3) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 6.06 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12))
15 | (fp_line (start 6.06 19.11) (end 6.06 -1.33) (layer F.SilkS) (width 0.12))
16 | (fp_line (start 1.56 19.11) (end 6.06 19.11) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 1.56 -1.33) (end 1.56 19.11) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 2.81 -1.33) (end 1.56 -1.33) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1))
20 | (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1))
21 | (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1))
22 | (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1))
23 | (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1))
24 | (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12))
25 | (fp_text user %R (at 3.81 8.89) (layer F.Fab)
26 | (effects (font (size 1 1) (thickness 0.15)))
27 | )
28 | (pad 1 thru_hole rect (at 0 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
29 | (pad 9 thru_hole oval (at 7.62 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
30 | (pad 2 thru_hole oval (at 0 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
31 | (pad 10 thru_hole oval (at 7.62 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
32 | (pad 3 thru_hole oval (at 0 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
33 | (pad 11 thru_hole oval (at 7.62 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
34 | (pad 4 thru_hole oval (at 0 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
35 | (pad 12 thru_hole oval (at 7.62 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
36 | (pad 5 thru_hole oval (at 0 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
37 | (pad 13 thru_hole oval (at 7.62 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
38 | (pad 6 thru_hole oval (at 0 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
39 | (pad 14 thru_hole oval (at 7.62 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
40 | (pad 7 thru_hole oval (at 0 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
41 | (pad 15 thru_hole oval (at 7.62 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
42 | (pad 8 thru_hole oval (at 0 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
43 | (pad 16 thru_hole oval (at 7.62 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask))
44 | (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl
45 | (at (xyz 0 0 0))
46 | (scale (xyz 1 1 1))
47 | (rotate (xyz 0 0 0))
48 | )
49 | )
50 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/D_DO-35_SOD27_P7.62mm_Horizontal.kicad_mod:
--------------------------------------------------------------------------------
1 | (module D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5)
2 | (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf")
3 | (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm")
4 | (fp_text reference REF** (at 3.81 -2.12) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value D_DO-35_SOD27_P7.62mm_Horizontal (at 3.81 2.12) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1))
11 | (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1))
12 | (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1))
13 | (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1))
14 | (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1))
15 | (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1))
16 | (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1))
17 | (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1))
18 | (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1))
19 | (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12))
20 | (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12))
21 | (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12))
22 | (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12))
23 | (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12))
26 | (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12))
28 | (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05))
29 | (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05))
30 | (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05))
31 | (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05))
32 | (pad 1 thru_hole rect (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at 7.62 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
34 | (fp_text user %R (at 4.11 0) (layer F.Fab)
35 | (effects (font (size 0.8 0.8) (thickness 0.12)))
36 | )
37 | (fp_text user K (at 0 -1.8) (layer F.Fab)
38 | (effects (font (size 1 1) (thickness 0.15)))
39 | )
40 | (fp_text user K (at 0 -1.8) (layer F.SilkS)
41 | (effects (font (size 1 1) (thickness 0.15)))
42 | )
43 | (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl
44 | (at (xyz 0 0 0))
45 | (scale (xyz 1 1 1))
46 | (rotate (xyz 0 0 0))
47 | )
48 | )
--------------------------------------------------------------------------------
/kicad/modules.pretty/IDC_Header_Straight_10pins.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Connectors:IDC_Header_Straight_10pins (layer F.Cu) (tedit 5E9FBF70)
2 | (descr "10 pins through hole IDC header")
3 | (tags "IDC header socket VASCH")
4 | (fp_text reference P1 (at 1.635 -7.62) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value RS232 (at 5.945 -7.215) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -5.08 -5.82) (end 15.24 -5.82) (layer F.SilkS) (width 0.15))
11 | (fp_line (start -4.54 -5.27) (end 14.68 -5.27) (layer F.SilkS) (width 0.15))
12 | (fp_line (start -5.08 3.28) (end 15.24 3.28) (layer F.SilkS) (width 0.15))
13 | (fp_line (start -4.54 2.73) (end 2.83 2.73) (layer F.SilkS) (width 0.15))
14 | (fp_line (start 7.33 2.73) (end 14.68 2.73) (layer F.SilkS) (width 0.15))
15 | (fp_line (start 2.83 2.73) (end 2.83 3.28) (layer F.SilkS) (width 0.15))
16 | (fp_line (start 7.33 2.73) (end 7.33 3.28) (layer F.SilkS) (width 0.15))
17 | (fp_line (start -5.08 -5.82) (end -5.08 3.28) (layer F.SilkS) (width 0.15))
18 | (fp_line (start -4.54 -5.27) (end -4.54 2.73) (layer F.SilkS) (width 0.15))
19 | (fp_line (start 15.24 -5.82) (end 15.24 3.28) (layer F.SilkS) (width 0.15))
20 | (fp_line (start 14.68 -5.27) (end 14.68 2.73) (layer F.SilkS) (width 0.15))
21 | (fp_line (start -5.08 -5.82) (end -4.54 -5.27) (layer F.SilkS) (width 0.15))
22 | (fp_line (start 15.24 -5.82) (end 14.68 -5.27) (layer F.SilkS) (width 0.15))
23 | (fp_line (start -5.08 3.28) (end -4.54 2.73) (layer F.SilkS) (width 0.15))
24 | (fp_line (start 15.24 3.28) (end 14.68 2.73) (layer F.SilkS) (width 0.15))
25 | (fp_line (start -5.35 -6.05) (end 15.5 -6.05) (layer F.CrtYd) (width 0.05))
26 | (fp_line (start 15.5 -6.05) (end 15.5 3.55) (layer F.CrtYd) (width 0.05))
27 | (fp_line (start 15.5 3.55) (end -5.35 3.55) (layer F.CrtYd) (width 0.05))
28 | (fp_line (start -5.35 3.55) (end -5.35 -6.05) (layer F.CrtYd) (width 0.05))
29 | (pad 1 thru_hole rect (at 0 0) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
30 | (pad 2 thru_hole oval (at 0 -2.54) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
31 | (pad 3 thru_hole oval (at 2.54 0) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
32 | (pad 4 thru_hole oval (at 2.54 -2.54) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
33 | (pad 5 thru_hole oval (at 5.08 0) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
34 | (pad 6 thru_hole oval (at 5.08 -2.54) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
35 | (pad 7 thru_hole oval (at 7.62 0) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
36 | (pad 8 thru_hole oval (at 7.62 -2.54) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
37 | (pad 9 thru_hole oval (at 10.16 0) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
38 | (pad 10 thru_hole oval (at 10.16 -2.54) (size 1.7272 1.7272) (drill 1) (layers *.Cu *.Mask))
39 | (model Pin_Headers.3dshapes/Pin_Header_Straight_2x05.wrl
40 | (at (xyz 0.2 0.05 0))
41 | (scale (xyz 1 1 1))
42 | (rotate (xyz 0 0 0))
43 | )
44 | )
45 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/LED-3MM.kicad_mod:
--------------------------------------------------------------------------------
1 | (module LED-3MM (layer F.Cu) (tedit 63DEDF05)
2 | (descr "LED 3mm round vertical")
3 | (tags "LED 3mm round vertical")
4 | (fp_text reference D8 (at 1.91 3.06) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value DSR (at 1.3 -2.9) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -0.199 -1.28) (end -0.199 -1.1) (layer F.SilkS) (width 0.15))
11 | (fp_line (start -0.199 1.314) (end -0.199 1.114) (layer F.SilkS) (width 0.15))
12 | (fp_line (start -1.2 -2.2) (end -1.2 2.3) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start 3.8 -2.2) (end -1.2 -2.2) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 3.8 2.3) (end 3.8 -2.2) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -1.2 2.3) (end 3.8 2.3) (layer F.CrtYd) (width 0.05))
16 | (fp_arc (start 1.301 0.034) (end -0.199 -1.286) (angle 108.5) (layer F.SilkS) (width 0.15))
17 | (fp_arc (start 1.301 0.034) (end 0.25 -1.1) (angle 85.7) (layer F.SilkS) (width 0.15))
18 | (fp_arc (start 1.311 0.034) (end 3.051 0.994) (angle 110) (layer F.SilkS) (width 0.15))
19 | (fp_arc (start 1.301 0.034) (end 2.335 1.094) (angle 87.5) (layer F.SilkS) (width 0.15))
20 | (fp_text user K (at -1.69 1.74) (layer F.SilkS)
21 | (effects (font (size 1 1) (thickness 0.15)))
22 | )
23 | (pad 1 thru_hole rect (at 0 0 90) (size 2 2) (drill 1) (layers *.Cu *.Mask))
24 | (pad 2 thru_hole circle (at 2.54 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
25 | (model LED_THT.3dshapes/LED_SideEmitter_Rectangular_W4.5mm_H4.8mm.wrl
26 | (at (xyz 0 0 0))
27 | (scale (xyz 1 1 1))
28 | (rotate (xyz 0 0 0))
29 | )
30 | )
31 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/MountingHole_3.2mm_Hammond_1593.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Mounting_Holes:MountingHole_3.2mm_Hammond_1593 (layer F.Cu) (tedit 5E753046)
2 | (descr "Mounting Hole 3.2mm, no annular, Hammond 1593")
3 | (tags "mounting hole 3.2mm no annular Hammond 1593")
4 | (fp_text reference "" (at 0 -4.2) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value "" (at 0 4.2) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_circle (center 0 0) (end 2.71 0) (layer Cmts.User) (width 0.15))
11 | (fp_circle (center 0 0) (end 2.96 0) (layer F.CrtYd) (width 0.05))
12 | (pad 1 np_thru_hole circle (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask))
13 | )
14 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/PinHeader_1x02_P2.54mm_Vertical.kicad_mod:
--------------------------------------------------------------------------------
1 | (module PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC)
2 | (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row")
3 | (tags "Through hole pin header THT 1x02 2.54mm single row")
4 | (fp_text reference REF** (at 0 -2.33) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value PinHeader_1x02_P2.54mm_Vertical (at 0 4.87) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
11 | (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12))
15 | (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12))
16 | (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12))
19 | (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1))
21 | (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1))
22 | (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1))
23 | (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1))
24 | (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1))
25 | (fp_text user %R (at 0 1.27 90) (layer F.Fab)
26 | (effects (font (size 1 1) (thickness 0.15)))
27 | )
28 | (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
29 | (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
30 | (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl
31 | (at (xyz 0 0 0))
32 | (scale (xyz 1 1 1))
33 | (rotate (xyz 0 0 0))
34 | )
35 | )
36 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/R3.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Discret:R3 (layer F.Cu) (tedit 5E9FBE4D)
2 | (descr "Resistor 0.3 in")
3 | (tags R)
4 | (fp_text reference R9 (at -1.27 1.905) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value 10K (at 0 0.127) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.15))
11 | (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.15))
12 | (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.15))
13 | (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.15))
14 | (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.15))
15 | (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.15))
16 | (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
17 | (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
18 | (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8) (layers *.Cu *.Mask))
19 | (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8) (layers *.Cu *.Mask))
20 | (model Discret.3dshapes/R3.wrl
21 | (at (xyz 0 0 0))
22 | (scale (xyz 0.3 0.3 0.3))
23 | (rotate (xyz 0 0 0))
24 | )
25 | )
26 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/SOIC-14_3.9x8.7mm_P1.27mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module SOIC-14_3.9x8.7mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1)
2 | (descr "SOIC, 14 Pin (JEDEC MS-012AB, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_14.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
3 | (tags "SOIC SO")
4 | (attr smd)
5 | (fp_text reference REF** (at 0 -5.28) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value SOIC-14_3.9x8.7mm_P1.27mm (at 0 5.28) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 0 4.435) (end 1.95 4.435) (layer F.SilkS) (width 0.12))
12 | (fp_line (start 0 4.435) (end -1.95 4.435) (layer F.SilkS) (width 0.12))
13 | (fp_line (start 0 -4.435) (end 1.95 -4.435) (layer F.SilkS) (width 0.12))
14 | (fp_line (start 0 -4.435) (end -3.45 -4.435) (layer F.SilkS) (width 0.12))
15 | (fp_line (start -0.975 -4.325) (end 1.95 -4.325) (layer F.Fab) (width 0.1))
16 | (fp_line (start 1.95 -4.325) (end 1.95 4.325) (layer F.Fab) (width 0.1))
17 | (fp_line (start 1.95 4.325) (end -1.95 4.325) (layer F.Fab) (width 0.1))
18 | (fp_line (start -1.95 4.325) (end -1.95 -3.35) (layer F.Fab) (width 0.1))
19 | (fp_line (start -1.95 -3.35) (end -0.975 -4.325) (layer F.Fab) (width 0.1))
20 | (fp_line (start -3.7 -4.58) (end -3.7 4.58) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start -3.7 4.58) (end 3.7 4.58) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 3.7 4.58) (end 3.7 -4.58) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 3.7 -4.58) (end -3.7 -4.58) (layer F.CrtYd) (width 0.05))
24 | (pad 1 smd roundrect (at -2.475 -3.81) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
25 | (pad 2 smd roundrect (at -2.475 -2.54) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
26 | (pad 3 smd roundrect (at -2.475 -1.27) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
27 | (pad 4 smd roundrect (at -2.475 0) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
28 | (pad 5 smd roundrect (at -2.475 1.27) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
29 | (pad 6 smd roundrect (at -2.475 2.54) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
30 | (pad 7 smd roundrect (at -2.475 3.81) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
31 | (pad 8 smd roundrect (at 2.475 3.81) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
32 | (pad 9 smd roundrect (at 2.475 2.54) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
33 | (pad 10 smd roundrect (at 2.475 1.27) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
34 | (pad 11 smd roundrect (at 2.475 0) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
35 | (pad 12 smd roundrect (at 2.475 -1.27) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
36 | (pad 13 smd roundrect (at 2.475 -2.54) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
37 | (pad 14 smd roundrect (at 2.475 -3.81) (size 1.95 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
38 | (fp_text user %R (at 0 0) (layer F.Fab)
39 | (effects (font (size 0.98 0.98) (thickness 0.15)))
40 | )
41 | (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-14_3.9x8.7mm_P1.27mm.wrl
42 | (at (xyz 0 0 0))
43 | (scale (xyz 1 1 1))
44 | (rotate (xyz 0 0 0))
45 | )
46 | )
--------------------------------------------------------------------------------
/kicad/modules.pretty/SOIC-20W_7.5x12.8mm_P1.27mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module SOIC-20W_7.5x12.8mm_P1.27mm (layer F.Cu) (tedit 5D9F72B1)
2 | (descr "SOIC, 20 Pin (JEDEC MS-013AC, https://www.analog.com/media/en/package-pcb-resources/package/233848rw_20.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
3 | (tags "SOIC SO")
4 | (attr smd)
5 | (fp_text reference REF** (at 0 -7.35) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value SOIC-20W_7.5x12.8mm_P1.27mm (at 0 7.35) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 0 6.51) (end 3.86 6.51) (layer F.SilkS) (width 0.12))
12 | (fp_line (start 3.86 6.51) (end 3.86 6.275) (layer F.SilkS) (width 0.12))
13 | (fp_line (start 0 6.51) (end -3.86 6.51) (layer F.SilkS) (width 0.12))
14 | (fp_line (start -3.86 6.51) (end -3.86 6.275) (layer F.SilkS) (width 0.12))
15 | (fp_line (start 0 -6.51) (end 3.86 -6.51) (layer F.SilkS) (width 0.12))
16 | (fp_line (start 3.86 -6.51) (end 3.86 -6.275) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 0 -6.51) (end -3.86 -6.51) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -3.86 -6.51) (end -3.86 -6.275) (layer F.SilkS) (width 0.12))
19 | (fp_line (start -3.86 -6.275) (end -5.675 -6.275) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -2.75 -6.4) (end 3.75 -6.4) (layer F.Fab) (width 0.1))
21 | (fp_line (start 3.75 -6.4) (end 3.75 6.4) (layer F.Fab) (width 0.1))
22 | (fp_line (start 3.75 6.4) (end -3.75 6.4) (layer F.Fab) (width 0.1))
23 | (fp_line (start -3.75 6.4) (end -3.75 -5.4) (layer F.Fab) (width 0.1))
24 | (fp_line (start -3.75 -5.4) (end -2.75 -6.4) (layer F.Fab) (width 0.1))
25 | (fp_line (start -5.93 -6.65) (end -5.93 6.65) (layer F.CrtYd) (width 0.05))
26 | (fp_line (start -5.93 6.65) (end 5.93 6.65) (layer F.CrtYd) (width 0.05))
27 | (fp_line (start 5.93 6.65) (end 5.93 -6.65) (layer F.CrtYd) (width 0.05))
28 | (fp_line (start 5.93 -6.65) (end -5.93 -6.65) (layer F.CrtYd) (width 0.05))
29 | (pad 1 smd roundrect (at -4.65 -5.715) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
30 | (pad 2 smd roundrect (at -4.65 -4.445) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
31 | (pad 3 smd roundrect (at -4.65 -3.175) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
32 | (pad 4 smd roundrect (at -4.65 -1.905) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
33 | (pad 5 smd roundrect (at -4.65 -0.635) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
34 | (pad 6 smd roundrect (at -4.65 0.635) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
35 | (pad 7 smd roundrect (at -4.65 1.905) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
36 | (pad 8 smd roundrect (at -4.65 3.175) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
37 | (pad 9 smd roundrect (at -4.65 4.445) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
38 | (pad 10 smd roundrect (at -4.65 5.715) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
39 | (pad 11 smd roundrect (at 4.65 5.715) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
40 | (pad 12 smd roundrect (at 4.65 4.445) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
41 | (pad 13 smd roundrect (at 4.65 3.175) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
42 | (pad 14 smd roundrect (at 4.65 1.905) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
43 | (pad 15 smd roundrect (at 4.65 0.635) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
44 | (pad 16 smd roundrect (at 4.65 -0.635) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
45 | (pad 17 smd roundrect (at 4.65 -1.905) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
46 | (pad 18 smd roundrect (at 4.65 -3.175) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
47 | (pad 19 smd roundrect (at 4.65 -4.445) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
48 | (pad 20 smd roundrect (at 4.65 -5.715) (size 2.05 0.6) (layers F.Cu F.Mask F.Paste) (roundrect_rratio 0.25))
49 | (fp_text user %R (at 0 0) (layer F.Fab)
50 | (effects (font (size 1 1) (thickness 0.15)))
51 | )
52 | (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-20W_7.5x12.8mm_P1.27mm.wrl
53 | (at (xyz 0 0 0))
54 | (scale (xyz 1 1 1))
55 | (rotate (xyz 0 0 0))
56 | )
57 | )
--------------------------------------------------------------------------------
/kicad/modules.pretty/SOIC-28W_7.5x17.9mm_Pitch1.27mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Housings_SOIC:SOIC-28W_7.5x17.9mm_Pitch1.27mm (layer F.Cu) (tedit 57503567)
2 | (descr "28-Lead Plastic Small Outline (SO) - Wide, 7.50 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)")
3 | (tags "SOIC 1.27")
4 | (attr smd)
5 | (fp_text reference U1 (at 0 -10.05) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value MAX3237CAI+ (at 0 10.05) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start -2.75 -8.95) (end 3.75 -8.95) (layer F.Fab) (width 0.15))
12 | (fp_line (start 3.75 -8.95) (end 3.75 8.95) (layer F.Fab) (width 0.15))
13 | (fp_line (start 3.75 8.95) (end -3.75 8.95) (layer F.Fab) (width 0.15))
14 | (fp_line (start -3.75 8.95) (end -3.75 -7.95) (layer F.Fab) (width 0.15))
15 | (fp_line (start -3.75 -7.95) (end -2.75 -8.95) (layer F.Fab) (width 0.15))
16 | (fp_line (start -5.95 -9.3) (end -5.95 9.3) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start 5.95 -9.3) (end 5.95 9.3) (layer F.CrtYd) (width 0.05))
18 | (fp_line (start -5.95 -9.3) (end 5.95 -9.3) (layer F.CrtYd) (width 0.05))
19 | (fp_line (start -5.95 9.3) (end 5.95 9.3) (layer F.CrtYd) (width 0.05))
20 | (fp_line (start -3.875 -9.125) (end -3.875 -8.875) (layer F.SilkS) (width 0.15))
21 | (fp_line (start 3.875 -9.125) (end 3.875 -8.78) (layer F.SilkS) (width 0.15))
22 | (fp_line (start 3.875 9.125) (end 3.875 8.78) (layer F.SilkS) (width 0.15))
23 | (fp_line (start -3.875 9.125) (end -3.875 8.78) (layer F.SilkS) (width 0.15))
24 | (fp_line (start -3.875 -9.125) (end 3.875 -9.125) (layer F.SilkS) (width 0.15))
25 | (fp_line (start -3.875 9.125) (end 3.875 9.125) (layer F.SilkS) (width 0.15))
26 | (fp_line (start -3.875 -8.875) (end -5.7 -8.875) (layer F.SilkS) (width 0.15))
27 | (pad 1 smd rect (at -4.7 -8.255) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
28 | (pad 2 smd rect (at -4.7 -6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
29 | (pad 3 smd rect (at -4.7 -5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
30 | (pad 4 smd rect (at -4.7 -4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
31 | (pad 5 smd rect (at -4.7 -3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
32 | (pad 6 smd rect (at -4.7 -1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
33 | (pad 7 smd rect (at -4.7 -0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
34 | (pad 8 smd rect (at -4.7 0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
35 | (pad 9 smd rect (at -4.7 1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
36 | (pad 10 smd rect (at -4.7 3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
37 | (pad 11 smd rect (at -4.7 4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
38 | (pad 12 smd rect (at -4.7 5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
39 | (pad 13 smd rect (at -4.7 6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
40 | (pad 14 smd rect (at -4.7 8.255) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
41 | (pad 15 smd rect (at 4.7 8.255) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
42 | (pad 16 smd rect (at 4.7 6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
43 | (pad 17 smd rect (at 4.7 5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
44 | (pad 18 smd rect (at 4.7 4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
45 | (pad 19 smd rect (at 4.7 3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
46 | (pad 20 smd rect (at 4.7 1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
47 | (pad 21 smd rect (at 4.7 0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
48 | (pad 22 smd rect (at 4.7 -0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
49 | (pad 23 smd rect (at 4.7 -1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
50 | (pad 24 smd rect (at 4.7 -3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
51 | (pad 25 smd rect (at 4.7 -4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
52 | (pad 26 smd rect (at 4.7 -5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
53 | (pad 27 smd rect (at 4.7 -6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
54 | (pad 28 smd rect (at 4.7 -8.255) (size 2 0.6) (layers F.Cu F.Paste F.Mask))
55 | (model Housings_SOIC.3dshapes/SOIC-28_7.5x17.9mm_Pitch1.27mm.wrl
56 | (at (xyz 0 0 0))
57 | (scale (xyz 1 1 1))
58 | (rotate (xyz 0 0 0))
59 | )
60 | )
61 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/TO-92_Inline_Wide.kicad_mod:
--------------------------------------------------------------------------------
1 | (module TO_SOT_Packages_THT:TO-92_Inline_Wide (layer F.Cu) (tedit 5E7CEB4D)
2 | (descr "TO-92 leads in-line, wide, drill 0.8mm (see NXP sot054_po.pdf)")
3 | (tags "to-92 sc-43 sc-43a sot54 PA33 transistor")
4 | (fp_text reference U4 (at 0 -4 180) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value "3.3V reg" (at 2.66 -2.46) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_arc (start 2.54 0) (end 0.84 1.7) (angle 20.5) (layer F.SilkS) (width 0.15))
11 | (fp_arc (start 2.54 0) (end 4.24 1.7) (angle -20.5) (layer F.SilkS) (width 0.15))
12 | (fp_line (start -1 1.95) (end -1 -2.65) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -1 1.95) (end 6.1 1.95) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 0.84 1.7) (end 4.24 1.7) (layer F.SilkS) (width 0.15))
15 | (fp_arc (start 2.54 0) (end 2.54 -2.4) (angle -65.55604127) (layer F.SilkS) (width 0.15))
16 | (fp_arc (start 2.54 0) (end 2.54 -2.4) (angle 65.55604127) (layer F.SilkS) (width 0.15))
17 | (fp_line (start -1 -2.65) (end 6.1 -2.65) (layer F.CrtYd) (width 0.05))
18 | (fp_line (start 6.1 1.95) (end 6.1 -2.65) (layer F.CrtYd) (width 0.05))
19 | (pad 2 thru_hole circle (at 2.54 0 90) (size 1.524 1.524) (drill 0.8) (layers *.Cu *.Mask))
20 | (pad 3 thru_hole circle (at 5.08 0 90) (size 1.524 1.524) (drill 0.8) (layers *.Cu *.Mask))
21 | (pad 1 thru_hole circle (at 0 0 90) (size 1.524 1.524) (drill 0.8) (layers *.Cu *.Mask))
22 | (model TO_SOT_Packages_THT.3dshapes/TO-92_Inline_Wide.wrl
23 | (at (xyz 0.1 0 0))
24 | (scale (xyz 1 1 1))
25 | (rotate (xyz 0 0 -90))
26 | )
27 | )
28 |
--------------------------------------------------------------------------------
/kicad/modules.pretty/wemos-d1-mini-with-pin-header-and-connector.kicad_mod:
--------------------------------------------------------------------------------
1 | (module WEMOS_D1_Mini:wemos-d1-mini-with-pin-header-and-connector (layer F.Cu) (tedit 5E7CEB0F)
2 | (fp_text reference U5 (at -19.3 0 90) (layer F.SilkS)
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value WeMos_mini_D1 (at 0 0) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_line (start -18.3 13.33) (end 14.78 13.33) (layer F.SilkS) (width 0.15))
9 | (fp_line (start 16.78 11.33) (end 16.78 -11.33) (layer F.SilkS) (width 0.15))
10 | (fp_line (start 14.78 -13.33) (end -11.3 -13.33) (layer F.SilkS) (width 0.15))
11 | (fp_line (start -18.3 -11.18) (end -18.3 -3.32) (layer F.SilkS) (width 0.15))
12 | (fp_line (start -18.3 -3.32) (end -17.3 -3.32) (layer F.SilkS) (width 0.15))
13 | (fp_line (start -17.3 -3.32) (end -17.3 4.9) (layer F.SilkS) (width 0.15))
14 | (fp_line (start -17.3 4.9) (end -18.3 4.9) (layer F.SilkS) (width 0.15))
15 | (fp_line (start -18.3 4.9) (end -18.3 13.329999) (layer F.SilkS) (width 0.15))
16 | (fp_line (start -11.48 -13.5) (end 14.85 -13.5) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start 16.94 -11.5) (end 16.94 11.5) (layer F.CrtYd) (width 0.05))
18 | (fp_line (start 14.94 13.5) (end -18.46 13.5) (layer F.CrtYd) (width 0.05))
19 | (fp_line (start -18.46 13.5) (end -18.46 -11.33) (layer F.CrtYd) (width 0.05))
20 | (fp_arc (start 14.78 -11.33) (end 14.78 -13.33) (angle 90) (layer F.SilkS) (width 0.15))
21 | (fp_arc (start 14.78 11.33) (end 16.78 11.33) (angle 90) (layer F.SilkS) (width 0.15))
22 | (fp_arc (start 14.94 11.5) (end 16.94 11.5) (angle 90) (layer F.CrtYd) (width 0.05))
23 | (fp_arc (start 14.94 -11.5) (end 14.85 -13.5) (angle 92.57657183) (layer F.CrtYd) (width 0.05))
24 | (fp_line (start -18.3 -11.18) (end -12.3 -11.18) (layer F.SilkS) (width 0.15))
25 | (fp_arc (start -12.3 -12.18) (end -11.3 -12.18) (angle 90) (layer F.SilkS) (width 0.15))
26 | (fp_line (start -11.3 -12.17) (end -11.3 -13.33) (layer F.SilkS) (width 0.15))
27 | (fp_line (start -11.3 -13.33) (end -11.3 -13.33) (layer F.SilkS) (width 0.15))
28 | (fp_line (start -11.48 -13.5) (end -11.48 -12.33) (layer F.CrtYd) (width 0.05))
29 | (fp_line (start -18.46 -11.33) (end -12.48 -11.33) (layer F.CrtYd) (width 0.05))
30 | (fp_arc (start -12.48 -12.33) (end -11.48 -12.33) (angle 90) (layer F.CrtYd) (width 0.05))
31 | (pad 16 thru_hole circle (at -8.89 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
32 | (pad 1 thru_hole circle (at -8.89 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
33 | (pad 15 thru_hole circle (at -6.35 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
34 | (pad 2 thru_hole circle (at -6.35 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
35 | (pad 14 thru_hole circle (at -3.81 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
36 | (pad 3 thru_hole circle (at -3.81 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
37 | (pad 13 thru_hole circle (at -1.27 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
38 | (pad 4 thru_hole circle (at -1.27 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
39 | (pad 12 thru_hole circle (at 1.27 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
40 | (pad 5 thru_hole circle (at 1.27 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
41 | (pad 11 thru_hole circle (at 3.81 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
42 | (pad 6 thru_hole circle (at 3.81 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
43 | (pad 10 thru_hole circle (at 6.35 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
44 | (pad 7 thru_hole circle (at 6.35 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
45 | (pad 9 thru_hole circle (at 8.89 -11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
46 | (pad 8 thru_hole circle (at 8.89 11.43) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
47 | )
48 |
--------------------------------------------------------------------------------
/kicad/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | )
3 |
--------------------------------------------------------------------------------
/sounds/0001.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0001.WAV
--------------------------------------------------------------------------------
/sounds/0002.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0002.WAV
--------------------------------------------------------------------------------
/sounds/0003.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0003.WAV
--------------------------------------------------------------------------------
/sounds/0004.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0004.WAV
--------------------------------------------------------------------------------
/sounds/0005.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0005.WAV
--------------------------------------------------------------------------------
/sounds/0006.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0006.WAV
--------------------------------------------------------------------------------
/sounds/0007.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0007.WAV
--------------------------------------------------------------------------------
/sounds/0008.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0008.WAV
--------------------------------------------------------------------------------
/sounds/0009.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0009.WAV
--------------------------------------------------------------------------------
/sounds/0010.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0010.WAV
--------------------------------------------------------------------------------
/sounds/0011.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0011.WAV
--------------------------------------------------------------------------------
/sounds/0012.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0012.WAV
--------------------------------------------------------------------------------
/sounds/0013.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0013.WAV
--------------------------------------------------------------------------------
/sounds/0014.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0014.WAV
--------------------------------------------------------------------------------
/sounds/0015.WAV:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mecparts/RetroWiFiModem/9a8162803bfed7d5cd0aee668d3483ef663a502d/sounds/0015.WAV
--------------------------------------------------------------------------------