Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ハードウェア対応のリアル.pdf
Search
たまねぎ
May 16, 2023
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ハードウェア対応のリアル.pdf
たまねぎ
May 16, 2023
More Decks by たまねぎ
See All by たまねぎ
AIのAIによるAIのための出力評価と改善
chocoyama
3
960
[FlutterKaigi2024] Effective Form 〜Flutterによる複雑なフォーム開発の実践〜
chocoyama
1
13k
iOSDC2023:聴いて話すiOS 現実世界の「音」との連携
chocoyama
1
410
20分でわかる!速習resultBuilder(iOSDC 2022)
chocoyama
7
3.9k
SwiftUIっぽくした話
chocoyama
1
750
SwiftUIとGraphQLでプロダクトの継続的な破壊に立ち向かう
chocoyama
6
2.8k
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
22k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Practical Orchestrator
shlominoach
191
11k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Spectacular Lies of Maps
axbom
PRO
1
830
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
The SEO Collaboration Effect
kristinabergwall1
1
490
Balancing Empowerment & Direction
lara
6
1.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Transcript
ϋʔυΣΞରԠͷϦΞϧ !@DIPDPZBNB &CJTVNPCJMF
ࣗݾհ w ͨ·Ͷ͗ʢ!@DIPDPZBNBʣ w 4503&4ϨδͷJ04ΞϓϦ։ൃ w ϋʔυΣΞରԠ ॳΊͯΓ࢝Ί͔ͯΒd
ࠓ͢͜ͱ w ϋʔυΣΞରԠͱʁ w ։ൃͷϦΞϧ w ӡ༻ͷϦΞϧ w ςΫϊϩδʔʹΑΔ՝ղܾ
˞શମతʹJ04دΓͷʹͳΓ·͢🙏
ϋʔυΣΞରԠͱʁ
ϝΠϯػͱผͷೖग़ྗͱ࿈ܞ͢ΔରԠ ܾࡁ υϩΞʔ όʔίʔυεΩϟφʔ ΧελϚʔσΟεϓϨΠ #FBDPO ϚΠΫ εϐʔΧʔ ϖϯγϧ Ϛε
ΩʔϘʔυ ΠϠϗϯ ೖྗ ग़ྗ ϓϦϯλʔ εϚʔτϑΥϯ୯ମͰ ղܾͰ͖ͳ͍՝ʹϦʔνͰ͖Δ
4503&4ϨδͷରԠϋʔυΣΞͱػೳ όʔίʔυεΩϟφʔͰɺΞΠςϜΛΧʔτʹՃ Ճͨ͠ΧʔτͷใΛɺΧελϚʔσΟεϓϨΠʹө ܾࡁͰɺܾࡁॲཧΛ࣮ߦ ܾࡁ͕ྃͨ͠จͷϨγʔτΛɺϓϦϯλʔͰग़ྗ
ར༻͍ͯ͠Δٕज़ ར༻ٕज़ ܾࡁ #MVFUPPUI ϓϦϯλʔ υϩΞʔ #MVFUPPUI όʔίʔυεΩϟφʔ #MVFUPPUI
ΧελϚʔσΟεϓϨΠ ʢεϚʔτϑΥϯʣ -PDBM/FUXPSL ղܾͰ͖Δ՝େ͖͍͕ɺ։ൃɾӡ༻ͷίετେ͖͍
։ൃͷϦΞϧ
࣮ϋʔυϧ͕ߴ͍ w ͱͷ࿈ܞ෦Ͱ ϨΠϠʔͳ࣮͕ඞཁ w ଓཧɾ௨৴ॲཧͰͷ ࡉ͔͍έΞ͕େม w
ඇಉظॲཧ͕ଟ͘ɺ ॲཧͷྲྀΕ͕௫ΈͮΒ͍ uint8_t *pos_papercut(cy_printer const printer, size_t *out_len) { if(printer & cy_paper_cut) { INIT_BUF(); size_t nl_len; uint8_t * const newlines = pos_cutter_newlines(printer, &nl_len); if(nl_len > 0) APPEND_BUF(newlines, nl_len); if(CY_PRINTER_TYPE(printer) == cy_sm_desktop_printer) APPEND_BUF_AUTO(POS_LM_CUTPAPER); else APPEND_BUF_AUTO(POS2_CUTPAPER); if(out_len) *out_len = BUF_LEN(); return BUF(); } else return pos_cutter_newlines(printer, out_len); } $ݴޠʹΑΔ࣮ίʔυ
ςετ͕ͮ͠Β͍ w ग़͕ࣾඞཁ w ࣗಈςετͰͷ୲อ͕ͮ͠Β͍ w 04ɾόʔδϣϯ͚ͩͰͳ͘ɺ ϝʔΧʔϋʔυΣΞछผͷ
ֻ͚߹Θͤ૿͑Δ
ӡ༻ͷϦΞϧ
༷ʑͳڥɾछྨͷରԠ͕େม w #MVFUPPUIͷׯব8J'JઃఆʹΑΔҟৗಈ࡞ w ϝʔΧʔʹґଘͨ͠ෆ۩߹ใࠂ w αϙʔτΛΓͮΒ͍
Ϋϥογϡෆ۩߹͕ൃੜ͍͢͠ w τοϓΫϥογϡϋʔυΣΞؔ࿈͕੮ר w ؆୯ʹݪҼΛಛఆͰ͖ͳ͍Ϋϥογϡϩά
ͭΒΈϙΠϯτ·ͱΊ w ࣮ɾอकͷϋʔυϧ͕ߴ͍ w ෆ۩߹͕ى͖ࠩ͋͘͢Δ w ςετίετ͕ߴࣗ͘ಈԽͮ͠Β͍ w αϙʔτΛΓͮΒ͍ ςΫϊϩδʔͰղܾ͠Α͏ʂ
࣮ɾอकͷϋʔυϧΛԼ͛ΔऔΓΈ w ࣄྫɿඇಉظॲཧΛ4XJGU$PODVSSFODZͰ୯७Խ w ࣄྫɿυΩϡϝϯτཧղΛ$IBU(15ͰߴԽ w ࣄྫɿ۪ͳ࣮Λ3FTVMU#VJMEFSͰநԽ
ࣄྫɿඇಉظॲཧΛ4XJGU$PODVSSFODZͰ୯७Խ w ՝ w %FMFHBUF$PNQMFUJPO)BOEMFSϕʔεͷ࣮͕ଟ͍ w ඇಉظॲཧΛ࿈ଓͰߦ͏έʔεଟ͍ w ίʔϧόοΫࠈʹͳΓɺॲཧϑϩʔ͕ಡΈऔΓͮΒ͍ w
5SZ w 4XJGU$PODVSSFODZΛ༻͍࣮ͨʹஔ͖͑ w ίʔυΛ୯७ʹ্͔ΒԼಡΉ͚ͩͰ͍͍ঢ়گʹվળ
detectPaperWidth { guard $0 != PaperWidth.unknown else { // Ϩγʔτ෯ͷऔಘʹࣦഊͨ͠߹ɺ1͚ͩϦτϥΠ͢Δ
_ = detectPaperWidth { update(paperWidth: $0) } return } update(paperWidth: $0) } var paperWidth = await paperWidthDetector.getWidth() if paperWidth == .unknown { // Ϩγʔτ෯ͷऔಘʹࣦഊͨ͠߹ɺ1͚ͩϦτϥΠ͢Δ paperWidth = await paperWidthDetector.getWidth() } update(paperWidth: paperWidth) ωετ͕গͳ͘ɺॲཧͷྲྀΕ͕௫Έ͘͢ͳͬͨ $PNQMFUJPO)BOEMFS%FMFHBUF 4XJGU$PODVSSFODZ ˞ཁΛߜΔͨΊσϑΥϧϝͯ͠·͢ XJUI$IFDLFE$POUJOVBUJPOͰɺ ڧ੍తʹ4XJGU$PODVSSFODZͷܗ
func getWidth() async -> PaperWidth { await withCheckedContinuation { (continuation:
CheckedContinuation<PaperWidth, Never>) in session.listen { inputStream, _ in var input: UInt8 = 0 let inputLength = inputStream.read(&input, maxLength: 4096) if inputLength > 0 { let paperWidth = getPaperWidth( printerModel: printerModel, fromResponseValue: Data(bytes: &input, count: inputLength).ex.toBytes() ) continuation.resume(returning: paperWidth) } } session.write(Data(bytes: cmd, count: cmdLength)) } } ֎͔Βݟͨ࣌BTZODBXBJUͷγϯϓϧͳ*' $PNQMFUJPO)BOEMFSϕʔεͷ۪ͳ࣮ ด͡ࠐΊͯநԽ͢Δ
let print = { printReceiptML(receiptML) _ = cutPaper() completion() }
let supportedVariableWidth = (printerType & cy_variable_paper_width) != 0 if supportedVariableWidth { let continuePrint = { (width: PrinterWidth) in paperWidth = width print() } detectPaperWidth { guard $0 != PrinterWidth.unknown else { _ = detectPaperWidth { continuePrint($0) } return } continuePrint($0) } } else { print() } guard let activePrinter, let receipt = PaymentReceipt(order: order, store: store)?.build(), let image = try? await receipt.image( width: CGFloat(await activePrinter.receiptWidth()) ) else { return } activePrinter.printReceiptImage(image) ϨΨγʔͳ෦ΛϞμϯͳٕज़Ͱϥοϓ ҹ໋ྩΛߦ͏ؔͷαϯϓϧ ॲཧͷྲྀΕ͕͍͘͢ͳΓɺίʔυͷݮͰ͖ͨ
ࣄྫɿυΩϡϝϯτཧղΛ$IBU(15ͰߴԽ ʮग़ྗ͞ΕΔ༻ࢴ෯ͷऔಘʯʹؔ͢ΔϓϦϯλʔͷެࣜυΩϡϝϯτ
ϋʔυΣΞؔ࿈ͷυΩϡϝϯτ w ՝ w ීஈࢀর͢Δ%PDͱ͔͚Εͨ༰ w αοͱཧղ͢Δʹϋʔυϧ͕ߴ͍ w ࣄྫ͕গͳ͘άάͬͯώοτͮ͠Β͍ w
5SZ w άάͬͯμϝͳΒδϐͬͯΈΑ͏
%PDͷҰ෦Λίϐϖͯ͠ ʮΑ͘Θ͔Βͳ͍ͷͰɺΘ͔ΔΑ͏ʹڭ͑ͯʯ ͬͯݴͬͯΈΔ ˠৄࡉͳղઆΛͯ͘͠ΕΔ $IBU(15ͷ׆༻
·ͩΑ͘Θ͔Βͳ͍ͷͰɺ υΩϡϝϯτʹهࡌͷͳ͍ύλʔϯΛྫʹ ༷ͷཧղΛਂΊΑ͏ͱ͢Δ ˠ%PDͷΑ͏ʹҰൠԽͨ͠༰Ͱͳ͘ɺ ʮ"ͷ߹ɺ#ʹͳΔʯͱ͍ͬͨ ۩ମతͳ༷Λڭ͑ͯ͘ΕΔ
ˠ۩ମతͳظ݁ՌΛڭ͑ͯ͘ΕΔ ੩తͳ%PDͰෆՄೳͳΠϯλϥΫςΟϒͳ2"ʹΑΓɺ ཧղ͕ઙ͍෦Λ໌֬ʹ͠ͳ͕Β༷ΛѲͰ͖ͨ ༷͕໌֬ʹͳͬͨͷͰɺ ࠓճͷϢʔεέʔεΛΠϯϓοτ͢Δ͜ͱͰ ͦͷ߹Ͳ͏ͳΔ͔Λฉ͘
ࣄྫɿ۪ͳ࣮Λ3FTVMU#VJMEFSͰநԽ 9.-จࣈྻͷੜΛɺ4XJGU6*ͷΑ͏ͳ*'ͰͰ͖ΔΑ͏ʹͨ͠ SFGʲJ04%$ʳͰΘ͔ΔʂशSFTVMU#VJMEFS
·ͱΊ w ਖ਼ϋʔυΣΞରԠΛͯ͠ΔͱɺͭΒ͍ہ໘ʹʑͿ͔ͭΔ w ϨΠϠʔͳ࣮ϨΨγʔͳ෦Λɺ Ϟμϯͳٕज़ͰิͰ͖Δָ͕͋͠͞Δ w ιϑτΣΞ͚ͩͰ࣮ݱͰ͖ͳ͍ϢʔβʔମݧΛఏڙͰ͖Δ
େม͚ͩͲɺ ໘ന͋͞ΔΑʂ