6 #define L Java_liba_crc8
13 JNIEXPORT
void JNICALL
Java_liba_crc8_clinit(JNIEnv
*Env
, jclass Cls
)
15 jclass Nbb
= (*Env
)->FindClass(Env
, "Ljava/nio/ByteBuffer;");
16 L
.New
= (*Env
)->GetStaticMethodID(Env
, Nbb
, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
17 L
.ctx
= (*Env
)->GetFieldID(Env
, Cls
, "ctx", "Ljava/nio/ByteBuffer;");
25 JNIEXPORT
void JNICALL
Java_liba_crc8_init(JNIEnv
*Env
, jobject Obj
, jbyte poly
, jboolean reversed
)
27 jobject Ctx
= (*Env
)->CallObjectMethod(Env
, Obj
, L
.New
, (jint
)sizeof(struct crc8
));
28 struct crc8
*ctx
= (struct crc8
*)(*Env
)->GetDirectBufferAddress(Env
, Ctx
);
29 (*Env
)->SetObjectField(Env
, Obj
, L
.ctx
, Ctx
);
30 reversed
? a_crc8l_init(ctx
->table
, (a_u8
)poly
)
31 : a_crc8m_init(ctx
->table
, (a_u8
)poly
);
34 JNIEXPORT jbyteArray JNICALL
Java_liba_crc8_table(JNIEnv
*Env
, jobject Obj
)
36 jobject Ctx
= (*Env
)->GetObjectField(Env
, Obj
, L
.ctx
);
37 struct crc8
*ctx
= (struct crc8
*)(*Env
)->GetDirectBufferAddress(Env
, Ctx
);
38 jbyteArray table
= (*Env
)->NewByteArray(Env
, A_LEN(ctx
->table
));
39 (*Env
)->SetByteArrayRegion(Env
, table
, 0, A_LEN(ctx
->table
), (jbyte
*)ctx
->table
);
43 JNIEXPORT jobject JNICALL
Java_liba_crc8_gen(JNIEnv
*Env
, jobject Obj
, jbyte poly
, jboolean reversed
)
45 jobject Ctx
= (*Env
)->GetObjectField(Env
, Obj
, L
.ctx
);
46 struct crc8
*ctx
= (struct crc8
*)(*Env
)->GetDirectBufferAddress(Env
, Ctx
);
47 reversed
? a_crc8l_init(ctx
->table
, (a_u8
)poly
)
48 : a_crc8m_init(ctx
->table
, (a_u8
)poly
);
52 JNIEXPORT jbyte JNICALL
Java_liba_crc8_eval(JNIEnv
*Env
, jobject Obj
, jbyteArray block
, jbyte value
)
54 jobject Ctx
= (*Env
)->GetObjectField(Env
, Obj
, L
.ctx
);
55 struct crc8
*ctx
= (struct crc8
*)(*Env
)->GetDirectBufferAddress(Env
, Ctx
);
56 jsize n
= (*Env
)->GetArrayLength(Env
, block
);
57 jbyte
*p
= (*Env
)->GetByteArrayElements(Env
, block
, NULL
);
58 value
= (jbyte
)a_crc8(ctx
->table
, p
, (a_size
)n
, (a_u8
)value
);
59 (*Env
)->ReleaseByteArrayElements(Env
, block
, p
, JNI_ABORT
);
63 JNIEXPORT jbyteArray JNICALL
Java_liba_crc8_pack(JNIEnv
*Env
, jobject Obj
, jbyteArray block
, jbyte value
)
65 jobject Ctx
= (*Env
)->GetObjectField(Env
, Obj
, L
.ctx
);
66 struct crc8
*ctx
= (struct crc8
*)(*Env
)->GetDirectBufferAddress(Env
, Ctx
);
67 jsize block_n
= (*Env
)->GetArrayLength(Env
, block
);
68 jbyteArray res
= (*Env
)->NewByteArray(Env
, block_n
+ 1);
69 jbyte
*block_p
= (*Env
)->GetByteArrayElements(Env
, block
, NULL
);
70 value
= (jbyte
)a_crc8(ctx
->table
, block_p
, (a_size
)block_n
, (a_u8
)value
);
71 (*Env
)->SetByteArrayRegion(Env
, res
, 0, block_n
, block_p
);
72 (*Env
)->ReleaseByteArrayElements(Env
, block
, block_p
, JNI_ABORT
);
73 (*Env
)->SetByteArrayRegion(Env
, res
, block_n
, 1, &value
);