Skip to content

Commit c3a247b

Browse files
committed
Stability update | Semaphores removed
1 parent 520e4c4 commit c3a247b

31 files changed

+171
-258
lines changed

CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ include_directories(include)
66
set(SOURCES
77
src/dbits.c
88
src/dpacket.c
9-
src/dsem.c
109
src/dserial.c
1110
)
1211

README.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
<a href="https://www.buymeacoffee.com/st1vms"><img src="https://img.buymeacoffee.com/button-api/?text=1 Pizza Margherita&emoji=🍕&slug=st1vms&button_colour=0fa913&font_colour=ffffff&font_family=Bree&outline_colour=ffffff&coffee_colour=FFDD00" /></a>
22
# dynamic-bits
3-
Data serialization library.
3+
4+
## How to build JDBits ( Android )
5+
6+
Having android-studio folder inside $HOME directory, cd into JDBIts project folder and execute...
7+
8+
```
9+
JAVA_HOME=$HOME/android-studio/jbr ./gradlew jdbits:assemble
10+
```

binds/Android/JDBits/app/build.gradle

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
plugins {
2-
id 'com.android.library'
2+
id 'com.android.application'
33
}
44

55
android {
6-
namespace 'com.st1vms.android.jdbits'
6+
namespace 'com.st1vms.android.jdbits.app'
77
compileSdk 33
88

99
defaultConfig {
@@ -18,6 +18,8 @@ android {
1818
release {
1919
minifyEnabled false
2020
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
21+
jniDebuggable true
22+
debuggable true
2123
}
2224
debug {
2325
jniDebuggable true

binds/Android/JDBits/app/src/androidTest/java/com/st1vms/android/jdbits/app/ExampleInstrumentedTest.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.st1vms.android.jdbits.DPacket;
1313
import com.st1vms.android.jdbits.DTypes;
1414
import com.st1vms.android.jdbits.dtypes.BooleanType;
15-
import com.st1vms.android.jdbits.dtypes.DSerializable;
1615
import com.st1vms.android.jdbits.dtypes.DoubleType;
1716
import com.st1vms.android.jdbits.dtypes.Int16Type;
1817
import com.st1vms.android.jdbits.dtypes.Int32Type;
@@ -84,7 +83,9 @@ public void useAppContext() throws UnsupportedEncodingException {
8483
"\nSerialized to %d bytes: %s", buf.length, s));
8584

8685
try {
87-
DPacket p = DBits.DeserializeBuffer(buf, buf.length);
86+
87+
byte[] testBuf = {-72, 35, 4, 0, -76, -81, 74, -52, -109, 3};
88+
DPacket p = DBits.DeserializeBuffer(testBuf, testBuf.length);
8889
if(p == null){
8990
Log.d("TAG","Deserialize Error!");
9091
return;

binds/Android/JDBits/jdbits/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ android {
2323
buildTypes {
2424
release {
2525
minifyEnabled false
26+
jniDebuggable true
2627
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
2728
}
2829
debug {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
11
package com.st1vms.android.jdbits;
22

3-
import android.content.Context;
3+
import android.util.Log;
44

5-
import androidx.test.platform.app.InstrumentationRegistry;
65
import androidx.test.ext.junit.runners.AndroidJUnit4;
76

87
import org.junit.Test;
98
import org.junit.runner.RunWith;
109

11-
import static org.junit.Assert.*;
10+
11+
import com.st1vms.android.jdbits.DBits;
12+
import com.st1vms.android.jdbits.DPacket;
13+
import com.st1vms.android.jdbits.DTypes;
14+
import com.st1vms.android.jdbits.dtypes.BooleanType;
15+
import com.st1vms.android.jdbits.dtypes.DoubleType;
16+
import com.st1vms.android.jdbits.dtypes.Int16Type;
17+
import com.st1vms.android.jdbits.dtypes.Int32Type;
18+
import com.st1vms.android.jdbits.dtypes.Int64Type;
19+
import com.st1vms.android.jdbits.dtypes.Int8Type;
20+
import com.st1vms.android.jdbits.dtypes.UInt16Type;
21+
import com.st1vms.android.jdbits.dtypes.UInt32Type;
22+
import com.st1vms.android.jdbits.dtypes.UInt64Type;
23+
import com.st1vms.android.jdbits.dtypes.UInt8Type;
24+
import com.st1vms.android.jdbits.dtypes.UTF8StringType;
25+
26+
import java.io.UnsupportedEncodingException;
27+
import java.util.ArrayList;
28+
import java.util.Locale;
1229

1330
/**
1431
* Instrumented test, which will execute on an Android device.
@@ -18,9 +35,99 @@
1835
@RunWith(AndroidJUnit4.class)
1936
public class ExampleInstrumentedTest {
2037
@Test
21-
public void useAppContext() {
38+
public void useAppContext() throws UnsupportedEncodingException {
2239
// Context of the app under test.
23-
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
24-
assertEquals("com.st1vms.android.jdbits.test", appContext.getPackageName());
40+
DTypes[] template = new DTypes[]{
41+
DTypes.UINT8_TYPE,
42+
DTypes.UINT16_TYPE,
43+
DTypes.UINT32_TYPE,
44+
DTypes.UINT64_TYPE,
45+
DTypes.INT8_TYPE,
46+
DTypes.INT16_TYPE,
47+
DTypes.INT32_TYPE,
48+
DTypes.INT64_TYPE,
49+
DTypes.BOOLEAN_TYPE,
50+
DTypes.DOUBLE_TYPE,
51+
DTypes.UTF8_STRING_TYPE
52+
};
53+
54+
if(!DBits.RegisterPacket(0, template)){
55+
return;
56+
}
57+
58+
59+
DPacket packet = new DPacket(0, new ArrayList<>(){
60+
{
61+
add(new UInt8Type((short) 42));
62+
add(new UInt16Type((short) 160));
63+
add(new UInt32Type(4002));
64+
add(new UInt64Type(41812));
65+
add(new Int8Type((byte) -42));
66+
add(new Int16Type((short) -160));
67+
add(new Int32Type(-4002));
68+
add(new Int64Type(-41812));
69+
add(new BooleanType(false));
70+
add(new DoubleType(160.051));
71+
add(new UTF8StringType("I do desire we may be better strangers"));
72+
}
73+
});
74+
75+
final byte[] buf = DBits.SerializeDPacket(packet);
76+
if(buf != null){
77+
78+
StringBuilder s = new StringBuilder();
79+
for(byte b: buf){
80+
s.append(String.format(Locale.getDefault(), "0x%02x ", b));
81+
}
82+
Log.d("TAG",String.format(Locale.getDefault(),
83+
"\nSerialized to %d bytes: %s", buf.length, s));
84+
85+
try {
86+
87+
DPacket p = DBits.DeserializeBuffer(buf, buf.length);
88+
if(p == null){
89+
Log.d("TAG","Deserialize Error!");
90+
return;
91+
}
92+
UInt8Type u8 = (UInt8Type) p.getField(0);
93+
Log.d("TAG",String.format(Locale.getDefault(), "U8 -> %d",u8.getShortValue()));
94+
95+
UInt16Type u16 = (UInt16Type) p.getField(1);
96+
Log.d("TAG",String.format(Locale.getDefault(), "U16 -> %d",u16.getIntValue()));
97+
98+
UInt32Type u32 = (UInt32Type) p.getField(2);
99+
Log.d("TAG",String.format(Locale.getDefault(), "U32 -> %d",u32.getIntValue()));
100+
101+
UInt64Type u64 = (UInt64Type) p.getField(3);
102+
Log.d("TAG",String.format(Locale.getDefault(), "U64 -> %d",u64.getLongValue()));
103+
104+
Int8Type i8 = (Int8Type) p.getField(4);
105+
Log.d("TAG",String.format(Locale.getDefault(), "I8 -> %d",i8.getByteValue()));
106+
107+
Int16Type i16 = (Int16Type) p.getField(5);
108+
Log.d("TAG",String.format(Locale.getDefault(), "I16 -> %d",i16.getShortValue()));
109+
110+
Int32Type i32 = (Int32Type) p.getField(6);
111+
Log.d("TAG",String.format(Locale.getDefault(), "I32 -> %d",i32.getIntValue()));
112+
113+
Int64Type i64 = (Int64Type) p.getField(7);
114+
Log.d("TAG",String.format(Locale.getDefault(), "I64 -> %d",i64.getLongValue()));
115+
116+
BooleanType b = (BooleanType) p.getField(8);
117+
Log.d("TAG",String.format(Locale.getDefault(), "B -> %b",b.getBoolValue()));
118+
119+
DoubleType d = (DoubleType) p.getField(9);
120+
Log.d("TAG",String.format(Locale.getDefault(), "D -> %f",d.getDoubleValue()));
121+
122+
UTF8StringType str = (UTF8StringType) p.getField(10);
123+
Log.d("TAG",String.format(Locale.getDefault(), "UTF8 -> %s",str.getUTF8StringValue()));
124+
125+
}catch (Exception e){
126+
e.printStackTrace();
127+
}
128+
129+
}else{
130+
Log.d("TAG","Buffer is null");
131+
}
25132
}
26133
}

binds/Android/JDBits/jdbits/src/main/cpp/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ add_library( # Sets the name of the library.
2424
# Provides a relative path to your source file(s).
2525
jdbits.cpp
2626
src/dbits.c
27-
src/dsem.c
2827
src/dpacket.c
2928
src/dserial.c)
3029

binds/Android/JDBits/jdbits/src/main/cpp/include/dbits.h

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#ifndef __DBITS_H
22

33
#include "dtypes.h"
4-
#include "dsem.h"
54
#include "dpacket.h"
65

76
#ifdef __cplusplus

binds/Android/JDBits/jdbits/src/main/cpp/include/dsem.h

-44
This file was deleted.

binds/Android/JDBits/jdbits/src/main/cpp/jdbits.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ extern "C"
6262
JNIEXPORT void JNICALL
6363
Java_com_st1vms_android_jdbits_DBits_nativeInit(JNIEnv *env, jclass clazz) {
6464

65-
InitLocks();
66-
6765
jclass _dpacket_cls = env->FindClass("com/st1vms/android/jdbits/DPacket");
6866
dpacket_cls = reinterpret_cast<jclass>(env->NewGlobalRef(_dpacket_cls));
6967
dpacket_id_field = env->GetFieldID(dpacket_cls, "packet_id", "I");
@@ -291,7 +289,7 @@ Java_com_st1vms_android_jdbits_DBits_SerializeDPacket(JNIEnv *env, jclass clazz,
291289

292290
jsize buffer_size = 0;
293291
unsigned char buf[LOCAL_BUFFER_SIZE];
294-
memset(buf, 0, LOCAL_BUFFER_SIZE);
292+
memset(buf, 0, LOCAL_BUFFER_SIZE*sizeof(unsigned char));
295293
if (!SerializePacket(buf, LOCAL_BUFFER_SIZE, &dpacket,
296294
reinterpret_cast<size_t *>(&buffer_size)) ||
297295
buffer_size >= LOCAL_BUFFER_SIZE) {

binds/Android/JDBits/jdbits/src/main/cpp/src/dbits.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ char DeserializeBuffer(unsigned char *buffer, const size_t buffer_size, dpacket_
350350
data.utf8_str_v = (utf8_string_t){
351351
.length = 0,
352352
.utf8_string = {0}};
353-
memset(data.utf8_str_v.utf8_string, 0, MAX_STRING_LENGTH);
353+
memset(data.utf8_str_v.utf8_string, 0, MAX_STRING_LENGTH*sizeof(UInt8));
354354

355355
if (NULL == (buffer = DeserializeUTF8String(buffer, &n, &bit_count, &(data.utf8_str_v))) ||
356356
!AddUTF8StringSerializable(packet_out,data.utf8_str_v.utf8_string, data.utf8_str_v.length ))

binds/Android/JDBits/jdbits/src/main/cpp/src/dpacket.c

+5-18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <stdlib.h>
22
#include <string.h>
3-
#include "dsem.h"
43
#include "dpacket.h"
54

65
static int PACKET_TABLE[PACKET_TABLE_SIZE][MAX_PACKET_FIELDS];
@@ -37,10 +36,7 @@ char RegisterPacket(packet_id_t packet_id, int *packet_format, size_t format_siz
3736
return 0;
3837
}
3938

40-
_register_wait();
41-
// Critical Section Start
42-
43-
memset(PACKET_TABLE[packet_id], 0, MAX_PACKET_FIELDS);
39+
memset(PACKET_TABLE[packet_id], 0, MAX_PACKET_FIELDS*sizeof(int));
4440
size_t i = 0;
4541
for (; packet_format != NULL && i < format_size; packet_format++, i++)
4642
{
@@ -49,13 +45,10 @@ char RegisterPacket(packet_id_t packet_id, int *packet_format, size_t format_siz
4945

5046
if (i != format_size)
5147
{
52-
memset(PACKET_TABLE[packet_id], 0, MAX_PACKET_FIELDS);
48+
memset(PACKET_TABLE[packet_id], 0, MAX_PACKET_FIELDS*sizeof(int));
5349
return 0;
5450
}
5551

56-
// Critical Section End
57-
58-
_register_post();
5952
return 1;
6053
}
6154

@@ -66,9 +59,6 @@ int *GetPacketFormat(packet_id_t packet_id, size_t *out_size)
6659
return NULL;
6760
}
6861

69-
_getter_wait();
70-
// Critical Section Start
71-
7262
*out_size = 0;
7363
for (size_t i = 0; i < MAX_PACKET_FIELDS; i++)
7464
{
@@ -85,15 +75,12 @@ int *GetPacketFormat(packet_id_t packet_id, size_t *out_size)
8575
r = PACKET_TABLE[packet_id];
8676
}
8777

88-
// Critical Section END
89-
_getter_post();
90-
9178
return r != NULL ? r : NULL;
9279
}
9380

9481
char NewPacket(dpacket_t packet_p, packet_id_t packet_id)
9582
{
96-
if (packet_p == NULL || packet_id > UINT8_MAX)
83+
if (packet_p == NULL)
9784
{
9885
return 0;
9986
}
@@ -135,7 +122,7 @@ char AddSerializable(dpacket_t dpacket_p, serializable_type_t stype, data_union_
135122
return 0;
136123
}
137124

138-
memset(node_p->data.utf8_str_v.utf8_string, 0, MAX_STRING_LENGTH);
125+
memset(node_p->data.utf8_str_v.utf8_string, 0, MAX_STRING_LENGTH*sizeof(UInt8));
139126
UInt8 * tmp = datav.utf8_str_v.utf8_string;
140127
for(size_t i = 0; tmp != NULL && i < node_p->data.utf8_str_v.length; tmp++, i++){
141128
node_p->data.utf8_str_v.utf8_string[i] = *tmp;
@@ -197,7 +184,7 @@ char AddUTF8StringSerializable(dpacket_t dpacket_p, const unsigned char * string
197184
.utf8_string = {0}
198185
};
199186

200-
memset(node_p->data.utf8_str_v.utf8_string, 0, MAX_STRING_LENGTH);
187+
memset(node_p->data.utf8_str_v.utf8_string, 0, MAX_STRING_LENGTH*sizeof(UInt8));
201188
const UInt8 * tmp = string_v;
202189
for(size_t i = 0; tmp != NULL && i < node_p->data.utf8_str_v.length; tmp++, i++){
203190
node_p->data.utf8_str_v.utf8_string[i] = *tmp;

0 commit comments

Comments
 (0)