├── .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 | ![Front Panel](images/Front%20Panel.jpg "Front Panel") 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 | ![Prototype](images/Prototype.jpg "Prototype") 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 | ![Interior](images/Interior.jpg "Interior") 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 | ![Back Panel](images/Back%20panel.jpg "Back Panel") 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 | ![Schematic](images/RetroWiFiModem.sch.png "Schematic") 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:

Preceding the host name or IP address with a +, = or - character overrides the ATNET setting for the period of the connection.

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.

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.

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.

221 | ATX?
ATX*n* | Control the amount of information displayed in the result codes. The default is X1 (extended codes).

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).

225 | AT&K?
AT&K*n* | Data flow control. Prevents the modem's buffers for received and transmitted from overflowing.

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.

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:

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.

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 --------------------------------------------------------------------------------