forked from M-Labs/web2019
Compare commits
21 Commits
144-no-res
...
master
Author | SHA1 | Date |
---|---|---|
Sebastien Bourdeauducq | a5a8589b28 | |
Sebastien Bourdeauducq | bb42788fd3 | |
Egor Savkin | f29807a913 | |
Egor Savkin | 9d9a4c9f5a | |
Egor Savkin | 92f7428ac8 | |
Egor Savkin | a163a269b9 | |
Egor Savkin | f087a00cee | |
Sébastien Bourdeauducq | f69102fa0e | |
Egor Savkin | 0d978c1e22 | |
Sébastien Bourdeauducq | 76bc87ce5c | |
Sébastien Bourdeauducq | 3987343e16 | |
Sébastien Bourdeauducq | 8a12d35c06 | |
Sébastien Bourdeauducq | d2ae816cb0 | |
Egor Savkin | bcdf005896 | |
Egor Savkin | b53e191528 | |
Egor Savkin | 52c05c2e2a | |
Egor Savkin | c7b0d5568c | |
Egor Savkin | 68677dce6e | |
Egor Savkin | b0ef9d07fc | |
Sébastien Bourdeauducq | cedf853301 | |
Egor Savkin | c5c723ae40 |
|
@ -33,6 +33,7 @@ Typical countries where this situation happens and suitable distributor contacts
|
|||
* China (mainland): kitty-zheng@kehua-trade.com
|
||||
* Japan: hishida@symphotony.com or h_yamamoto@autex-inc.co.jp
|
||||
* India: sale.sannidhi@gmail.com
|
||||
* Thailand: info@irct.co.th or thayika@ryts-instruments.co.th
|
||||
|
||||
You are responsible for paying distributor fees and we do not grant discounts on the basis of requiring a distributor. On our side, we do not mandate the use of any distributor and we can ship directly to you or via another distributor of your choosing not listed here. Generally, you may solve the import problems created by customs and other bureaucracy in any way that you deem acceptable.
|
||||
|
||||
|
@ -53,6 +54,24 @@ M-Labs offers discounts in the following cases:
|
|||
|
||||
We reserve the right of final decision regarding discount eligibility and amount.
|
||||
|
||||
##### I am on a really tight budget, what can I do?
|
||||
|
||||
You can build a useful ARTIQ system and spend very little money by running the open-source code on mass-produced low-cost electronics that were not made for this purpose. For example, in theory the [Colorlight-75E](https://hackaday.com/2020/01/24/new-part-day-led-driver-is-fpga-dev-board-in-disguise/) and [EBAZ4205](https://github.com/xjtuecho/EBAZ4205) can be used as core devices, and the Taobao shop [ZONRI](https://world.taobao.com/dianpu/73267337.htm) sells many inexpensive boards that can be useful as I/O peripherals such as DDS and data converters.
|
||||
|
||||
This is not a turn-key solution; experience with electronics, FPGA, and software development is required, and you will have to spend some time studying the code, porting it to these boards, writing drivers, and building hardware adapters.
|
||||
|
||||
See also [193THz.com](https://193THz.com) for ideas about low-cost homebrew laser systems.
|
||||
|
||||
##### Do you have a warranty?
|
||||
|
||||
For most products, we offer a 1-year warranty against manufacturing defects.
|
||||
|
||||
##### What should I do if I need technical support, or there is a problem with my order?
|
||||
|
||||
Please contact us at helpdesk@m-labs.hk.
|
||||
|
||||
If you have contacted the helpdesk and your issue cannot be satisfactorily resolved, then contact sb@m-labs.hk or text +852 65873703. Mention your helpdesk ticket number.
|
||||
|
||||
##### What are your payment terms?
|
||||
|
||||
For most established institutions (determined at our discretion), we offer Net 15 and Net 30 terms after delivery. Please enquire from your institutional email address to help us determine your eligibility for these terms.
|
||||
|
@ -73,6 +92,20 @@ Yes, however processing credit cards is expensive and you need to cover the cost
|
|||
|
||||
Exclusivity is subject to contractual minimum order volumes determined at our discretion, but generally exceeding USD 300,000.00 per year for most countries.
|
||||
|
||||
##### What is m-labs-intl.com?
|
||||
|
||||
[m-labs-intl.com](https://m-labs-intl.com) is a mirror site operated by us and hosted in the USA by Hetzner. It is useful in situations where your institution or local authorities block access to Hong Kong websites (.hk domains and/or Hong Kong IP addresses). To our knowledge, no internet blocking is done on the Hong Kong side other than through ISP DNS resolvers, which we do not use and which does not affect your access to our website.
|
||||
|
||||
Some features are currently not available on the mirror site, and you may use a VPN or another circumvention measure of your choice to access these as required.
|
||||
|
||||
##### Why are you ignoring my emails?
|
||||
|
||||
If you are using the email server of a large institution, be aware that some may silently drop emails sent to .hk email addresses and/or to servers located in Hong Kong.
|
||||
|
||||
Try sending your message from your personal address (for example Gmail, Outlook and Yahoo do not block our email system), or to the same email address at the m-labs-intl.com domain (for example, sales@m-labs-intl.com or sb@m-labs-intl.com).
|
||||
|
||||
Alternatively, you may use our [contact phone numbers](../office/), which are also registered with several popular messaging apps.
|
||||
|
||||
##### We are a recruitment firm. Can we help you find talent?
|
||||
|
||||
No.
|
||||
|
|
|
@ -170,13 +170,6 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
|
|||
<a href="https://github.com/cnourshargh/Bham-ARTIQ-examples" target="_blank" rel="noopener noreferrer">Repository</a>
|
||||
{% end %}
|
||||
|
||||
|
||||
{% layout_card(title="Deltaflow-on-ARTIQ", sameheight=120) %}
|
||||
<small>Run programs in the Deltaflow language from Riverlane on simulated ARTIQ</small>
|
||||
|
||||
<a href="https://github.com/riverlane/deltaflow-on-artiq" target="_blank" rel="noopener noreferrer">Repository</a>
|
||||
{% end %}
|
||||
|
||||
{% layout_card(title="DAX - Duke ARTIQ extensions", sameheight=120) %}
|
||||
<small>A library to provide tools for system organization/abstraction and to improve usability by automating common functionality.</small>
|
||||
|
||||
|
@ -234,6 +227,12 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
|
|||
<a href="https://github.com/vuthalab/artiq" target="_blank" rel="noopener noreferrer">Repository</a>
|
||||
{% end %}
|
||||
|
||||
{% layout_card(title="OffsetStabilizer", sameheight=120) %}
|
||||
<small>Stabilizer firmware for laser frequency offset stabilization</small>
|
||||
|
||||
<a href="https://github.com/PhBrb/OffsetStabilizer" target="_blank" rel="noopener noreferrer">Repository</a>
|
||||
{% end %}
|
||||
|
||||
</div>
|
||||
|
||||
{% layout_div(css="col-12 text-center") %}
|
||||
|
|
|
@ -270,6 +270,7 @@ The 4624 AWG "Phaser" is a quad channel 1.25 GS/s RF generator card with dual IQ
|
|||
|
||||
- 2x 1.25 GS/s IQ upconverters.
|
||||
- dual IQ mixer + 0.3 GHz to 4.8 GHz VCO + PLL.
|
||||
- up to 16 dynamic tones per channel using <a href="https://github.com/quartiq/miqro-sim" target="_blank" rel="noopener noreferrer">MIQRO gateware</a> (available separately from QUARTIQ).
|
||||
- 31.5 dB range digital step attenuator (similar to Urukul).
|
||||
- 2 channels of 5 MS/s ADC (similar to Sampler).
|
||||
- Artix-7 FPGA.
|
||||
|
|
File diff suppressed because it is too large
Load Diff
37
package.json
37
package.json
|
@ -14,31 +14,33 @@
|
|||
"type": "git",
|
||||
"url": "https://git.m-labs.hk/M-Labs/web2019.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hello-pangea/dnd": "^16.6.0",
|
||||
"bootstrap": "^5.3.3",
|
||||
"json-logic-js": "^2.0.5",
|
||||
"react": "^18.3.1",
|
||||
"react-bootstrap": "^2.10.4",
|
||||
"uuid": "^9.0.1",
|
||||
"zustand": "^4.5.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.23.9",
|
||||
"@babel/core": "^7.24.0",
|
||||
"@babel/preset-env": "^7.24.0",
|
||||
"@babel/preset-react": "^7.23.3",
|
||||
"@babel/cli": "^7.24.8",
|
||||
"@babel/core": "^7.25.2",
|
||||
"@babel/preset-env": "^7.25.3",
|
||||
"@babel/preset-react": "^7.24.7",
|
||||
"@uidotdev/usehooks": "^2.4.1",
|
||||
"babel-loader": "^9.1.3",
|
||||
"babel-preset-minify": "^0.5.2",
|
||||
"bootstrap": "^5.3.3",
|
||||
"jquery": "^3.7.1",
|
||||
"react": "^18.2.0",
|
||||
"react-bootstrap": "^2.10.2",
|
||||
"@hello-pangea/dnd": "^16.5.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"uuid": "^9.0.1",
|
||||
"webpack": "^5.90.3",
|
||||
"webpack": "^5.93.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"json-logic-js": "^2.0.2",
|
||||
"zustand": "^4.5.2",
|
||||
"@uidotdev/usehooks":"^2.4.1",
|
||||
"webpack-preprocessor-loader": "^1.3.0"
|
||||
},
|
||||
"babel": {
|
||||
"presets": [
|
||||
"@babel/preset-react",
|
||||
["@babel/preset-env", {
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"targets": {
|
||||
"browsers": [
|
||||
">0.25%",
|
||||
|
@ -46,7 +48,8 @@
|
|||
"not op_mini all"
|
||||
]
|
||||
}
|
||||
}]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,8 +90,9 @@ a {
|
|||
}
|
||||
}
|
||||
|
||||
.navbar-light .navbar-nav .nav-link,
|
||||
.dropdown-item {
|
||||
.navbar {
|
||||
.navbar-light .navbar-nav .nav-link,
|
||||
.dropdown-item {
|
||||
outline: none;
|
||||
color: $color-primary;
|
||||
text-decoration: none;
|
||||
|
@ -103,15 +104,38 @@ a {
|
|||
&:hover {
|
||||
color: $color-secondary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-light .navbar-nav .active>.nav-link,
|
||||
.navbar-light .navbar-nav .nav-link.active,
|
||||
.navbar-light .navbar-nav .nav-link.show,
|
||||
.navbar-light .navbar-nav .show>.nav-link {
|
||||
.navbar-light .navbar-nav .active>.nav-link,
|
||||
.navbar-light .navbar-nav .nav-link.active,
|
||||
.navbar-light .navbar-nav .nav-link.show,
|
||||
.navbar-light .navbar-nav .show>.nav-link {
|
||||
color: $color-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border: none;
|
||||
}
|
||||
.dropdown-item {
|
||||
&:hover,
|
||||
&:active {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
.dropdown-item.active {
|
||||
color: $color-secondary;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
outline: none;
|
||||
|
||||
&:focus,
|
||||
&:hover {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -127,22 +151,6 @@ a {
|
|||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border: none;
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
.dropdown-item {
|
||||
&:hover,
|
||||
&:active {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
.dropdown-item.active {
|
||||
color: $color-secondary;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: $btn-primary-2;
|
||||
color: #fff !important;
|
||||
|
@ -155,18 +163,11 @@ a {
|
|||
border: 1px solid $btn-secondary-2 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-lg {
|
||||
font-size: 1rem;
|
||||
padding: 1rem 1.25rem;
|
||||
}
|
||||
.navbar-toggler {
|
||||
outline: none;
|
||||
|
||||
&:focus,
|
||||
&:hover {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
ul.th {
|
||||
list-style: none;
|
||||
|
@ -200,6 +201,63 @@ ul:not(.navbar-nav) li {
|
|||
}
|
||||
|
||||
|
||||
.download-selector {
|
||||
display: inline-flex;
|
||||
|
||||
.divider {
|
||||
border-right: solid 1px white;
|
||||
margin: 0.125rem 0;
|
||||
height: inherit;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border: none;
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.btn {
|
||||
background-color: $btn-primary-2;
|
||||
&:hover {
|
||||
background-color: $btn-secondary-2;
|
||||
}
|
||||
&:after {
|
||||
align-self: center;
|
||||
}
|
||||
}
|
||||
button {
|
||||
&[aria-expanded='true']:after {
|
||||
transform: rotate(-180deg);
|
||||
}
|
||||
span {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
margin-left: 0!important;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
a {
|
||||
padding: 0.75rem 0.5rem 0.75rem 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
li::before {
|
||||
content: none;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.bg-white-shadow {
|
||||
background: url(../images/migen-links@2x.png);
|
||||
background-repeat: no-repeat;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
<svg width="48" height="48" version="1.1" viewBox="0 0 12.7 12.7" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" stroke-linecap="round" stroke-opacity=".6" stroke-width=".35269"><path d="m0.52917 0.52917h5.5563v5.5563h-5.5563z"/><path d="m6.6146 0.52917h5.5563v5.5563h-5.5563z"/><path d="m0.52917 6.6146h5.5563v5.5563h-5.5563z"/><path d="m6.6146 6.6146h5.5563v5.5563h-5.5563z"/></g></svg>
|
After Width: | Height: | Size: 392 B |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 33 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 117 KiB |
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,33 @@ import {useShopStore} from "./shop_store";
|
|||
// #!render_count
|
||||
import {useRenderCount} from "@uidotdev/usehooks";
|
||||
|
||||
|
||||
function DatasheetLink({datasheet_file, datasheet_name}) {
|
||||
return datasheet_file && datasheet_name && (<div className="ds">
|
||||
<span className='doc-icon'></span>
|
||||
<a href={datasheet_file} target="_blank" rel="noopener noreferrer">
|
||||
{datasheet_name}
|
||||
</a>
|
||||
</div>)
|
||||
}
|
||||
|
||||
function CardSpecs({specs}) {
|
||||
return specs && specs.length > 0 && (<ul>
|
||||
{specs.map((spec, index) =>
|
||||
<li key={index}>{spec}</li>
|
||||
)}
|
||||
</ul>)
|
||||
}
|
||||
|
||||
function AddButton({onAdd}) {
|
||||
return <button onClick={onAdd}>
|
||||
<img src="/images/shop/icon-add.svg" alt="add"/>
|
||||
</button>
|
||||
}
|
||||
|
||||
/**
|
||||
* Component that renders a product.
|
||||
* Used in the aside (e.g catalog of product)
|
||||
* Used in the aside (e.g catalog of products)
|
||||
*/
|
||||
export function ProductItem({card_index}) {
|
||||
// #!render_count
|
||||
|
@ -16,33 +40,14 @@ export function ProductItem({card_index}) {
|
|||
|
||||
const getCardDescription = useShopStore((state) => state.getCardDescription);
|
||||
const currency = useShopStore((state) => state.currency);
|
||||
const onAddCard = useShopStore((state) => state.addCardFromCatalog);
|
||||
const addCardFromCatalog = useShopStore((state) => state.addCardFromCatalog);
|
||||
const card = getCardDescription(card_index);
|
||||
|
||||
// #!render_count
|
||||
console.log("ProductItem renders: ", renderCount)
|
||||
|
||||
|
||||
const render_specs = (card.specs && card.specs.length > 0 && (
|
||||
<ul>
|
||||
{card.specs.map((spec, index) =>
|
||||
<li key={index}>{spec}</li>
|
||||
)}
|
||||
</ul>
|
||||
));
|
||||
|
||||
const render_datasheet_link = (card.datasheet_file && card.datasheet_name && (
|
||||
<div className="ds">
|
||||
<span className='doc-icon'></span>
|
||||
<a href={card.datasheet_file} target="_blank" rel="noopener noreferrer">
|
||||
{card.datasheet_name}
|
||||
</a>
|
||||
</div>
|
||||
));
|
||||
|
||||
return (
|
||||
<section className="productItem">
|
||||
|
||||
<div className="content">
|
||||
<h3 style={{'marginBottom': card.name_codename ? '5px' : '20px'}}>{card.name_number} {card.name}</h3>
|
||||
{card.name_codename ? (
|
||||
|
@ -51,16 +56,13 @@ export function ProductItem({card_index}) {
|
|||
|
||||
<div className="price">{`${currency} ${formatMoney(card.price)}`}</div>
|
||||
|
||||
{render_specs}
|
||||
<CardSpecs specs={card.specs}/>
|
||||
|
||||
{render_datasheet_link}
|
||||
<DatasheetLink datasheet_file={card.datasheet_file} datasheet_name={card.datasheet_name}/>
|
||||
</div>
|
||||
|
||||
<div className="content">
|
||||
|
||||
<button onClick={() => onAddCard(null, card_index, null)}>
|
||||
<img src="/images/shop/icon-add.svg" alt="add"/>
|
||||
</button>
|
||||
<AddButton onAdd={() => addCardFromCatalog(null, card_index, null)} />
|
||||
|
||||
<Draggable draggableId={card.id + card_index} index={card_index}>
|
||||
{(provided, snapshot) => (
|
||||
|
@ -83,10 +85,7 @@ export function ProductItem({card_index}) {
|
|||
</React.Fragment>
|
||||
)}
|
||||
</Draggable>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
);
|
||||
|
||||
}
|
|
@ -12,7 +12,7 @@ export function DialogPopup({options, data, target, id, big, first, last, option
|
|||
}
|
||||
);
|
||||
|
||||
let div_classes = `overlayVariant border rounded ${big ? "overlay-bigcard" : "overlay-smallcard"} ${(!big && first) ? "overlay-first" : ""} ${(!big && last) ? "overlay-last" : ""} ${options_class || ""}`;
|
||||
let div_classes = `overlayVariant border rounded ${big ? "overlay-bigcard" : "overlay-smallcard"} ${(!big && first) ? "overlay-first" : ""} ${(!big && last && !first) ? "overlay-last" : ""} ${options_class || ""}`;
|
||||
const handleClick = (_event) => {
|
||||
setShow(!show);
|
||||
};
|
||||
|
|
|
@ -39,9 +39,10 @@ class Line extends Component {
|
|||
<div className="shop-line" key={this.props.id}>
|
||||
<label htmlFor={key} className="form-label">
|
||||
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
||||
{this.props.title}:
|
||||
</label>
|
||||
{this.props.title}
|
||||
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
||||
:
|
||||
</label>
|
||||
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key} onChange={this.handleChange}
|
||||
value={this.state.text}/>
|
||||
</div>
|
||||
|
|
|
@ -49,8 +49,8 @@ class Switch extends Component {
|
|||
<label className="form-check-label" htmlFor={key} style={{"display": "inline"}}>
|
||||
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
||||
{this.props.title}
|
||||
</label>
|
||||
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -65,8 +65,8 @@ class SwitchLine extends Component {
|
|||
<label className="form-check-label" htmlFor={key + "switch"}>
|
||||
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
||||
{this.props.title}
|
||||
</label>
|
||||
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
||||
</label>
|
||||
</div>
|
||||
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key + "line"} onChange={this.handleText}
|
||||
value={this.state.text} disabled={!this.state.checked}/>
|
||||
|
|
|
@ -553,6 +553,7 @@ const useCart = ((set, get) => ({
|
|||
delCrate: (id) => {
|
||||
get()._delCrate(id);
|
||||
get().fillOrderExtData();
|
||||
get()._updateTotalOrderPrice();
|
||||
},
|
||||
|
||||
addCardFromCatalog: (crate_to, index_from, index_to, just_mounted) => {
|
||||
|
@ -594,6 +595,7 @@ const useCart = ((set, get) => ({
|
|||
clearCrate: (id) => {
|
||||
get()._clearCrate(id);
|
||||
get().fillWarnings(id);
|
||||
get()._updateTotalOrderPrice();
|
||||
},
|
||||
|
||||
updateOptions: (crate_id, index, new_options) => {
|
||||
|
|
|
@ -51,8 +51,8 @@ const shop_data = {
|
|||
title: "Optional pre-installed NUC mini-computer",
|
||||
outvar: "nuc",
|
||||
tip: "Pre-installed NixOS desktop with ARTIQ and other scientific software. " +
|
||||
"Hardware: Intel® NUC 13 Pro Kit NUC13ANKi7, i7-1360P CPU, " +
|
||||
"32GB RAM, 1TB NVMe. Other options contact us.",
|
||||
"Hardware: ASUS® NUC 14 Pro Kit, Intel® i7-155H CPU, " +
|
||||
"32GB RAM, 1TB NVMe. For other options contact us.",
|
||||
fallback: true,
|
||||
}},
|
||||
{
|
||||
|
@ -179,7 +179,6 @@ const shop_data = {
|
|||
'Price includes bitstream generation, flashing, testing, and firmware updates for 1 year (USD 1,400.00).',
|
||||
],
|
||||
size: 'big',
|
||||
type: 'kasli',
|
||||
options: [
|
||||
{type: "Radio", args: {title: "DRTIO role", outvar: "drtio_role", variants: ["standalone", "master", "satellite"], tip: "Distributed Real Time Input/Output allows ARTIQ RTIO channels to be distributed among several satellite devices synchronized and controlled by a central core(master) device. Standalone option disables this feature."}},
|
||||
{
|
||||
|
@ -244,7 +243,6 @@ const shop_data = {
|
|||
'4 MMCX clock outputs.',
|
||||
],
|
||||
size: 'big',
|
||||
type: 'kasli',
|
||||
hp: 8,
|
||||
nbrSlotMin: 0,
|
||||
nbrSlotMax: 12,
|
||||
|
@ -316,7 +314,6 @@ const shop_data = {
|
|||
'A pair of VHDCI carriers is a simple, low-latency and low-cost alternative to DRTIO for some applications.',
|
||||
],
|
||||
size: 'big',
|
||||
type: 'vhdcicarrier',
|
||||
resources: [
|
||||
{name: "eem", max: 8},
|
||||
],
|
||||
|
@ -347,7 +344,6 @@ const shop_data = {
|
|||
datasheet_file: '/docs/sinara-datasheets/2118-2128.pdf',
|
||||
datasheet_name: '2118/2128 BNC/SMA-TTL datasheet',
|
||||
size: 'big',
|
||||
type: null,
|
||||
options: [
|
||||
{
|
||||
"if": [
|
||||
|
@ -457,7 +453,6 @@ const shop_data = {
|
|||
}
|
||||
],
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -549,7 +544,6 @@ const shop_data = {
|
|||
}
|
||||
],
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -636,7 +630,6 @@ const shop_data = {
|
|||
}
|
||||
],
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -700,7 +693,6 @@ const shop_data = {
|
|||
}
|
||||
],
|
||||
size: 'small',
|
||||
type: 'urukul',
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
|
@ -739,7 +731,6 @@ const shop_data = {
|
|||
fallback: {text: "125 MHz", checked: false}}}
|
||||
],
|
||||
size: 'small',
|
||||
type: 'urukul',
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
|
@ -760,6 +751,7 @@ const shop_data = {
|
|||
specs: [
|
||||
'2x 1.25 GS/s IQ upconverters.',
|
||||
'dual IQ mixer + 0.3 GHz to 4.8 GHz VCO + PLL.',
|
||||
'up to 16 dynamic tones using MIQRO gateware (available separately from QUARTIQ).',
|
||||
'31.5 dB range digital step attenuator (similar to Urukul).',
|
||||
'2 channels of 5 MS/s ADC (similar to Sampler).',
|
||||
'Artix-7 FPGA.',
|
||||
|
@ -773,7 +765,6 @@ const shop_data = {
|
|||
{type: "Radio", args: {title: "Variant", outvar: "variant", variants: ["Baseband", "Upconverter"], fallback: 1}},
|
||||
],
|
||||
size: 'small',
|
||||
type: 'urukul',
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
|
@ -816,7 +807,6 @@ const shop_data = {
|
|||
datasheet_file: '/docs/sinara-datasheets/5432.pdf',
|
||||
datasheet_name: '5432 Zotino datasheet',
|
||||
size: 'small',
|
||||
type: 'zotino',
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"idc_resource"
|
||||
|
@ -846,7 +836,6 @@ const shop_data = {
|
|||
'Channels can also be broken out to BNC or SMA using IDC-BNC, IDC-SMA or IDC-MCX cards.'
|
||||
],
|
||||
size: 'small',
|
||||
type: 'zotino',
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"idc_resource",
|
||||
|
@ -872,7 +861,6 @@ const shop_data = {
|
|||
'Breaking out all 32 channels from a Zotino requires 4 IDC-BNC cards.'
|
||||
],
|
||||
size: 'big',
|
||||
type: 'idc-bnc',
|
||||
warnings: [
|
||||
"no_idc_source"
|
||||
],
|
||||
|
@ -931,7 +919,6 @@ const shop_data = {
|
|||
'Breaking out all 32 channels from a Zotino requires 4 SMA-IDC cards.'
|
||||
],
|
||||
size: 'small',
|
||||
type: 'idc-bnc',
|
||||
warnings: [
|
||||
"no_idc_source"
|
||||
],
|
||||
|
@ -940,6 +927,27 @@ const shop_data = {
|
|||
idc: 1
|
||||
}
|
||||
},
|
||||
'idc-mcx-adapter': {
|
||||
id: 'idc-mcx-adapter',
|
||||
name: 'MCX-IDC',
|
||||
name_number: '5538',
|
||||
name_codename: '',
|
||||
price: 320,
|
||||
image: '/images/shop/graphic-03_MCX-IDC32.svg',
|
||||
specs: [
|
||||
'Breaks out analog signals from Zotino or HD68-IDC to MCX connectors.',
|
||||
'Each card provides 32 channels.',
|
||||
],
|
||||
size: 'big',
|
||||
type: 'idc-bnc',
|
||||
warnings: [
|
||||
"no_idc_source"
|
||||
],
|
||||
consumes: {
|
||||
hp: 8,
|
||||
idc: 4
|
||||
}
|
||||
},
|
||||
'hd68-idc-adapter': {
|
||||
id:'hd68-idc-adapter',
|
||||
name: 'HD68-IDC',
|
||||
|
@ -951,7 +959,6 @@ const shop_data = {
|
|||
'Connects an external HD68 cable to IDC-BNC, IDC-SMA or IDC-MCX cards.',
|
||||
],
|
||||
size: 'small',
|
||||
type: 'hd68',
|
||||
options: [
|
||||
{type: "Radio", args: {title: "Cable length", outvar: "hd68_cable_len", variants: ["1 M", "2 M", "3 M"], tip: "The desired length of the HD68 cable", fallback: 1}},
|
||||
],
|
||||
|
@ -1008,7 +1015,6 @@ const shop_data = {
|
|||
}
|
||||
],
|
||||
size: 'big',
|
||||
type: 'novo',
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -1035,7 +1041,6 @@ const shop_data = {
|
|||
{type: "Radio", args: {title: "Connectors", outvar: "n_eem", variants: ["1 EEM", "2 EEM", "3 EEM"], tip: "Number of EEM ports to use.", fallback: 1}},
|
||||
],
|
||||
size: 'small',
|
||||
type: 'koster',
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -1064,7 +1069,6 @@ const shop_data = {
|
|||
],
|
||||
options_class: "clocker",
|
||||
size: 'small',
|
||||
type: 'clocker',
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source",
|
||||
|
@ -1105,7 +1109,6 @@ const shop_data = {
|
|||
],
|
||||
options_class: "stabilizer",
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -1140,7 +1143,6 @@ const shop_data = {
|
|||
],
|
||||
options_class: "stabilizer",
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -1170,7 +1172,6 @@ const shop_data = {
|
|||
fallback: {text: "125 MHz", checked: false}}}
|
||||
],
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
|
@ -1199,7 +1200,6 @@ const shop_data = {
|
|||
fallback: {text: "125 MHz", checked: false}}}
|
||||
],
|
||||
size: 'big',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
|
@ -1229,7 +1229,6 @@ const shop_data = {
|
|||
{type: "Switch", args: {title: "Ext power", outvar: "ext_pwr", "tip": "Use external power supply in order to reduce number of used EEM connectors"}}
|
||||
],
|
||||
size: 'small',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source"
|
||||
],
|
||||
|
@ -1253,7 +1252,6 @@ const shop_data = {
|
|||
'Can stabilize temperature of Sinara 5432 DAC or external devices containing TEC and thermistor.'
|
||||
],
|
||||
size: 'small',
|
||||
type: null,
|
||||
consumes: {
|
||||
hp: 4
|
||||
},
|
||||
|
@ -1277,7 +1275,6 @@ const shop_data = {
|
|||
'Included remote analog front-end (AFE) board converts differential signals to ±10V single-ended at the point of use, with additional gain and filtering.',
|
||||
],
|
||||
size: 'big',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
|
@ -1312,13 +1309,12 @@ const shop_data = {
|
|||
{type: "Switch", args: {title: "Termination #1", outvar: "term_1", tip: "Enable termination on ADC channel #1"}}
|
||||
],
|
||||
size: 'big',
|
||||
type: null,
|
||||
warnings: [
|
||||
"no_eem_source",
|
||||
"no_clk_source"
|
||||
],
|
||||
consumes: {
|
||||
hp: 4,
|
||||
hp: 8,
|
||||
eem: 1,
|
||||
clk: 1
|
||||
}
|
||||
|
@ -1342,10 +1338,40 @@ const shop_data = {
|
|||
"Optional - external power brick will be shipped free of charge if removed."
|
||||
],
|
||||
size: 'big',
|
||||
warnings: [],
|
||||
consumes: {
|
||||
hp: 8,
|
||||
},
|
||||
},
|
||||
'kirdy': {
|
||||
id: 'kirdy',
|
||||
name: 'Laser diode driver',
|
||||
name_number: '1550',
|
||||
name_codename: 'Kirdy',
|
||||
price: 1700,
|
||||
image: '/images/shop/graphic-03_Kirdy.svg',
|
||||
specs: [
|
||||
"Precision LD driver: 300mA max output current, 20-bit resolution, 4V compliance voltage.",
|
||||
"RMS noise 10Hz-1MHz: <200nA, density <300pA/√Hz.",
|
||||
"Low-frequency modulation input, DC-18MHz 3dB bandwidth, suitable for laser locks and linewidth reduction.",
|
||||
"High-frequency Bias-T modulation input, suitable for PDH sideband generation.",
|
||||
"Monitor photodiode and LD protection.",
|
||||
"Temperature controller: ±1A max current, sub-mK stability.",
|
||||
"Full digital control and power over Ethernet.",
|
||||
"Can ship with single-frequency narrow-linewidth laser pre-installed (1270-1610nm from USD +200.00, 633-1064nm from USD +4,000.00), fiber output on front panel.",
|
||||
"Also suitable for commercial or homebuilt ECDL heads (with additional piezo driver), and injection-locked Fabry-Perot diodes."
|
||||
],
|
||||
options: [
|
||||
{type: "Line", args: {title: "IP", outvar: "ip",
|
||||
validator: {name: "ipv4"},
|
||||
fallback: "192.168.1.128/24",
|
||||
tip: "Set up IP address used by the device."}},
|
||||
],
|
||||
size: 'big',
|
||||
type: null,
|
||||
warnings: [],
|
||||
consumes: {
|
||||
hp: 4,
|
||||
hp: 8,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1390,6 +1416,7 @@ const shop_data = {
|
|||
itemIds: [
|
||||
'idc-bnc-adapter',
|
||||
'idc-sma-adapter',
|
||||
'idc-mcx-adapter',
|
||||
'hd68-idc-adapter',
|
||||
'vhdcicarrier']},
|
||||
{ name: 'Servos',
|
||||
|
@ -1403,6 +1430,7 @@ const shop_data = {
|
|||
itemIds: [
|
||||
'koster',
|
||||
'eem_pwr_mod',
|
||||
'kirdy',
|
||||
]}
|
||||
],
|
||||
},
|
||||
|
|
|
@ -53,12 +53,29 @@
|
|||
<a href="{{ get_url(path='@/experiment-control/place-order.md') }}" class="btn btn-primary btn-inversed btn-lg">Order hardware</a>
|
||||
<a href="https://m-labs.hk/artiq/manual/" class="btn btn-primary btn-lg">Manual</a>
|
||||
<a href="https://forum.m-labs.hk" class="btn btn-primary btn-lg">Forum</a>
|
||||
<a href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1" class="btn btn-primary btn-lg d-inline-flex">
|
||||
<img src="/images/icons/icon-download.svg" class="d-inline-block align-self-center mx-1" style="height: 1rem" alt="download">
|
||||
Windows installer
|
||||
</a>
|
||||
<a href="{{ get_url(path='@/experiment-control/artiq.md') }}" class="btn btn-primary btn-lg">More...</a>
|
||||
|
||||
<div class="btn-group download-selector">
|
||||
<a class="btn btn-primary btn-lg d-inline-flex" href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1">
|
||||
<img src="/images/icons/icon-windows.svg" class="d-inline-block align-self-center mx-1" style="height: 1rem" alt="windows">
|
||||
<span class="d-inline-block">Download <sup>.exe</sup></span>
|
||||
</a>
|
||||
<div class="divider"></div>
|
||||
<button type="button" class="btn btn-primary btn-lg dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span>stable</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu shadow dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1">
|
||||
ARTIQ-8 (stable) for Windows
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra-beta/msys2-offline-installer/latest/download/1">
|
||||
ARTIQ-9 (beta) for Windows
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue