initialize commit
diff --git a/dlsmk/src/lib.rs b/dlsmk/src/lib.rs
new file mode 100644
index 0000000..402a0c0
--- /dev/null
+++ b/dlsmk/src/lib.rs
@@ -0,0 +1,108 @@
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() {
+ assert_eq!(2 + 2, 4);
+ }
+}
+
+// use std::ffi::{CStr, CString};
+// use std::os::raw::{c_char, c_uchar, c_ulong};
+
+// #[no_mangle]
+// pub extern "C" fn dlsmk_decode(
+// key: *const c_uchar,
+// qrcode: *const c_uchar,
+// qrlen: c_ulong,
+// ) -> *mut c_char {
+// CString::new("Hello ".to_owned()).unwrap().into_raw()
+// }
+
+// #[cfg(target_os = "android")]
+#[cfg(any(target_family = "unix", target_os = "android"))]
+// #[cfg(target_family = "unix")]
+#[allow(non_snake_case)]
+pub mod android {
+ extern crate jni;
+
+ use self::jni::objects::{JClass, JObject, JString};
+ use self::jni::sys::{jboolean, jlong, JNI_FALSE, JNI_TRUE};
+ use self::jni::JNIEnv;
+ // use super::*;
+ use libc;
+ use std::slice;
+
+ use dlqrcode::DaliQrCode;
+
+ #[no_mangle]
+ pub unsafe extern "C" fn Java_com_supwisdom_dlsmk_DLSMKQrCode_decode(
+ env: JNIEnv,
+ _: JClass,
+ key_hex: JString,
+ qrcode: JString,
+ offset: jlong,
+ result: JObject,
+ ) -> jboolean {
+ // Our Java companion code might pass-in "world" as a string, hence the name.
+ let key = env
+ .get_string(key_hex)
+ .expect("invalid key string")
+ .as_ptr();
+ let keylen = libc::strlen(key);
+
+ println!("decode test, key length {}", keylen);
+ let key = {
+ let k: &[u8] = slice::from_raw_parts(key as *const u8, keylen);
+ println!("key is : {}", String::from_utf8_lossy(k));
+ let mut key = [0u8; 32];
+ if let Ok(v) = hex::decode(k) {
+ key.clone_from_slice(v.as_slice());
+ key
+ } else {
+ return JNI_FALSE;
+ }
+ };
+
+ let qrcode = env
+ .get_string(qrcode)
+ .expect("invalid qrcode string")
+ .as_ptr();
+ let qrlen = libc::strlen(qrcode);
+
+
+ let decode = match DaliQrCode::new(key, None, None, None, None) {
+ Ok(d) => d,
+ Err(e) => panic!("invalid key {}", e),
+ };
+
+ println!("decode qrcode begin , length : {}...", qrlen);
+ match decode.decode(qrcode as *const u8, qrlen, offset as i32) {
+ Ok(d) => {
+ let qrdata = env.get_map(result).expect("invalid qrdata map");
+ qrdata
+ .put(
+ *env.new_string("cardno").unwrap(),
+ *env.new_string(d.cardno).unwrap(),
+ )
+ .unwrap();
+ qrdata
+ .put(
+ *env.new_string("cardtype").unwrap(),
+ *env.new_string(d.cardtype).unwrap(),
+ )
+ .unwrap();
+ qrdata
+ .put(
+ *env.new_string("uid").unwrap(),
+ *env.new_string(d.uid).unwrap(),
+ )
+ .unwrap();
+ return JNI_TRUE;
+ }
+ Err(e) => {
+ println!("Error {:?}", e);
+ return JNI_FALSE;
+ },
+ };
+ }
+}