Skip to content

Instantly share code, notes, and snippets.

@houaq
Last active December 21, 2023 09:20
Show Gist options
  • Select an option

  • Save houaq/39ddd16f6a622a694157bc7f6a8b976d to your computer and use it in GitHub Desktop.

Select an option

Save houaq/39ddd16f6a622a694157bc7f6a8b976d to your computer and use it in GitHub Desktop.

Revisions

  1. houaq renamed this gist Dec 21, 2023. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. houaq created this gist Dec 21, 2023.
    61 changes: 61 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    package main

    import (
    "fmt"
    "log"
    "syscall"
    )

    type IDCRDriver struct {
    handle syscall.Handle
    pIdCardReset uintptr
    pGetIdCardInfo uintptr
    pGetIdCardNewaddr uintptr
    }

    func (d *IDCRDriver) Load(path string) error {
    var err error
    d.handle, err = syscall.LoadLibrary(path)
    if err != nil {
    return err
    }
    d.pIdCardReset, err = syscall.GetProcAddress(d.handle, "IdCardReset")
    if err != nil {
    log.Printf("GetProcAddress(IDCardReset) error: %s\n", err)
    }

    return nil
    }

    func (d *IDCRDriver) Free(path string) error {
    if d.handle != 0 {
    return syscall.FreeLibrary(d.handle)
    }
    return nil
    }

    func (d *IDCRDriver) IdCardReset(port, bp, baud int) (int, error) {
    if d.handle == 0 {
    return -1, fmt.Errorf("library not load")
    }
    ret, _, errno := syscall.SyscallN(d.pIdCardReset, uintptr(port), uintptr(bp), uintptr(baud))
    if errno != 0 {
    return int(ret), fmt.Errorf("syscall error: %s", errno.Error())
    }
    return int(ret), nil
    }

    func main() {
    driver := &IDCRDriver{}
    err := driver.Load("bfby_idcr.dll")
    if err != nil {
    panic(err)
    }

    ret, err := driver.IdCardReset(1, 0, 9600)
    if err != nil {
    fmt.Printf("IDCardReset error: %s\n", err)
    } else {
    fmt.Printf("IDCardReset returns: %d\n", ret)
    }
    }