HexInputStream.smali
.class public Lno/nordicsemi/android/dfu/internal/HexInputStream;
.super Ljava/io/FilterInputStream;
.source "HexInputStream.java"
# instance fields
.field private final LINE_LENGTH:I
.field private final MBRSize:I
.field private available:I
.field private bytesRead:I
.field private lastAddress:I
.field private final localBuf:[B
.field private localPos:I
.field private pos:I
.field private size:I
# direct methods
.method public constructor <init>(Ljava/io/InputStream;I)V
.registers 5
.prologue
const/16 v1, 0x80
.line 65
new-instance v0, Ljava/io/BufferedInputStream;
invoke-direct {v0, p1}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V
invoke-direct {p0, v0}, Ljava/io/FilterInputStream;-><init>(Ljava/io/InputStream;)V
.line 42
iput v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->LINE_LENGTH:I
.line 66
new-array v0, v1, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
.line 67
iput v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
.line 68
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->size:I
.line 69
const/4 v0, 0x0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
.line 70
iput p2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->MBRSize:I
.line 72
invoke-direct {p0, p2}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->calculateBinSize(I)I
move-result v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->available:I
.line 73
return-void
.end method
.method public constructor <init>([BI)V
.registers 5
.prologue
const/16 v1, 0x80
.line 76
new-instance v0, Ljava/io/ByteArrayInputStream;
invoke-direct {v0, p1}, Ljava/io/ByteArrayInputStream;-><init>([B)V
invoke-direct {p0, v0}, Ljava/io/FilterInputStream;-><init>(Ljava/io/InputStream;)V
.line 42
iput v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->LINE_LENGTH:I
.line 77
new-array v0, v1, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
.line 78
iput v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
.line 79
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->size:I
.line 80
const/4 v0, 0x0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
.line 81
iput p2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->MBRSize:I
.line 83
invoke-direct {p0, p2}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->calculateBinSize(I)I
move-result v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->available:I
.line 84
return-void
.end method
.method private asciiToInt(I)I
.registers 3
.prologue
.line 349
const/16 v0, 0x41
if-lt p1, v0, :cond_7
.line 350
add-int/lit8 v0, p1, -0x37
.line 354
:goto_6
return v0
.line 352
:cond_7
const/16 v0, 0x30
if-lt p1, v0, :cond_e
.line 353
add-int/lit8 v0, p1, -0x30
goto :goto_6
.line 354
:cond_e
const/4 v0, -0x1
goto :goto_6
.end method
.method private calculateBinSize(I)I
.registers 9
.prologue
const/4 v2, 0x0
.line 87
.line 88
iget-object v3, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->in:Ljava/io/InputStream;
.line 89
invoke-virtual {v3}, Ljava/io/InputStream;->available()I
move-result v0
invoke-virtual {v3, v0}, Ljava/io/InputStream;->mark(I)V
.line 95
:try_start_a
invoke-virtual {v3}, Ljava/io/InputStream;->read()I
move-result v0
move v1, v0
move v0, v2
.line 97
:goto_10
invoke-direct {p0, v1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->checkComma(I)V
.line 99
invoke-direct {p0, v3}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v1
.line 100
invoke-direct {p0, v3}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readAddress(Ljava/io/InputStream;)I
move-result v4
.line 101
invoke-direct {p0, v3}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v5
.line 102
packed-switch v5, :pswitch_data_84
.line 135
:cond_22
:goto_22
:pswitch_22
shl-int/lit8 v1, v1, 0x1
add-int/lit8 v1, v1, 0x2
int-to-long v4, v1
.line 136
invoke-direct {p0, v3, v4, v5}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move v1, v0
move v0, v2
.line 141
:cond_2c
:goto_2c
invoke-virtual {v3}, Ljava/io/InputStream;->read()I
:try_end_2f
.catchall {:try_start_a .. :try_end_2f} :catchall_7e
move-result v2
.line 143
const/16 v4, 0xa
if-eq v2, v4, :cond_2c
const/16 v4, 0xd
if-eq v2, v4, :cond_2c
move v6, v0
move v0, v1
move v1, v2
move v2, v6
.line 144
goto :goto_10
.line 149
:pswitch_3d
invoke-virtual {v3}, Ljava/io/InputStream;->reset()V
.line 123
:goto_40
return v0
.line 112
:pswitch_41
:try_start_41
invoke-direct {p0, v3}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readAddress(Ljava/io/InputStream;)I
:try_end_44
.catchall {:try_start_41 .. :try_end_44} :catchall_7e
move-result v1
.line 113
if-lez v0, :cond_51
shr-int/lit8 v2, v2, 0x10
add-int/lit8 v2, v2, 0x1
if-eq v1, v2, :cond_51
.line 149
invoke-virtual {v3}, Ljava/io/InputStream;->reset()V
goto :goto_40
.line 115
:cond_51
shl-int/lit8 v1, v1, 0x10
.line 116
const-wide/16 v4, 0x2
:try_start_55
invoke-direct {p0, v3, v4, v5}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move v6, v1
move v1, v0
move v0, v6
.line 117
goto :goto_2c
.line 121
:pswitch_5c
invoke-direct {p0, v3}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readAddress(Ljava/io/InputStream;)I
:try_end_5f
.catchall {:try_start_55 .. :try_end_5f} :catchall_7e
move-result v1
shl-int/lit8 v1, v1, 0x4
.line 122
if-lez v0, :cond_70
shr-int/lit8 v4, v1, 0x10
shr-int/lit8 v2, v2, 0x10
add-int/lit8 v2, v2, 0x1
if-eq v4, v2, :cond_70
.line 149
invoke-virtual {v3}, Ljava/io/InputStream;->reset()V
goto :goto_40
.line 125
:cond_70
const-wide/16 v4, 0x2
:try_start_72
invoke-direct {p0, v3, v4, v5}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
:try_end_75
.catchall {:try_start_72 .. :try_end_75} :catchall_7e
move v6, v1
move v1, v0
move v0, v6
.line 126
goto :goto_2c
.line 130
:pswitch_79
add-int/2addr v4, v2
.line 131
if-lt v4, p1, :cond_22
.line 132
add-int/2addr v0, v1
goto :goto_22
.line 149
:catchall_7e
move-exception v0
invoke-virtual {v3}, Ljava/io/InputStream;->reset()V
throw v0
.line 102
nop
:pswitch_data_84
.packed-switch 0x0
:pswitch_79
:pswitch_3d
:pswitch_5c
:pswitch_22
:pswitch_41
.end packed-switch
.end method
.method private checkComma(I)V
.registers 4
.prologue
.line 325
const/16 v0, 0x3a
if-eq p1, v0, :cond_c
.line 326
new-instance v0, Lno/nordicsemi/android/dfu/internal/exception/HexFileValidationException;
const-string v1, "Not a HEX file"
invoke-direct {v0, v1}, Lno/nordicsemi/android/dfu/internal/exception/HexFileValidationException;-><init>(Ljava/lang/String;)V
throw v0
.line 327
:cond_c
return-void
.end method
.method private readAddress(Ljava/io/InputStream;)I
.registers 4
.prologue
.line 345
invoke-direct {p0, p1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v0
shl-int/lit8 v0, v0, 0x8
invoke-direct {p0, p1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v1
or-int/2addr v0, v1
return v0
.end method
.method private readByte(Ljava/io/InputStream;)I
.registers 4
.prologue
.line 338
invoke-virtual {p1}, Ljava/io/InputStream;->read()I
move-result v0
invoke-direct {p0, v0}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->asciiToInt(I)I
move-result v0
.line 339
invoke-virtual {p1}, Ljava/io/InputStream;->read()I
move-result v1
invoke-direct {p0, v1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->asciiToInt(I)I
move-result v1
.line 341
shl-int/lit8 v0, v0, 0x4
or-int/2addr v0, v1
return v0
.end method
.method private readLine()I
.registers 13
.prologue
const-wide/16 v10, 0x2
const/4 v3, -0x1
const/4 v1, 0x0
.line 227
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
if-ne v0, v3, :cond_9
.line 312
:cond_8
:goto_8
return v1
.line 229
:cond_9
iget-object v4, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->in:Ljava/io/InputStream;
.line 238
:cond_b
invoke-virtual {v4}, Ljava/io/InputStream;->read()I
move-result v0
.line 239
iget v2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v2, v2, 0x1
iput v2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 241
const/16 v2, 0xa
if-eq v0, v2, :cond_b
const/16 v2, 0xd
if-eq v0, v2, :cond_b
.line 255
invoke-direct {p0, v0}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->checkComma(I)V
.line 256
invoke-direct {p0, v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v2
.line 257
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v0, v0, 0x2
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 258
invoke-direct {p0, v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readAddress(Ljava/io/InputStream;)I
move-result v5
.line 259
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v0, v0, 0x4
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 260
invoke-direct {p0, v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v0
.line 261
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v6, v6, 0x2
iput v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 264
packed-switch v0, :pswitch_data_e8
.line 297
:pswitch_41
shl-int/lit8 v5, v2, 0x1
add-int/lit8 v5, v5, 0x2
int-to-long v6, v5
.line 298
iget v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
int-to-long v8, v5
invoke-direct {p0, v4, v6, v7}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move-result-wide v6
add-long/2addr v6, v8
long-to-int v5, v6
iput v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 301
:cond_51
:goto_51
if-nez v0, :cond_b
move v0, v1
.line 304
:goto_54
iget-object v3, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
array-length v3, v3
if-ge v0, v3, :cond_d8
if-ge v0, v2, :cond_d8
.line 305
invoke-direct {p0, v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readByte(Ljava/io/InputStream;)I
move-result v3
.line 306
iget v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v5, v5, 0x2
iput v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 307
iget-object v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
int-to-byte v3, v3
aput-byte v3, v5, v0
.line 304
add-int/lit8 v0, v0, 0x1
goto :goto_54
.line 267
:pswitch_6d
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
add-int/2addr v5, v6
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->MBRSize:I
if-ge v5, v6, :cond_51
.line 269
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
int-to-long v6, v0
shl-int/lit8 v0, v2, 0x1
add-int/lit8 v0, v0, 0x2
int-to-long v8, v0
invoke-direct {p0, v4, v8, v9}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move-result-wide v8
add-long/2addr v6, v8
long-to-int v0, v6
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
move v0, v3
goto :goto_51
.line 274
:pswitch_86
iput v3, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
goto :goto_8
.line 278
:pswitch_89
invoke-direct {p0, v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readAddress(Ljava/io/InputStream;)I
move-result v5
shl-int/lit8 v5, v5, 0x4
.line 279
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v6, v6, 0x4
iput v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 280
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->bytesRead:I
if-lez v6, :cond_a3
shr-int/lit8 v6, v5, 0x10
iget v7, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
shr-int/lit8 v7, v7, 0x10
add-int/lit8 v7, v7, 0x1
if-ne v6, v7, :cond_8
.line 282
:cond_a3
iput v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
.line 283
iget v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
int-to-long v6, v5
invoke-direct {p0, v4, v10, v11}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move-result-wide v8
add-long/2addr v6, v8
long-to-int v5, v6
iput v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
goto :goto_51
.line 288
:pswitch_b1
invoke-direct {p0, v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readAddress(Ljava/io/InputStream;)I
move-result v5
.line 289
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
add-int/lit8 v6, v6, 0x4
iput v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 290
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->bytesRead:I
if-lez v6, :cond_c7
iget v6, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
shr-int/lit8 v6, v6, 0x10
add-int/lit8 v6, v6, 0x1
if-ne v5, v6, :cond_8
.line 292
:cond_c7
shl-int/lit8 v5, v5, 0x10
iput v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->lastAddress:I
.line 293
iget v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
int-to-long v6, v5
invoke-direct {p0, v4, v10, v11}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move-result-wide v8
add-long/2addr v6, v8
long-to-int v5, v6
iput v5, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
goto/16 :goto_51
.line 309
:cond_d8
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
int-to-long v6, v0
invoke-direct {p0, v4, v10, v11}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->skip(Ljava/io/InputStream;J)J
move-result-wide v4
add-long/2addr v4, v6
long-to-int v0, v4
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 310
iput v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
move v1, v2
.line 312
goto/16 :goto_8
.line 264
:pswitch_data_e8
.packed-switch 0x0
:pswitch_6d
:pswitch_86
:pswitch_89
:pswitch_41
:pswitch_b1
.end packed-switch
.end method
.method private skip(Ljava/io/InputStream;J)J
.registers 8
.prologue
.line 330
invoke-virtual {p1, p2, p3}, Ljava/io/InputStream;->skip(J)J
move-result-wide v0
.line 332
cmp-long v2, v0, p2
if-gez v2, :cond_f
.line 333
sub-long v2, p2, v0
invoke-virtual {p1, v2, v3}, Ljava/io/InputStream;->skip(J)J
move-result-wide v2
add-long/2addr v0, v2
.line 334
:cond_f
return-wide v0
.end method
# virtual methods
.method public available()I
.registers 3
.prologue
.line 155
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->available:I
iget v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->bytesRead:I
sub-int/2addr v0, v1
return v0
.end method
.method public read()I
.registers 3
.prologue
.line 182
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "Please, use readPacket() method instead"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public read([B)I
.registers 3
.prologue
.line 187
invoke-virtual {p0, p1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readPacket([B)I
move-result v0
return v0
.end method
.method public read([BII)I
.registers 6
.prologue
.line 192
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "Please, use readPacket() method instead"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public readPacket([B)I
.registers 7
.prologue
.line 166
const/4 v0, 0x0
.line 167
:cond_1
:goto_1
array-length v1, p1
if-ge v0, v1, :cond_29
.line 168
iget v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
iget v2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->size:I
if-ge v1, v2, :cond_1a
.line 169
add-int/lit8 v1, v0, 0x1
iget-object v2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localBuf:[B
iget v3, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
add-int/lit8 v4, v3, 0x1
iput v4, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
aget-byte v2, v2, v3
aput-byte v2, p1, v0
move v0, v1
.line 170
goto :goto_1
.line 173
:cond_1a
iget v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->bytesRead:I
invoke-direct {p0}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->readLine()I
move-result v2
iput v2, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->size:I
add-int/2addr v1, v2
iput v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->bytesRead:I
.line 174
iget v1, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->size:I
if-nez v1, :cond_1
.line 177
:cond_29
return v0
.end method
.method public declared-synchronized reset()V
.registers 2
.prologue
.line 317
monitor-enter p0
:try_start_1
invoke-super {p0}, Ljava/io/FilterInputStream;->reset()V
.line 319
const/4 v0, 0x0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->pos:I
.line 320
const/4 v0, 0x0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->bytesRead:I
.line 321
const/4 v0, 0x0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->localPos:I
:try_end_d
.catchall {:try_start_1 .. :try_end_d} :catchall_f
.line 322
monitor-exit p0
return-void
.line 317
:catchall_f
move-exception v0
monitor-exit p0
throw v0
.end method
.method public sizeInBytes()I
.registers 2
.prologue
.line 201
iget v0, p0, Lno/nordicsemi/android/dfu/internal/HexInputStream;->available:I
return v0
.end method
.method public sizeInPackets(I)I
.registers 4
.prologue
.line 213
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->sizeInBytes()I
move-result v0
.line 215
div-int v1, v0, p1
rem-int/2addr v0, p1
if-lez v0, :cond_c
const/4 v0, 0x1
:goto_a
add-int/2addr v0, v1
return v0
:cond_c
const/4 v0, 0x0
goto :goto_a
.end method